ESP32-S2-Pico

来自Waveshare Wiki
(重定向自ESP32-S2-LCD-0.96
跳转至: 导航搜索


ESP32-S2-LCD-0.96
{{{name2}}}
{{{name3}}}
功能简介
特性 无特性,不解释
主控 ESP32-S2
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 Micro USB

说明

产品简介

ESP32-S2-Pico, ESP32-S2-LCD-0.96体积小巧,外设接口丰富,集成低功耗 Wi-Fi 系统级芯片(SoC)和大容量存储器,支持 Raspberry Pi Pico 扩展板生态的开发板。具有硬件加密加速器、RNG、HMAC 和数字签名 (Digital Signature) 模块,满足物联网的安全要求。多种低功耗工作状态满足在物联网 (IoT)、移动设备、可穿戴电子设备、智能家居等应用场景的功耗需求。

产品特性

ESP32-S2 普通版特性:

  • 支持Raspberry Pi Pico 扩展板生态,满足创意十足物联网应用开发
  • Xtensa 单核 32 位 LX7 微处理器 ESP32-S2FH4,支持高达 240 MHz 的时钟频率
  • 集成 320KB SRAM、128KB ROM,8MB PSRAM、4MB Flash 存储器
  • 支持 IEEE802.11 b/g/n,板载 2.4 GHz WiFi 陶瓷天线,最高 150Mbps 数据传输率
  • 采用 Type-C 接口,紧跟时代潮流,无需纠结正反插
  • 片上集成全速 USB OTG,SPI,I2C,UART,ADC,D/A,PWM,DVP 8/16 Camera 接口,LCD 接口(8 位串口 RGB/8080/6800),TWAI 控制器(兼容 ISO11898-1),电容式传感 GPIO,温度传感器和 RMT (TX/RX)
  • 板载 1.8A 电流的高效率升降压 DC-DC TPS63000 电源 IC
  • 支持多种低功耗工作状态,可调节通信距离、数据率和功耗之间的最佳平衡,满足各种应用场景的功耗需求
  • 邮票孔设计,可直接焊接集成到用户自主设计的底板上

ESP32-S2 LCD 版特性:

  • ESP32-S2 普通版所有特性
  • 板载 0.96 英寸 160×80 像素的 65K 彩色 IPS LCD 显示屏
  • 板载单节 3.7V 锂电池充放电接口,适用移动类型物联网产品设计

引脚分布

ESP32-S2-Pico, ESP32-S2-LCD-0.96引出引脚相同, 所有引出的引脚可通过ESP32-S2强大的IO MUX把引脚设置成SPI,I2C,UART,TWAI,AD/DA,I2S等硬件功能,其中

  • 将默认UART0引脚放固定位置不建议设置为其它功能
  • ESP32-S2 有 2 个 8 位 DAC 可独立地工作通道
  • ESP32-S2的USB引脚(GPIO19,GPIO20)可用于固件下载和串口打印等功能
  • 更多引脚信息查看ESP32-S2 Datasheet3.10外设管脚分配章节和原理图

ESP32-S2-Pico
ESP32-S2-Pico 002.jpg
ESP32-S2-LCD-0.96
ESP32-S2-Pico 003.jpg

产品尺寸

ESP32-S2-Pico 004.jpg

其它

ESP32-S2-Pico, ESP32-S2-LCD-0.96可使用CircuitPython,MicroPython,C/C++(Arduino,ESP-IDF)进行快速开发产品原型,以下简要介绍三种开发方式

CircuitPython

CircuitPython是一种编程语言,旨在简化在低成本微控制器板上进行编码实验和学习,是针对学生和初学者的 MicroPython 编程语言的开源衍生产品,由 Adafruit Industries 支持 CircuitPython 的开发和维护

  • CircuitPython 相关应用开发参考开发文档
  • CircuitPython 的Github库可以进行重新编译作定制开发
  • CircuitPython 在不同ESP32-S2核心主板上的相关固件

MicroPython

MicroPython 是 Python 3 编程语言的精简高效实现,其中包括 Python 标准库的一小部分,并且经过优化,可在微控制器和受限环境中运行。

  • Micropython 相关应用开发参考开发文档
  • Micropython 的Github库可以进行重新编译作定制开发
  • MicroPython 在不同ESP32-S2核心主板上的相关固件

C/C++(Arduino,ESP-IDF)

乐鑫官方的 C/C++ 库方便快速安装, 中国大陆用户遇到下载问题请查看FAQ解决

环境设置

环境设置是在 Windows 10 系统下进行,用户可以选择使用 Arduino 或 ESP-IDF 和使用 Visual Studio Code 作为 IDE 进行开发, Mac/Linux 操作系统用户请参考官方说明

Arduino

1. 下载安装Arduino IDE,注意要默认配置及全英文路径如下图所示
ESP32 One 020.jpg
2. Arduino IDE安装ESP32库,详细安装过程如下,相关资料请点击参考
其中下面第一行URLs适用于国外用户在线安装,第二行URLs适用于中国大陆用户在线安装,用户根据自己情况填写其中一行即可,考虑到在线安装经常失败, 推荐中国大陆用户从阿里云盘下载安装包离线安装arduino-esp32,参考链接(注意, 在线安装失败要全部卸载掉已经下载好的安装文件默认在C:\Users\zhongshaohua\AppData\Local\Arduino15\文件夹下,否则离线安装会失败)

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
https://www.arduino.me/package_esp32_index.json

ESP32-S2-Pico 005.jpg

ESP32-S2-Pico 006.jpg
3. 打开VSCode,安装Arduino和C/C++插件(注意使用Microsoft Publisher)如下图所示
ESP32 One 021.jpg
4. 安装插件后,按F1输入Preferences Open Settings (UI)按Enter找到Arduino插件设置,如下图所示
ESP32 One 024.jpg
5. 按F1输入Arduino Board Config按Enter设备板子下载参数如下图所示
ESP32 One 025.jpg

ESP-IDF

1 下载安装esp-idf-tools-setup最新离线版本,安装放在全英文路径且默认配置(自动安装 ESP-IDF , Python ,Git及设置环境变量),ESP-IDF 的路径放在其它地方,如下图所示
ESP32-S2-Pico 007.jpg
2. 下载安装VS Code,放在全英文路径下且默认配置安装如下图所示.
ESP32 One 002.jpg
3. 打开VS Code,按Ctrl+P,输入ext esp-idf-extension安装配置插件如下图所示
ESP32 One 003.jpg
4. VSCode中按下F1,输入Configure ESP-IDF extension进行配置,打开配置页面后选择USE EXISTING SETUP,过程如下图所示
ESP32 One 004.jpg

ESP32 One 014.jpg

ESP32 One 006.jpg

ESP32 One 007.jpg


CircuitPython

1. 参考环境设置章节安装ESP-IDF , 然后再cmd中启动esp-idf环境
2. 按住板子上BOOT键 , 再接入USB线缆
3. 查找设备管理器对应COM口
4. 修改下面指令中用户电脑枚举的COM口, 输入下面指令清除flash

esptool.py --chip esp32-s2 --port COM96 erase_flash

5. 把下面bootloader.bin等文件(在示例程序中)放到 esp-idf 安装的目录下 ,然后输入下面指令 , 注意用户电脑枚举到的COM口

esptool.py --chip esp32s2 -p COM96 -b 460800 --before=default_reset --after=no_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 4MB 0x8000 partition-table.bin 0xe000 ota_data_initial.bin 0x1000 bootloader.bin 0x2d0000 tinyuf2.bin

6. 然后会出现磁盘,然后把CircuitPython的uf2固件拖曳到磁盘里
7. 安装并打开Thonny , 选择 工具->选项 按如下图所示设置
ESP32-S2-Pico 011.jpg

MicroPython

1. 参考环境设置章节安装ESP-IDF , 然后再cmd中启动esp-idf环境
2. 按住板子上BOOT键 , 再接入USB线缆
3. 查找设备管理器对应COM口
4. 修改下面指令中用户电脑枚举的COM口, 输入下面指令清除flash

esptool.py --chip esp32-s2 --port COM96 erase_flash

5. 5. 把下面bin文件(在示例程序中)放到 esp-idf 安装的目录下 ,然后输入下面指令 , 注意用户电脑枚举到的COM口

esptool.py --chip esp32s2 --port COM96 write_flash -z 0x1000 ESP32_S2_WROVER-20220117-v1.18.bin

6. 安装并打开Thonny , 选择 工具->选项 按如下图所示设置
ESP32-S2-Pico 010.jpg
7. 参考MicroPython documentation , releases note进行编程

硬件连接

  • Raspberry Pi Pico扩展板堆叠地接入ESP32-S2-Pico或ESP32-S2-LCD-0.96时注意避免引脚交叉使用,如相同位置GPIO脚的串口类扩展板
  • 注意不要遮挡ESP32-S2-Pico或ESP32-S2-LCD-0.96的天线部分,若静置时WiFi信号过差,需要调整板子方向
  • 下载更新程序需要先按住BOOT按键不放再按下RESET按键后释放或断开USB按住BOOT键上电,此时ESP32-S2的UART0(GPIO43,GPIO44)、USB可烧录程序
  • ESP32-S2-Pico或ESP32-S2-LCD-0.96默认上电会打印ESP32-S2状态信息,若要取消,需要往下图所示往寄存器写入参数,注意取消后不可再恢复

示例代码

本小节结合Arduino , Raspberry Pi Pico扩展板 , 使用ESP32-S2的AD/DA , SPI , I2C , WiFi等外设

ADC/DAC

  • 注意选择如下图所示的配置选择, 开启USB CDC和选择USB update模式
  • 下载有出现如下图所示错误是提示下载完后需要手动复位才能运行程序

ESP32-S2-Pico 008.jpg

示例程序简析

  • 4个AD,1个DA宏定义,DA初始化输出值127,setup()函数中初始化USB串口输出
#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");
}
  • DA每隔5秒增加1 , 一直到255后从0开始增加 , 使用其中一个AD脚连接DA , 检测DA运行 , 第28行至第30行是电池电压检测
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);
}

