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)
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之六:ESP32 触摸测试和 LED 控制
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之六:ESP32 触摸测试和 LED 控制
实验接线:触摸引脚 ==> D4,LED 引脚 ==> D18
*/
#define TOUTCH_PIN T0 // ESP32 Pin D4
#define LED_PIN 18
int touch_value = 100;
void setup() {
Serial.begin(115200);
delay(1000); //给我时间调出串行监视器
Serial.println("ESP32 Touch Test");
Serial.println("ESP32 触控测试");
pinMode(LED_PIN, OUTPUT);
digitalWrite (LED_PIN, LOW);
}
void loop(){
touch_value = touchRead(TOUTCH_PIN);
Serial.println(touch_value); // 使用 T0 获取数据
if (touch_value < 50){
digitalWrite (LED_PIN, HIGH);
Serial.println("有触控灯亮");
}
else{
digitalWrite (LED_PIN, LOW);
}
delay(1000);
}
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之六:ESP32 触摸测试和 LED 控制
实验串口返回情况
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之六:ESP32 触摸测试和 LED 控制
实验场景图
ESP32有10个内部电容式触摸传感器。我们可以利用这些传感器制作触摸式按键。以下就是这些传感器相对应的GPIO引脚:
T0:GPIO 4
T1:GPIO 0
T2:GPIO 2
T3:GPIO 15
T4:GPIO 13
T5:GPIO 12
T6:GPIO 14
T7:GPIO 27
T8:GPIO 33
T9:GPIO 32
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之七: ESP32的LED PWM 实现呼吸灯
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之七: ESP32的LED PWM 实现呼吸灯
实验接线:LED 引脚 ==> D18
*/
#define LED_PWM 18 //把调用的GPIO引脚进行了一个宏定义
int freq = 5000;
int ledChannel = 0;
int resolution = 8;
void setup() {
ledcSetup(ledChannel, freq, resolution);
ledcAttachPin(LED_PWM, ledChannel);
}
void loop() {
for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle++) {
ledcWrite(ledChannel, dutyCycle);
delay(7);
}
for (int dutyCycle = 255; dutyCycle >= 0; dutyCycle--) {
ledcWrite(ledChannel, dutyCycle);
delay(7);
}
}
在硬件方面,ESP32的LED PWM由16个独立通道组成,具有可配置的占空比和波周期。占空比的精度可以配置到16位分辨率。
在代码的第一部分中,我们将指定一些全局配置常量。第一个是为控制LED而产生的PWM信号的频率。我们将使用5000HZ的值。但请注意,频率的最大值尚不清楚,并且在 我们将要使用的功能的头文件中声明最大频率取决于所选的分辨率。
将以比特为单位指定LED PWM通道和PWM占空比的分辨率。同样从头文件中,我们可以看到我们可以选择0到15之间的通道,以及1到16位之间的分辨率。在这里我们将使用通道0和8位的分辨率。
int freq = 5000;
int ledChannel = 0;
int resolution = 8;
在设置功能中,我们将配置LED PWM功能。首先,我们需要设置我们指定的通道、频率和分辨率。为此,我们调用ledcSetup函数,该函数以相同的顺序接收前面提到的3个参数作为输入。
ledcSetup(ledChannel, freq, resolution);
但是值得注意,通道不是我们控制LED的引脚。因此,我们需要将通道0(我们定义的那个)连接到我们希望生成PWM信号的数字GPIO引脚上。我这里连接的GPIO2引脚。我们调用ledcAttachPin函数,将GPIO引脚的编号和先前定义的PWM通道作为参数传递。
ledcAttachPin(2, ledChannel);
以下是完整的初始化设置,以及一些常量的设置:
#define LED_PWM 2 //把调用的GPIO引脚进行了一个宏定义
int freq = 5000;
int ledChannel = 0;
int resolution = 8;
void {
ledcSetup(ledChannel, freq, resolution);
ledcAttachPin(LED_PWM, ledChannel);
}
也需要将编写代码来控制Arduino主循环中信号的占空比值。但最重要的功能是允许我们指定占空比值的功能。这是ledcWrite 函数,它接收PWM通道(不是GPIO的编号)作为第一个参数。
由于我们定义了8位分辨率,因此我们可以指定0到255(2 ^ 8 -1)之间的占空比值。因此,我们将在两个循环中迭代这些值,一个是递增的,另一个是递减的。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之七: ESP32的LED PWM 实现呼吸灯
Arduino实验场景图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之八: ESP32主板灯反转闪烁
实验开源仿真编程(Linkboy V4.60)
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之八: ESP32主板灯反转闪烁
实验开源仿真编程(Linkboy V4.60)
项目仿真运行的动态图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之九: 按钮控制ESP32主板灯的亮灭
实验开源仿真编程(Linkboy V4.60)
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之九: 按钮控制ESP32主板灯的亮灭
实验开源仿真编程(Linkboy V4.60)
项目仿真运行的动态图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之九: 按钮控制ESP32主板灯的亮灭
实验开源仿真编程(Linkboy V4.60)
实验场景图