【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板18
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 ESP32 WiFi蓝牙4MB4闪存UNO R32开发板模块 UNO D1 R32(ESP32)开发板 兼容Arduino

知识点:ESP32芯片
(包括:ESP32- d0wd、ESP32- d0wdq6、ESP32- d2wd、ESP32-
s0wd)集成了Wi-Fi和双模式蓝牙。根据型号差异,ESP32包含一个或两个低功耗Xtensa®32位LX6微处理器(s),最大时钟速度240
MHz(通常是160 MHz)和Xtensa RAM / ROM,本地内存和JTAG接口。


处理器: 主处理器: Tensilica Xtensa 32位LX6微处理器 核心: 2 或
1(取决于变化)除ESP32-S0WD为单核外,ESP32系列所有芯片均为双核。 时钟频率:高达 240 MHz 性能:高达 600
DMIPS 超低功耗协处理器: 允许您在深度睡眠时进行 ADC 转换、计算和电平阈值。 无线连接: 的Wi-Fi: 802.11 B /
G / N / E / I(802.11n标准@ 2.4GHz的高达150兆比特/秒) 蓝牙: v4.2 BR/EDR 和蓝牙低功耗
(BLE) 记忆: 内部存储器: ROM: 448 KiB用于启动和核心功能。 SRAM: 520 KiB用于数据和指令。 RTC 快速
SRAM: 8 KiB用于从深度睡眠模式进行 RTC 启动期间的数据存储和主 CPU。 RTC 慢速 SRAM: 8
KiB用于深度睡眠模式下的协处理器访问。 电子保险丝: 1 Kibit其中 256 位用于系统(MAC 地址和芯片配置),其余 768
位保留用于客户应用,包括 Flash-Encryption 和 Chip-ID。 嵌入式闪存:Flash 通过 ESP32-D2WD 和
ESP32-PICO-D4 上的 IO16、IO17、SD_CMD、SD_CLK、SD_DATA_0 和 SD_DATA_1 内部连接。
0 MiB(ESP32-D0WDQ6、ESP32-D0WD 和 ESP32-S0WD 芯片) 2 MiB(ESP32-D2WD 芯片) 4
MiB(ESP32-PICO-D4 SiP 模块) 外部闪存和 SRAM: ESP32 最多支持四个 16 MiB 外部 QSPI闪存和
SRAM,具有基于 AES 的硬件加密,以保护开发人员的程序和数据。ESP32 可以通过高速缓存访问外部 QSPI flash 和
SRAM。 高达 16 MiB 的外部闪存被内存映射到 CPU 代码空间,支持 8 位、16 位和 32 位访问。支持代码执行。 多达 8
MiB 的外部闪存/SRAM 存储器映射到 CPU 数据空间,支持 8 位、16 位和 32 位访问。闪存和 SRAM
支持数据读取。SRAM 支持数据写入。 带有嵌入式 flash 的 ESP32 芯片不支持外部 flash 和外设之间的地址映射。
外设输入/输出:带有 DMA
的丰富外设接口,包括电容式触摸、ADC(模数转换器)、DAC(数模转换器)、I²C(内部集成电路)、UART(通用异步接收器/发送器)
)、CAN 2.0(控制器局域网)、SPI(串行外设接口)、I²S(集成 IC
间声音)、RMII(简化的媒体独立接口)、PWM(脉宽调制)等。 安全: 支持 IEEE 802.11 标准安全功能,包括
WFA、WPA/WPA2 和 WAPI 安全启动 闪存加密 1024位OTP,客户最高768位
加密硬件加速:AES、SHA-2、RSA、椭圆曲线加密(ECC)、随机数生成器(RNG)

实验的视频记录
优酷:https://v.youku.com/v_show/id_XNTkxOTQxODA2OA==.html?spm=a2hcb.playlsit.page.3
B站:https://www.bilibili.com/video/BV1ye4y1s7n1/?vd_source=98c6b1fc23b2787403d97f8d3cc0b7e5

实验场景图 动态图

实验的视频记录2
优酷:https://v.youku.com/v_show/id_XNTkxOTQxODEzNg==.html?spm=a2hcb.playlsit.page.1
B站:https://www.bilibili.com/video/BV1hg411q7yo/?vd_source=98c6b1fc23b2787403d97f8d3cc0b7e5

实验场景图

实验的视频记录
优酷:
B站:https://www.bilibili.com/video/BV1nD4y147xD/?vd_source=98c6b1fc23b2787403d97f8d3cc0b7e5