UART

  • 注意选择如AD_DA例程下载所示的配置选择, 开启USB CDC和选择USB update模式
  • 下载有出现如AD_DA例程下载所示错误提示需要下载完后需要手动复位才能运行程序
  • UART例程结合Pico-GPS-L76B读取NMEA,解析并转换坐标系后输出等

示例程序简析

  • 包含NMEA0183库,实例化NMEA0183Msg,NMEA0183,指定串口1的引脚
/*
 * 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
  • NMEA0183.Begin()函数中指定NMEA0183数据流串口和波特率 , 初始化USB串口功能, loop()函数中轮询NMEA0183数据流接收
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
    */
    
  }
}

I2C

注意选择如AD_DA例程下载所示的配置选择, 开启USB CDC和选择USB update模式
下载有出现如AD_DA例程下载所示错误提示需要下载完后需要手动复位才能运行程序
本例程使用I2C读取Pico-10DOF-IMU上的加速度计, 陀螺仪, 地磁计 , 气压计数据后融合计算得出当前姿态 , 上电时请根据串口信息摆放传感器进行当地地磁校准
程序下载完成后, 按下复位键, 打开sscom串口助手, 选择对应COM口 , 选择DTR 然后等待串口输出对应信息进行校准

ESP32-S2-Pico 012.jpg

