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开发板
项目二十五:读取模拟量与闪灯(旋转电位器模拟输入)
实验接脚:2脚为板载LED,4脚接电位器OUT
实验开源代码
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百七十七:Wemos D1 R32 ESP32开发板项目二十五:读取模拟量与闪灯(旋转电位器模拟输入)实验接脚:2脚为板载LED,4脚接电位器OUT
*/#if CONFIG_FREERTOS_UNICORE
#define ARDUINO_RUNNING_CORE 0
#else
#define ARDUINO_RUNNING_CORE 1
#endif#ifndef LED_BUILTIN
#define LED_BUILTIN 2
#endif// 为 Blink 和 AnalogRead 定义两个任务
void TaskBlink( void *pvParameters );
void TaskAnalogReadA3( void *pvParameters );// the setup function runs once when you press reset or power the board
void setup() {// initialize serial communication at 115200 bits per second:Serial.begin(115200);// Now set up two tasks to run independently.xTaskCreatePinnedToCore(TaskBlink, "TaskBlink" // A name just for humans, 1024 // This stack size can be checked & adjusted by reading the Stack Highwater, NULL, 2 // Priority, with 3 (configMAX_PRIORITIES - 1) being the highest, and 0 being the lowest., NULL , ARDUINO_RUNNING_CORE);xTaskCreatePinnedToCore(TaskAnalogReadA3, "AnalogReadA3", 1024 // Stack size, NULL, 1 // Priority, NULL , ARDUINO_RUNNING_CORE);// Now the task scheduler, which takes over control of scheduling individual tasks, is automatically started.
}void loop()
{// Empty. Things are done in Tasks.
}/*--------------------------------------------------*/
/*---------------------- Tasks ---------------------*/
/*--------------------------------------------------*/void TaskBlink(void *pvParameters) // This is a task.
{(void) pvParameters;/*BlinkTurns on an LED on for one second, then off for one second, repeatedly.If you want to know what pin the on-board LED is connected to on your ESP32 model, checkthe Technical Specs of your board.
*/// initialize digital LED_BUILTIN on pin 13 as an output.pinMode(LED_BUILTIN, OUTPUT);for (;;) // A Task shall never return or exit.{digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)vTaskDelay(1000); // one tick delay (15ms) in between reads for stabilitydigitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOWvTaskDelay(1000); // one tick delay (15ms) in between reads for stability}
}void TaskAnalogReadA3(void *pvParameters) // This is a task.
{(void) pvParameters;/*AnalogReadSerialReads an analog input on pin A4, prints the result to the serial monitor.Graphical representation is available using serial plotter (Tools > Serial Plotter menu)Attach the center pin of a potentiometer to pin A3, and the outside pins to +5V and ground.This example code is in the public domain.
*/for (;;){// read the input on analog pin 4:int sensorValueA4 = analogRead(4);// print out the value you read:Serial.println(sensorValueA4);vTaskDelay(100); // one tick delay (15ms) in between reads for stability}
}
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目二十五:读取模拟量与闪灯(旋转电位器模拟输入)
实验接脚:2脚为板载LED,4脚接电位器OUT
项目串口返回情况
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目二十五:读取模拟量与闪灯(旋转电位器模拟输入)
实验串口绘图器返回情况
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目二十五:读取模拟量与闪灯(旋转电位器模拟输入)
实验接脚:2脚为板载LED,4脚接电位器OUT
实验场景图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目二十六:打印 ESP32 上次复位原因
实验开源代码
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百七十七:Wemos D1 R32 ESP32开发板项目二十六:打印 ESP32 上次复位原因
*/#include <rom/rtc.h>#define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */void print_reset_reason(RESET_REASON reason){switch ( reason) {case 1 : Serial.println ("POWERON_RESET"); break; /**<1, Vbat power on reset*/case 3 : Serial.println ("SW_RESET"); break; /**<3, Software reset digital core*/case 4 : Serial.println ("OWDT_RESET"); break; /**<4, Legacy watch dog reset digital core*/case 5 : Serial.println ("DEEPSLEEP_RESET"); break; /**<5, Deep Sleep reset digital core*/case 6 : Serial.println ("SDIO_RESET"); break; /**<6, Reset by SLC module, reset digital core*/case 7 : Serial.println ("TG0WDT_SYS_RESET"); break; /**<7, Timer Group0 Watch dog reset digital core*/case 8 : Serial.println ("TG1WDT_SYS_RESET"); break; /**<8, Timer Group1 Watch dog reset digital core*/case 9 : Serial.println ("RTCWDT_SYS_RESET"); break; /**<9, RTC Watch dog Reset digital core*/case 10 : Serial.println ("INTRUSION_RESET"); break; /**<10, Instrusion tested to reset CPU*/case 11 : Serial.println ("TGWDT_CPU_RESET"); break; /**<11, Time Group reset CPU*/case 12 : Serial.println ("SW_CPU_RESET"); break; /**<12, Software reset CPU*/case 13 : Serial.println ("RTCWDT_CPU_RESET"); break; /**<13, RTC Watch dog Reset CPU*/case 14 : Serial.println ("EXT_CPU_RESET"); break; /**<14, for APP CPU, reseted by PRO CPU*/case 15 : Serial.println ("RTCWDT_BROWN_OUT_RESET"); break; /**<15, Reset when the vdd voltage is not stable*/case 16 : Serial.println ("RTCWDT_RTC_RESET"); break; /**<16, RTC Watch dog reset digital core and rtc module*/default : Serial.println ("NO_MEAN");}
}void verbose_print_reset_reason(RESET_REASON reason){switch ( reason){case 1 : Serial.println ("Vbat power on reset"); break;case 3 : Serial.println ("Software reset digital core"); break;case 4 : Serial.println ("Legacy watch dog reset digital core"); break;case 5 : Serial.println ("Deep Sleep reset digital core"); break;case 6 : Serial.println ("Reset by SLC module, reset digital core"); break;case 7 : Serial.println ("Timer Group0 Watch dog reset digital core"); break;case 8 : Serial.println ("Timer Group1 Watch dog reset digital core"); break;case 9 : Serial.println ("RTC Watch dog Reset digital core"); break;case 10 : Serial.println ("Instrusion tested to reset CPU"); break;case 11 : Serial.println ("Time Group reset CPU"); break;case 12 : Serial.println ("Software reset CPU"); break;case 13 : Serial.println ("RTC Watch dog Reset CPU"); break;case 14 : Serial.println ("for APP CPU, reseted by PRO CPU"); break;case 15 : Serial.println ("Reset when the vdd voltage is not stable"); break;case 16 : Serial.println ("RTC Watch dog reset digital core and rtc module"); break;default : Serial.println ("NO_MEAN");}
}void setup() {// put your setup code here, to run once:Serial.begin(115200);delay(2000);Serial.println("CPU0 reset reason:");print_reset_reason(rtc_get_reset_reason(0));verbose_print_reset_reason(rtc_get_reset_reason(0));Serial.println("CPU1 reset reason:");print_reset_reason(rtc_get_reset_reason(1));verbose_print_reset_reason(rtc_get_reset_reason(1));// Set ESP32 to go to deep sleep to see a variation// in the reset reason. Device will sleep for 5 seconds.esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);Serial.println("Going to sleep");esp_deep_sleep(5 * uS_TO_S_FACTOR);
}void loop() {// put your main code here, to run repeatedly:
}/*Example Serial Log:====================rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)configsip: 0, SPIWP:0x00clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00mode:DIO, clock div:1load:0x3fff0008,len:8load:0x3fff0010,len:160load:0x40078000,len:10632load:0x40080000,len:252entry 0x40080034CPU0 reset reason:RTCWDT_RTC_RESETRTC Watch dog reset digital core and rtc moduleCPU1 reset reason:EXT_CPU_RESETfor APP CPU, reseted by PRO CPUGoing to sleepets Jun 8 2016 00:22:57rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)configsip: 0, SPIWP:0x00clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00mode:DIO, clock div:1load:0x3fff0008,len:8load:0x3fff0010,len:160load:0x40078000,len:10632load:0x40080000,len:252entry 0x40080034CPU0 reset reason:DEEPSLEEP_RESETDeep Sleep reset digital coreCPU1 reset reason:EXT_CPU_RESETfor APP CPU, reseted by PRO CPUGoing to sleepets Jun 8 2016 00:22:57rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)configsip: 0, SPIWP:0x00clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00mode:DIO, clock div:1load:0x3fff0008,len:8load:0x3fff0010,len:160load:0x40078000,len:10632load:0x40080000,len:252entry 0x40080034CPU0 reset reason:DEEPSLEEP_RESETDeep Sleep reset digital coreCPU1 reset reason:EXT_CPU_RESETfor APP CPU, reseted by PRO CPUGoing to sleep
*/
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目二十六:打印 ESP32 上次复位原因
项目串口返回情况
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目二十七:实现RGB-LED颜色的变换
实验接脚:LED R接14,B接27,G接16
实验开源代码
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百七十七:Wemos D1 R32 ESP32开发板项目二十七:实现RGB-LED颜色的变换实验接脚:LED R接14,B接27,G接16
*/uint8_t ledR = 14;
uint8_t ledG = 27;
uint8_t ledB = 16;void setup(){Serial.begin(115200);delay(10);ledcAttachPin(ledR, 1); //引脚的通道ledcAttachPin(ledG, 2);ledcAttachPin(ledB, 3);ledcSetup(1, 12000, 8); // 12 kHz PWM,8位的分辨率ledcSetup(2, 12000, 8);ledcSetup(3, 12000, 8);
}void loop(){//红色ledcWrite(1, 0);ledcWrite(2, 255);ledcWrite(3, 255);delay(2000);//绿色ledcWrite(1, 255);ledcWrite(2, 0);ledcWrite(3, 255);delay(2000);//蓝色ledcWrite(1, 255);ledcWrite(2, 255);ledcWrite(3, 0);delay(2000);
}
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目二十七:实现RGB-LED颜色的变换
实验接脚:LED R接14,B接27,G接16
Arduino实验场景图