实验场景图 动态图

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之四十八:Arduino 和 FastLED多彩音乐灯
Arduino实验开源代码
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百七十七:Wemos D1 R32 ESP32开发板项目之四十八:Arduino 和 FastLED多彩音乐灯
*/#include <FastLED.h>
#define SAMPLEPERIODUS 200
#define MIC_PIN 39
#define LED_DT 23
#define COLOR_ORDER GRB
#define LED_TYPE WS2812
#define NUM_LEDS 256
uint8_t max_bright = 33;
struct CRGB leds[NUM_LEDS];
CRGBPalette16 currentPalette = RainbowColors_p;
CRGBPalette16 targetPalette;void setup() {pinMode(LED_BUILTIN, OUTPUT);LEDS.addLeds<LED_TYPE, LED_DT, COLOR_ORDER>(leds, NUM_LEDS);FastLED.setBrightness(max_bright);
}float bassFilter(float sample) {static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};xv[0] = xv[1]; xv[1] = xv[2];xv[2] = sample / 9.1f;yv[0] = yv[1]; yv[1] = yv[2];yv[2] = (xv[2] - xv[0]) + (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);return yv[2];
}float envelopeFilter(float sample) {static float xv[2] = {0, 0}, yv[2] = {0, 0};xv[0] = xv[1];xv[1] = sample / 160.f;yv[0] = yv[1];yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);return yv[1];
}float beatFilter(float sample) {static float xv[3] = {0, 0, 0}, yv[3] = {0, 0, 0};xv[0] = xv[1]; xv[1] = xv[2];xv[2] = sample / 7.015f;yv[0] = yv[1]; yv[1] = yv[2];yv[2] = (xv[2] - xv[0]) + (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);return yv[2];
}void loop() {unsigned long time = micros();float sample, value, envelope, beat, thresh, micLev;for (uint8_t i = 0; ; ++i) {sample = (float)analogRead(MIC_PIN);micLev = ((micLev * 67) + sample) / 68;sample -= micLev;value = bassFilter(sample);value = abs(value);envelope = envelopeFilter(value);if (i == 200) {beat = beatFilter(envelope);thresh = 0.02f * 75.;if (beat > thresh) {digitalWrite(LED_BUILTIN, LOW);int strt = random8(NUM_LEDS / 2);int ende = strt + random8(NUM_LEDS / 2);for (int i = strt; i < ende; i++) {uint8_t index = inoise8(i * 30, millis() + i * 30);leds[i] = ColorFromPalette(currentPalette, index, 255, LINEARBLEND);}} else {digitalWrite(LED_BUILTIN, HIGH);}i = 0;}EVERY_N_SECONDS(5) {uint8_t baseC = random8();targetPalette = CRGBPalette16(CHSV(baseC + random8(32), 255, random8(128, 255)),CHSV(baseC + random8(64), 255, random8(128, 255)),CHSV(baseC + random8(64), 192, random8(128, 255)),CHSV(baseC + random8(), 255, random8(128, 255)));}EVERY_N_MILLISECONDS(50) {uint8_t maxChanges = 24;nblendPaletteTowardPalette(currentPalette, targetPalette, maxChanges);}EVERY_N_MILLIS(50) {fadeToBlackBy(leds, NUM_LEDS, 64);FastLED.show();}for (unsigned long up = time + SAMPLEPERIODUS; time > 20 && time < up; time = micros()) { }} // for i
} // loop()
实验场景图

实验的视频记录
优酷:
B站:https://www.bilibili.com/video/BV14K411d7y2/?vd_source=98c6b1fc23b2787403d97f8d3cc0b7e5

实验场景图 动态图

实验的视频记录
优酷:
B站:https://www.bilibili.com/video/BV1nK411d78Z/?vd_source=98c6b1fc23b2787403d97f8d3cc0b7e5

