ESP32-S2-Pico, ESP32-S2-LCD-0.96体积小巧,外设接口丰富,集成低功耗 Wi-Fi 系统级芯片(SoC)和大容量存储器,支持 Raspberry Pi Pico 扩展板生态的开发板。具有硬件加密加速器、RNG、HMAC 和数字签名 (Digital Signature) 模块,满足物联网的安全要求。多种低功耗工作状态满足在物联网 (IoT)、移动设备、可穿戴电子设备、智能家居等应用场景的功耗需求。
ESP32-S2 普通版特性:
ESP32-S2 LCD 版特性:
ESP32-S2-Pico, ESP32-S2-LCD-0.96引出引脚相同, 所有引出的引脚可通过ESP32-S2强大的IO MUX把引脚设置成SPI,I2C,UART,TWAI,AD/DA,I2S等硬件功能,其中
ESP32-S2-Pico
ESP32-S2-LCD-0.96
ESP32-S2-Pico, ESP32-S2-LCD-0.96可使用CircuitPython,MicroPython,C/C++(Arduino,ESP-IDF)进行快速开发产品原型,以下简要介绍三种开发方式
CircuitPython是一种编程语言,旨在简化在低成本微控制器板上进行编码实验和学习,是针对学生和初学者的 MicroPython 编程语言的开源衍生产品,由 Adafruit Industries 支持 CircuitPython 的开发和维护
MicroPython 是 Python 3 编程语言的精简高效实现,其中包括 Python 标准库的一小部分,并且经过优化,可在微控制器和受限环境中运行。
乐鑫官方的 C/C++ 库方便快速安装, 中国大陆用户遇到下载问题请查看FAQ解决
环境设置是在 Windows 10 系统下进行,用户可以选择使用 Arduino 或 ESP-IDF 和使用 Visual Studio Code 作为 IDE 进行开发, Mac/Linux 操作系统用户请参考官方说明
1. 下载安装Arduino IDE,注意要默认配置及全英文路径如下图所示
2. Arduino IDE安装ESP32库,详细安装过程如下,相关资料请点击参考
其中下面第一行URLs适用于国外用户, 第二行URLs适用于中国大陆用户,用户根据自己情况填写其中一行即可
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json https://www.arduino.cn/package_esp32_dev_index.json
3. 打开VSCode,安装Arduino和C/C++插件(注意使用Microsoft Publisher)如下图所示
4. 安装插件后,按F1输入Preferences Open Settings (UI)按Enter找到Arduino插件设置,如下图所示
5. 按F1输入Arduino Board Config按Enter设备板子下载参数如下图所示
1 下载安装esp-idf-tools-setup最新离线版本,安装放在全英文路径且默认配置(自动安装 ESP-IDF , Python ,Git及设置环境变量),ESP-IDF 的路径放在其它地方,如下图所示
2. 下载安装VS Code,放在全英文路径下且默认配置安装如下图所示.
3. 打开VS Code,按Ctrl+P,输入ext esp-idf-extension安装配置插件如下图所示
4. VSCode中按下F1,输入Configure ESP-IDF extension进行配置,打开配置页面后选择USE EXISTING SETUP,过程如下图所示
本小节结合Arduino , Raspberry Pi Pico扩展板 , 使用ESP32-S2的AD/DA , SPI , I2C , WiFi等外设
#define adc0 6 #define adc1 7 #define adc2 8 #define adc3 1 #define dac_pin 17 uint16_t adc_Value = 0; // variable to store the value coming from the sensor uint8_t dac_value = 127; //DA output value void setup() { // put your setup code here, to run once: HWSerial.begin(115200); HWSerial.setDebugOutput(true); USB.onEvent(usbEventCallback); USBSerial.onEvent(usbEventCallback); USBSerial.begin(); USB.begin(); delay(4000); // USBSerial.printf("Setup done"); }
void loop() { // put your main code here, to run repeatedly: /* * you can wire adcx pin to dac pin to test AD/DA. */ dac_value++; dacWrite(dac_pin,dac_value); adc_Value = analogRead(adc0); USBSerial.printf("ADC value of GPIO6 is %d\n",adc_Value); USBSerial.printf("convert to voltage is %fV\n",adc_Value/8191.0*3.3); adc_Value = analogRead(adc1); USBSerial.printf("ADC value of GPIO7 is %d\n",adc_Value); USBSerial.printf("convert to voltage is %fV\n",adc_Value/8191.0*3.3); adc_Value = analogRead(adc2); USBSerial.printf("ADC value of GPIO8 is %d\n",adc_Value); USBSerial.printf("convert to voltage is %fV\n",adc_Value/8191.0*3.3); /* * Get battery volatage,please solder the 0R resistor on R37 position * and remove the R36(0R). * * please subtract bias(0.34) when get AD value of GPIO1, because the * 5% precision resistor brings about to bias, we will fix it in the * next version * */ adc_Value = analogRead(adc3); USBSerial.printf("ADC value of GPIO1 is %d\n",adc_Value); USBSerial.printf("convert to battery voltage is %fV\n",(adc_Value/8191.0*3.3-0.34)*3); delay(5000); }
/* * NMEA0183 library is from https://github.com/ttlappalainen/NMEA0183 * Thanks to ttlappalainen */ #include "NMEA0183.h" #include "NMEA0183Msg.h" #include "NMEA0183Messages.h" #include "USB.h" #if ARDUINO_USB_CDC_ON_BOOT #define HWSerial Serial0 #define USBSerial Serial #else #define HWSerial Serial USBCDC USBSerial; #endif tNMEA0183Msg NMEA0183Msg; tNMEA0183 NMEA0183; #define RXD2 3 #define TXD2 2
void setup() { // put your setup code here, to run once: Serial1.begin(9600,SERIAL_8N1,RXD2,TXD2); NMEA0183.Begin(&Serial1,1, 9600); HWSerial.begin(115200); HWSerial.setDebugOutput(true); USB.onEvent(usbEventCallback); USBSerial.onEvent(usbEventCallback); USBSerial.begin(); USB.begin(); delay(4000); } void loop() { // put your main code here, to run repeatedly: tNMEA0183Msg NMEA0183Msg; while (NMEA0183.GetMessage(NMEA0183Msg)) { USBSerial.printf(NMEA0183Msg.Sender()); USBSerial.printf(NMEA0183Msg.MessageCode()); for (int i=0; i < NMEA0183Msg.FieldCount(); i++) { USBSerial.printf(NMEA0183Msg.Field(i)); } USBSerial.printf("\n"); /* * To Be Done * WGS84 coordinate convert to GCJ02 coordinate */ } }
void setup() { HWSerial.begin(115200); HWSerial.setDebugOutput(true); USB.onEvent(usbEventCallback); USBSerial.onEvent(usbEventCallback); USBSerial.begin(); USB.begin(); WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); USBSerial.printf("Setup done"); } void loop() { // USBSerial.printf("This is a test\r\n"); led_init(); led_test(); lcd_dev.lcd_init(); lcd_dev.lcd_test(); USBSerial.printf("scan start\r\n"); // WiFi.scanNetworks will return the number of networks found int n = WiFi.scanNetworks(); USBSerial.printf("scan done\r\n"); if (n == 0) { USBSerial.printf("no networks found\r\n"); } else { USBSerial.printf("%d",n); USBSerial.printf(" networks found\r\n"); for (int i = 0; i < n; ++i) { // Print SSID and RSSI for each network found USBSerial.printf("%d",i + 1); USBSerial.printf(": "); USBSerial.printf("%s",WiFi.SSID(i)); USBSerial.printf(" ("); USBSerial.printf("%d",WiFi.RSSI(i)); USBSerial.printf(")\r\n"); delay(10); } } USBSerial.printf("\r\n"); // Wait a bit before scanning again delay(3000); }