SPI

  • 注意选择如AD_DA例程下载所示的配置选择, 开启USB CDC和选择USB update模式
  • 下载有出现如AD_DA例程下载所示错误提示需要下载完后需要手动复位才能运行程序
  • 本例程测试ESP32-S2-LCD-0.96上的LCD和扫描打印WiFi热点信息

示例程序简析

  • setup()中初始化USB串口,WiFi的STA模式, 在loop()函数中开启LCD显示,USB串口打印输出扫描到的WiFi信息
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);
}

LCD

  • ESP32-S2-LCD-0.96上的LCD驱动使用了ST7735,本小结使用TFT_eSPI库进行显示,注意提前安装arduino-esp32,TFT_eSPI等库
  • 打开TFT_eSPI库文件夹(默认安装位置注意下图路径)下User_Setup_Select.h和User_Setups/Setup43_ST7735.h文件并按如图所示修改

ESP32-S2-Pico 014.jpg

  • 在TFT_eSPI的example文件的setup()函数中加入背光引脚的初始化

ESP32-S2-Pico 015.jpg

ePaper

  • 本小结使用ESP32-S2-Pico或ESP32-S2-LCD-0.96和Pico-ePaper-2.13演示Pico-ePaper系列产品
  • 下载解压e-Paper ESP32 Driver Board中的examples\esp32-waveshare-epd文件夹到Arduino\libraries文件夹下,再打开Arduino\libraries\esp32-waveshare-epd\src\DEV_Config.h文件更改相关引脚,如图所示

ESP32-S2-Pico 017.jpg

  • 打开Arduino IDE , 在File->Examples->waveshare-e-Paper中选择型号后进行编译下载 , 如图所示

ESP32-S2-Pico 018.jpg

FAQ


方法1. 安装git和python3.7.5,将python3.7.5环境变量手动加到系统设置里,然后点击我参考链接继续安装ESP-IDF环境,ESP-WHO请参考espressif中文社区关于ESP-WHO在中国大陆无法下载解决方法
方法2.点击链接参考gitee解决github无法使用使用问题
方法3. 若方法1无法解决,让贵司网络工程师使用合法科学上网工具解决导致无法下载某些组件的网络问题


由于没有挂载USB转UART芯片, 需使用ESP32-S2自带的USB口进行下载程序和虚拟串口打印信息. Arduino的操作请参考示例程序章节.ESP-IDF+VSCODE的IDE环境下,USB虚拟串口示例直接使用esp-idf\examples\peripherals\usb\tusb_console工程, 使用时注意如下几点, 详细操作请查看gif图演示
1. USB下载程序前需要手动使ESP32-S2-Pico进入下载模式,方法一是在USB已接情况下先按住BOOT按键不放再按下RESET按键后释放,方法二是断开USB按住BOOT键上电,然后按F1选择COM口
2. USB下载COM号和USB虚拟串口COM号不一样, 下载完程序后需要手动按RESET按键复位运行应用程序再在vscode上重新切换虚拟串口COM号显示打印信息
ESP32-S2-Pico 019.gif


技术支持


联系人:钟工
EMAIL:3004517899@qq.com
电话:0755-83040712
QQ:3004517899
微信:扫下方二维码添加
Zsh.jpg

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证