相关文章:
【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板18
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…...
C语言假期作业 DAY 14
一、选择题 1、有以下函数,该函数的功能是( ) int fun(char *s) {char *t s;while(*t);return(t-s); } A: 比较两个字符的大小 B: 计算s所指字符串占用内存字节的个数 C: 计算s所指字符串的长度 D: 将s所指字符串复制到字符串t中 答案解析 …...
Maven-生命周期及命令
关于本文 ✍写作原因 之前在学校学习的时候,编写代码使用的项目都是单体架构,导入开源框架依赖时只需要在pom.xml里面添加依赖,点一下reload按钮即可解决大部分需求;但是在公司使用了dubbo微服务架构之后发现只知道使用reload不足…...
常温超导:AI在研发中的潜力
目录 引言:1. 常温超导的挑战:2. AI在材料研究中的作用:3. AI在理论模型中的作用:4. AI与实验室合作的潜力:结论: 引言: 常温超导一直被认为是科学界的“圣杯”,可以在室温条件下实…...
【C++】开源:Eigen3矩阵与线性代数库配置使用
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Eigen3矩阵与线性代数库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&…...
OpenMesh 网格简化算法(基于边长度)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 网格简化的算法有很多种,基于边结构进行简化的方法便是其中一种方式。此类算法主要关注于它们如何选择要收缩的边,并且似乎都是为流形表面设计的,尽管边缘收缩也可以用于非流形表面,但往往会存在变形较大的问题…...
FFmpeg解码详细流程
介绍 FFmpeg的 libavcodec 模块完成音视频多媒体的编解码模块。老版本的 FFmpeg 将avcodec_decode_video2()作为视频的解码函数 API,将avcodec_decode_audio4()作为音频的解码函数 API;从 3.4版本开始已经将二者标记为废弃过时 API(attribut…...
人工智能的缺陷
首先从应用层面理解什么是人工智能,目前人工智能主流应用面包括:自然语言处理领域,代表为chatgpt,我们能用其进行日常交流,问题答疑,论文书写等。计算机视觉领域,代表为人脸识别,现在…...
基于ASP.NET MVC开发的、开源的个人博客系统
推荐一个功能丰富、易于使用和扩展的开源博客,可以轻松地创建和管理自己的博客。 项目简介 基于.Net Framework 4.5开发的、开源博客系统,具有丰富的功能,包括文章发布、分类、标签、评论、订阅、统计等功能,同时也可以根据需要…...
【LeetCode】对称二叉树 平衡二叉树
对称二叉树 即先判断根节点的左右子树相不相同,相同时,再判断左孩子的左子树和右孩子的右子树比较,左孩子的右子树和右孩子的左子树(当两个都相同时才是对称的).....依次递推,过程中并设置一些不满足相同的…...
区块链和WEB3.0有哪些基础知识呢
区块链基础知识 常用区块链基础知识包括: (1)区块链概念:区块链是一种去中心化的分布式账本技术,它通过加密算法和共识机制保证了数据的安全性和不可篡改性。区块链中的每一个区块都包含了前一个区块的哈希值&#x…...
七、封装(1)
本章概要 包的概念 代码组织创建独一无二的包名冲突定制工具库使用 import 改变行为使用包的忠告 访问控制(Access control)(或者_隐藏实现(implementation hiding)_)与“最初的实现不恰当”有关。 所有优…...
问题解决和批判性思维是软件工程的重要核心
软件工程的重心在于问题解决和批判性思维(合理设计和架构降低复杂度),而非仅局限于编程。 许多人误以为软件工程就只是编程,即用编程语言编写指令,让计算机按照这些指令行事。但实际上,软件工程的内涵远超…...
【EI/SCOPUS征稿】2023年通信网络与机器学习国际学术会议(CNML 2023)
2023年通信网络与机器学习国际学术会议(CNML 2023) 2023 International Conference on Communication Networks and Machine Learning 随着数据流量的显著增长,新的通信应用程序不断出现,并产生更多的数据流量,这些数…...
算法-岛屿数量
给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边…...
Crescent QuickPak Crack
Crescent QuickPak Crack Crescent QuickPak是一个32位ActiveX组件的综合集合,用于使用Visual Basic开发应用程序,这将减少开发时间并提高生产力。Crescent QuickPak包含Internet功能,用于打开、读取和解析IIS日志文件,将日志文件…...
六、ESP32数码管显示数字
1. 本节课的成功 2. 数码管 为什么会亮呢? 答:里面就是LED灯...
【Kubernetes】当K8s出现问题时,从哪些方面可以排查
前言 kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kub…...
[ MySQL ] — 库和表的操作
目录 库的操作 创建数据库 语法: 使用: 字符集和校验规则 查看系统默认字符集以及校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 校验规则对数据库的影响 操纵数据库 查看数据库 显示创建语句 修改数据库 删除数据库 备…...
Hive常见面试题
Hive的基本概念 什么是Hive?它的主要作用是什么? Hive是一个基于Hadoop生态系统的数据仓库和数据处理工具。 它提供了类似于SQL的查询语言(HiveQL),使用户能够使用SQL语句来查询和分析 大规模存储在Hadoop集群上的数…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
