ESP32-S3-GEEK

来自Waveshare Wiki
跳转至: 导航搜索
ESP32-S3-GEEK
{{{name2}}}
{{{name3}}}
功能简介
特性 无特性,不解释
主控 ESP32-S3
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 I2C UART USB-A

产品介绍

产品简介

ESP32-S3-GEEK 是一款微雪 (Waveshare) 为极客设计的开发板,板载USB-A公口、1.14寸LCD屏幕、Mirco SD卡槽等外设,支持 2.4GHz WiFi 和 BLE 5,集成16MB Flash 和2MB PSRAM,提供 I2C 接口、UART 接口和 GPIO 接口,可以为你的项目提供无限可能。

产品特性

  • 主芯片采用乐鑫ESP32-S3R2
  • 搭载Xtensa® 32位LX7双核处理器,主频高达240 MHz
  • 内置512 KB SRAM、384KB ROM、2MB的片上PSRAM、板载16MB Flash存储器
  • 板载 1.14 英寸 240×135 像素的 65K 彩色 IPS LCD 显示屏
  • 集成 2.4 GHz Wi-Fi 低功耗蓝牙 Bluetooth 5 (LE)
    • Wi-Fi支持基础结构型网络 (Infrastructure BSS)Station 模式、SoftAP 模式和 Station + SoftAP 模式
    • Wi-Fi支持 1T1R 模式,数据速率高达 150 Mbps
    • 蓝牙支持高功率模式 (20 dBm)
    • 蓝牙与Wi-Fi共存,共用同一个天线
  • 板载 3PIN UART 接口,可用于实现 USB 串口转接器的功能
  • 板载 3PIN GPIO 接口,可用于调试其他模块或ADC采集等功能
  • 板载 4PIN I2C 接口,可用于测试目标板
  • 配备塑料外壳以及相关连接线材
  • 提供完善的开源例程资料,方便编程学习和开发项目

资源简介

ESP32-S3-GEEK-introduction-01.jpg

1、USB-A 接口
   WiFi 蓝牙 SoC 模块,240MHz 运行频率,封装 8MB PSRAM 和 Flash

2、UART 接口子

3、GPIO 接口

4、I2C 接口

5、Micro SD 卡槽

6、W25Q128JVSIQ
   16MB NOR-Flash

7、ESP32-S3
   6 跟 7 是同一个 UART,由 15 的开关进行选择

8、BOOT 按键

9、天线

接口说明

ESP32-S3-GEEK-introduction-02.png

产品尺寸

RP2040-GEEK-details-size.jpg


使用说明

ESP32-S3-GEEK 目前提供 Arduino IDE , ESP-IDFMicroPython三种开发工具和框架,提供了灵活的开发选择,你可以根据项目需求和个人习惯选择适合的开发工具。

开发工具介绍

Arduino-IDE-logo.jpg

Arduino IDE

Arduino IDE是一款便捷灵活、方便上手的开源电子原型平台。不需要太多基础,简单学习后,你也可以快速地进行开发。同时,Arduino 拥有庞大的全球用户社区,提供了海量的开源代码、项目示例和教程,还有丰富的库资源,封装了复杂功能,让开发者能快速实现各种功能。

MicroPython-logo.jpg

MicroPython

MicroPython是Python 3编程语言的完全实现,它可直接运行在 ESP32、Raspberry Pi Pico 等嵌入式硬件上。你可以通过REPL直接在板子上运行Python脚本,非常适合快速原型设计。

ESP-IDF-logo.jpg

ESP-IDF

ESP-IDF,全称Espressif IDE,是乐鑫科技为 ESP系列芯片推出的专业开发框架。它使用C语言开发,包括编译器、调试器、烧录工具等,可在命令行下或使用集成开发环境(如 Visual Studio Code 配合 Espressif IDF 插件)进行开发,插件提供代码导航、项目管理、调试等功能。


这两种开发方式各有其优势,开发者可以根据自身需求和技能水平进行选择。Arduino 和 MicroPython适合初学者和非专业人士,因其简单易学、上手快。而对于有专业背景或对性能要求较高的开发者,ESP-IDF 是更好的选择,它提供了更高级的开发工具和更强的控制能力,适用于复杂项目的开发。

器件准备

  • ESP32-S3-GEEK x1
  • SD卡 x1
  • BME680环境传感器 x1
  • USB转UART通用串口通信模块 x1

ESP32-S3-GEEK-demo-44.png

注意事项

  • 开发板使用USB下载程序,如果出现无法识别到端口,请进入boot模式(摁住boot按键后,再连接电脑,然后松开boot按键),下载程序后,按 RESET 按键运行程序


在操作前,建议先浏览目录,快速了解文档结构。为顺利操作,请仔细阅读FAQ,提前了解可能的问题。文档中所有资料均提供超链接,方便下载。

Arduino开发

本章介绍 Arduino 环境搭建,包括 Arduino IDE、ESP32板管理、相关库的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。

环境搭建

下载和安装 Arduino IDE

  • 点击访问Arduino官网,选择对应的系统和系统位数下载。Arduino IDE的版本需要≥1.8,安装的路径不能出现中文,否则编译时会出现错误。
    ESP32-S3-AMOLED-1.91-Ar-software-01.png
  • 运行安装程序,全部默认安装即可。
环境设置是在 Windows 10 系统下进行,Linux和Mac用户可访问Arduino-esp32环境搭建参考

安装 ESP32 开发板

  • ESP32相关主板在Arduino IDE使用,须先安装“esp32 by Espressif Systems”开发板的软件包
  • 根据板安装要求进行安装,一般推荐“在线安装”, 若在线安装失败,则使用“离线安装
  • 安装教程,详见:Arduino 板管理教程
  • esp32 by Espressif Systems”开发板离线软件包,点击此处下载:esp32_package_2.0.7_arduino 离线包
  • ESP32-S3-GEEK 所需开发板安装说明
板名称 板安装要求 版本号要求
esp32 by Espressif Systems “离线”安装/“在线”安装 2.0.7

安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装离线安装若库安装要求离线安装,则必须使用提供的库文件
    对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
  • 库安装教程,详见:Arduino 库管理教程
  • ESP32-S3-GEEK 库文件存放于示例程序中,点击此处跳转: ESP32-S3-GEEK示例程序
  • ESP32-S3-GEEK 库文件安装说明
库名称 说明 版本 库安装要求
ESP32-BLE-Keyboard-master ESP32 的蓝牙键盘库 v0.3.2 “离线”安装
TFT_eSPI TFT 显示屏驱动库 v2.4.78 “离线”安装
PubSubClient MQTT 消息订阅发布库 v2.8.0 “在线”安装或“离线”安装
JPEGDecoder JPEG 图像解码库 v2.0.0 “在线”安装或“离线”安装
OneButton 单按钮事件处理库 v2.5.0 “在线”安装或“离线”安装
BME68x Sensor library BME68x 传感器驱动库 v1.1.40406 “在线”安装或“离线”安装
ArduinoJson 轻量 JSON 库 v7.2.1 “在线”安装或“离线”安装

运行第一个 Arduino 程序

如果你刚入门学习ESP32和Arduino,还不知道如何创建、编译、烧录和运行Arduino ESP32程序,那么请展开看看,希望可以帮助到你!

新建工程

  • 运行Arduino IDE,选择 File -> New Sketch
    ESP32-S3-AMOLED-1.91-Ar-study-01.png
  • 输入代码:
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Hello, World!");
  delay(2000);
}
  • 保存代码工程,选择 File -> Save As...;在弹出的菜单选择保存工程路径,并输入工程名,如 Hello_World,点击保存

ESP32-S3-AMOLED-1.91-Ar-study-02.png

编译和烧录程序

  • 选择对应的开发板,以ESP32S3主板为例:

①. 点击选择下拉框选项“Select Other Board and Port”;
②. 搜索需要的开发板型号“esp32s3 dev module”并选择;
③. 选择COM口
④. 保存选择。
ESP32-S3-AMOLED-1.91-Ar-study-03.png

  • 部分开发板在指定版本号支持直接选择型号,以“waveshare esp32-s3-lcd-1.69”为例

ESP32-S3-AMOLED-1.91-Ar-study-07.png

  • 若ESP32S3主板只有USB口,须打开(Enable)USB CDC,如下图所示:

ESP32-S3-AMOLED-1.91-Ar-study-04.png

  • 编译并上传程序:

①. 编译程序;②. 编译并下载程序;③. 下载成功。
ESP32-S3-AMOLED-1.91-Ar-study-05.png

  • 打开串口监视窗口,程序每隔2秒会打印“Hello World!”,运行情况如下所示:

ESP32-S3-AMOLED-1.91-Ar-study-06.png

示例程序

  • ESP32-S3-GEEK 示例程序
示例程序 基础例程说明 依赖库
01_OneButton 按钮交互与 LCD 显示 OneButton
02_ADC_Read ADC采样 -
03_IIC_BME68X_Sensor 驱动I2C模块 BME68x Sensor library
04_UART0 串口通信 -
05_LCD_Button 按钮操作切换图像、控制背光 OneButton,TFT_eSPI
06_LCD_Time 在 LCD 显示日期时间 TFT_eSPI
07_SD_Test 对SD卡的文件进行增删改查 -
08_SD_LCD 读取 SD 卡上 JPEG 图片并在屏幕显示 TFT_eSPI,JPEGDecoder
09_BLE_LCD ESP32-S3 与 BLE 和 LCD 交互,可作为 BLE 服务器收发数据并在 LCD 显示 TFT_eSPI,ESP32-BLE-Keyboard-master
10_BLE_UART ESP32-S3 与 BLE 交互,可作为 BLE 服务器收发数据并使用UART显示消息内容 ESP32-BLE-Keyboard-master
11_BLE_Keyboard 模拟 BLE 键盘 ESP32-BLE-Keyboard-master
12_WIFI_AP_LCD 与 Wi-Fi 和 LCD 交互,可作为 Wi-Fi 接入点与客户端通信并在 LCD 显示 TFT_eSPI
13_WIFI_TCP_Client 与 Wi-Fi 和 LCD 交互,连接 Wi-Fi 后尝试连接服务器,收发数据并在 LCD 显示 TFT_eSPI
14_WIFI_TCP_Server 与 Wi-Fi 和 LCD 交互,作为 Wi-Fi 服务器,接收客户端数据并在 LCD 显示 TFT_eSPI
15_WIFI_Web_Server 与 Wi-Fi 和 LCD 交互,作为 Wi-Fi 接入点服务器,处理客户端请求 TFT_eSPI
16_MQTT_sub_pub 与 Wi-Fi、MQTT 和 LCD 交互,连接 Wi-Fi 和 MQTT 服务器,收发 JSON 数据并在 LCD 显示 ArduinoJson,PubSubClient,TFT_eSPI
17_MQTT_BLE_Keyboard 集成 BLE 键盘、Wi-Fi 和 MQTT,控制 LCD 显示 ArduinoJson,PubSubClient,TFT_eSPI,ESP32-BLE-Keyboard-master

01_OneButton

【程序说明】


  • 该例程可使用ESP32-S3-GEEK的boot按键变成一个多功能按键,可进行单击、双击或者长按以执行不同的操作。适用于学习 ESP32-S3 的按钮交互与 LCD 显示,可通过按钮操作观察 LCD 变化,测试其可靠性

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • button.attachLongPressStart(LongPressStart, &button) :按钮事件绑定

button.attachLongPressStart(LongPressStart, &button)等语句将特定的函数绑定到按钮的不同事件上,使得当按钮被长按、单击或双击时,能够自动调用相应的处理函数

  • button.tick():持续监测

button.tick()不断检查按钮的状态,判断是否有按钮事件发生。如果有事件发生,就会根据事件类型调用相应的回调函数

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module(或精准型号)与端口
  • 烧录代码

【运行效果】


  • 对按键进行单击、双击或者长按查看LCD显示

ESP32-S3-GEEK-ArDemo-Button-06.png


02_ADC_Read

【程序说明】


  • 该例程使用ESP32-S3-GEEK的GPIO接口,进行ADC采样,读取3.3V范围内的电压,使用时注意共地与不可超出测量范围。适用于学习 ESP32-S3 的模拟输入,可读取特定引脚模拟值,观察变化并测试稳定性

【硬件连接】


  • 将开发板接入电脑
  • 将 SH1.0 3PIN 杜邦线的两端分别连接到开发板和待测电压源
    • 开发板GPIO6所连引脚用于读取所测电压
    • 开发板GND引脚(IIC或UART接口的GND都可以)连接到待测电压源GND引脚 ,确保与待测电压源的地端连接在一起

【代码分析】


  • setup()
    • 初始化背光控制引脚为低电平
    • 开启串口通信,设置波特率为 115200
    • 设置 ADC 分辨率为 12 位
  • loop()
    • 定义变量存储 ADC 的原始值和电压值
    • 读取指定引脚的 ADC 原始值和电压值
    • 通过串口输出 ADC 值
    • 引入 100 毫秒延迟

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module(或精准型号)与端口
  • 设置开发板参数:使能USB CDC On Boot

ESP32-S3-GEEK-demo-45.png

  • 烧录代码

【运行效果】


  • 运行效果: 串口调试助手观察AD引脚读取的数据,ADC analog value为读取的ADC模拟值,ADC millivolts value为ADC转化的电压值

ESP32-S3-Touch-LCD-7-demo-07.png


03_IIC_BME68X_Sensor

【程序说明】


  • 该例程可使用ESP32-S3-GEEK的IIC硬件接口驱动I2C模块,例程使用BME680传感器进行演示,通过串口输出打印数据。适用于学习 ESP32-S3 与 BME68X 传感器交互,可设置引脚和通信模式,读取多种数据,测试兼容性与稳定性

【硬件连接】


  • 将开发板接入电脑
  1. BME680环境传感器与ESP32-S3-GEEK开发板进行硬件连接
    ESP32-S3-GEEK-ArDemo-IIC-01.png

【代码分析】


  • setup()
    • 使用analogWrite将背光控制引脚PIN_BL设置为 0,关闭背光。
    • 使用Wire.begin(PIN_SDA, PIN_SCL)初始化 I2C 通信(注释中的SPI.begin()表示也可以使用 SPI 模式,但这里未启用)。
    • 初始化串口通信,设置波特率为 115200。
    • 等待串口连接准备好。
    • 根据配置的通信方式(这里是 I2C)初始化 BME68X 传感器。如果初始化过程中出现错误或警告,会在串口输出相应的信息。
    • 设置传感器的温度、压力和湿度测量配置,并设置加热器配置。
    • 在串口输出数据的标题行,包括时间戳、温度、压力、湿度、气体电阻和状态
  • loop()
    • 创建一个bme68xData结构体对象data来存储传感器数据。
    • 设置传感器工作模式为强制模式(BME68X_FORCED_MODE)。
    • 根据传感器的测量持续时间延迟一段时间,确保数据准备好。
    • 如果成功获取到数据,使用bme.getData(data)将数据存储到data结构体中,并在串口输出时间戳、温度、压力、湿度、气体电阻和状态信息

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module(或精准型号)与端口
  • 设置开发板参数:使能USB CDC On Boot
  • 烧录代码

【运行效果】


  • 可在串口监视器或串口调试助手观察读取的数据,从左至右分别显示了BME68x传感器测得的温度(摄氏度),大气压(百帕斯卡),相对湿度(%RH),海拔(m),气体阻值(ohms)。

ESP32-S3-GEEK-demo-01.png


04_UART0

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开串口UART0,打开串口调试助手,可以进行串口通信。适用于学习 ESP32-S3 串口通信,可接收数据并输出,测试稳定性与准确性。

【硬件连接】


ESP32-S3-GEEK-ArDemo-UART-01.png

【代码分析】


  • setup()
    • 使用analogWrite函数将引脚DEV_BL_PIN(7)的模拟输出设置为 0,用于关闭设备的背光
    • 初始化串口通信,设置波特率为 115200
  • loop()
    • 检查串口是否有数据可读。如果有数据可读,进入循环处理输入数据。
    • 创建一个字符数组buffer用于存储输入数据,以及一个变量bufferSize用于记录缓冲区中的数据大小。
    • 在循环中,每次读取一个字符并存储到缓冲区中,同时增加缓冲区大小。
    • 当缓冲区已满(达到数组大小)或者读取到换行符时,将缓冲区中的数据通过串口输出,然后延迟 10 毫秒。
    • 最后,重置缓冲区大小为 0,并使用memset函数将缓冲区清零,为下一次输入做准备

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module(或精准型号)与端口
  • 烧录代码

【运行效果】


  • 使用串口调试助手进行串口通信,从串口接收数据并在同一串口输出接收到的数据

ESP32-S3-GEEK-demo-02.png


05_LCD_Button

【程序说明】


  • 该例程可使用ESP32-S3-GEEK的boot按键实现短按点亮LCD并切换下一张图片,长按熄灭LCD。适用于学习 ESP32-S3 的按钮交互和 LCD 图像显示,可通过按钮操作切换图像、控制背光,测试稳定性

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • setup()
    • 在这个程序中,setup()函数在程序启动时执行一次。它首先初始化串口通信为波特率 115200,为后续可能的调试输出做准备。接着调用Config_Init()LCD_Init()对特定硬件配置和 LCD 进行初始化,确保 LCD 能正常工作。然后通过LCD_Clear(BLACK)将 LCD 屏幕清空为黑色,为显示内容提供干净背景。设置 LCD 背光亮度为 1000 确保屏幕亮度足够。创建新图像对象并绘制初始图像gImage_pic1。同时为按钮对象设置长按开始和点击的回调函数分别指向LongPressStartClick函数,并设置按钮长按时间间隔为 1000 毫秒,为程序的交互操作做好准备
  • Click(void *oneButton)
    • 当按钮被点击时,此函数被调用。它首先设置 LCD 背光亮度为 1000,接着创建新的黑色图像对象,然后通过增加click变量的值并进行循环控制,根据不同的click值切换显示不同的图像(gImage_pic1gImage_pic2gImage_pic3),为用户提供了通过按钮点击切换 LCD 显示图像的交互功能

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module(或精准型号)与端口
  • 烧录代码

【运行效果】


  • 短按boot按键实现切换图片

ESP32-S3-GEEK-ArDemo-LCD Button-02.png


06_LCD_Time

【程序说明】


  • 该例程可使用ESP32-S3-GEEK连接WIFI获取当前时间并且把时间日期显示在LCD与串口调试助手上。适用于学习 ESP32-S3 的 Wi-Fi 连接与时间同步,可连接特定网络并同步时间,在 LCD 显示日期时间,测试稳定性与准确性

【硬件连接】


  • 将开发板接入电脑

【其余准备】


  • 使用PC打开热点,网络频带选择“任何可用频率”,将ssid与password修改成要连接的WIFI名称和密码。utcOffsetInSeconds为我们需要获取时间的时区,例如:北京,东八区,则为8*60*60=28800
    ESP32-S3-GEEK-ArDemo-LCD Time-01.png
  • 在此说明:ESP32-S3-GEEK作为STA模式与PC连接同一个WIFI网络时,ESP32-S3-GEEK连接的WIFI需要有2.4GHz 频带的,如果没有2.4GHz 频带,那网络频带就选择“任何可用频率”,这边我们直接选择“任何可用频率”

【代码分析】


  • setup()
    • 在 LCD 上显示 “Wifi Connecting...”,向用户提示设备正在尝试连接 Wi-Fi,通过WiFi.begin(ssid, password)使用指定的网络名称和密码启动连接过程,进入循环等待连接成功,在这个过程中,每隔 1000 毫秒就在串口打印 “Connecting to WiFi...”,让用户了解连接进度。一旦连接成功,就清空 LCD 屏幕并显示 “Wifi Connected”,为后续依赖网络的操作做好准备

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module(或精准型号)与端口
  • 设置开发板参数:使能USB CDC On Boot
  • 烧录代码

【运行效果】


  • LCD显示实时时间与日期,使用Arduino串口监视器或串口调试助手可以看到打印的时间和日期

ESP32-S3-GEEK-demo-03.png


07_SD_Test

【程序说明】


  • 该例程可使用ESP32-S3-GEEK的SD卡槽,将SD卡插入卡槽,打开串口调试助手,可以看到ESP32-S3-GEEK对SD卡的文件进行增删改查。适用于学习 ESP32-S3 与 SD 卡交互,可进行多种文件操作,测试稳定性与可靠性

【硬件连接】


  • 将开发板接入电脑
  • 将SD卡装入开发板

【代码分析】


  • setup()
    • 首先将连接到DEV_BL_PIN的设备输出设为 0,初始化串口通信,启动 HSPI 总线并设置时钟分频,然后尝试初始化连接在特定引脚上的 SD 卡,若成功,确定 SD 卡类型并显示其容量大小。之后进行一系列对 SD 卡的文件系统操作,如列出目录、创建和删除目录、读写文件、重命名文件以及测试读写性能,同时输出 SD 卡总空间和已用空间

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module(或精准型号)与端口
  • 设置开发板参数:使能USB CDC On Boot
  • 烧录代码

【运行效果】


ESP32-S3-GEEK-demo-04.png


08_SD_LCD

【程序说明】


  • 该例程可使用ESP32-S3-GEEK的SD卡槽读取SD卡中的图片,将照片图片存入SD卡后,把SD卡插入卡槽,ESP32-S3-GEEK可将SD卡中的照片读取并且显示在LCD上,或者刷照片形成动态图。适用于学习 ESP32-S3 与 SD 卡及 TFT 屏交互,可读取 SD 卡上 JPEG 图片并在屏幕显示,测试稳定性与可靠性

【SD卡准备】


  • 可将..\ESP32-S3-GEEK-Demo\Arduino\pic路径下的照片用读卡器存入SD卡中,或者存入自己的照片,将图片尺寸修改成240×135,显示效果最佳

【硬件连接】


  • 使用USB线把板子接入电脑
  • 将SD卡装入开发板

【代码分析】


  • setup()
    • 初始化串口和 TFT 显示屏
    • 配置 SD 卡 SPI 通信并尝试挂载 SD 卡
    • 确定 SD 卡类型并输出容量信息
  • drawSdJpeg()
    • 打开图像文件,用 JPEG 解码器解码,若成功则显示图像信息并调用jpegRender
  • jpegRender()
    • 处理图像在 TFT 上的显示,包括边缘情况,记录显示时间

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module(或精准型号)与端口
  • 设置开发板参数:使能USB CDC On Boot
  • 烧录代码

【运行效果】


  • 可在Arduino串口监视器或串口调试助手查看循环打印的图片信息,此时LCD屏幕循环显示SD卡中的图片

ESP32-S3-GEEK-demo-05.png

【动画】


  • 这部分注释去除,可播放Waveshare开机动画

ESP32-S3-GEEK-demo-06.png

09_BLE_LCD

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开蓝牙BLE,使用手机打开蓝牙调试助手,连接ESP32-S3-GEEK,与手机进行蓝牙BLE通讯,发送与接收的消息在LCD上显示。适用于学习 ESP32-S3 与 BLE 和 LCD 交互,可作为 BLE 服务器收发数据并在 LCD 显示,测试稳定性与可靠性

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • setup()
    • 初始化相关配置和 LCD 显示屏
    • 启动串口通信,设置波特率为 115200
    • 清空 LCD 为黑色背景,设置背光亮度
    • 创建图像缓冲区并绘制预定义图像
    • 初始化 BLE 设备并设置名称
    • 创建 BLE 服务器及回调函数
    • 创建 BLE 服务和发送、接收特性,并设置属性和回调函数
    • 启动服务和开始广告,在串口输出提示信息等待客户端连接
  • loop()
    • 串口数据读取和发送:
      • 若串口有数据可读,循环读取并添加到缓冲区,遇到换行符处理数据并发送到 BLE 客户端,同时在串口输出发送信息,清空缓冲区为下一次读取做准备
    • 低功耗操作(可扩展部分):可在此添加低功耗操作代码
    • 延迟 10 毫秒降低功耗和提高稳定性
    • BLE 连接状态处理:
      • 若从连接变为断开,延迟后重新开始广告
      • 若从断开变为连接,可添加处理新连接的代码

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module与端口
  • 设置开发板参数:使能USB CDC On Boot
  • 烧录代码

【运行效果】


  • BLEDevice::init("Waveshare_ESP32S3_GEEK")中 Waveshare_ESP32S3_GEEK 为蓝牙名称

ESP32-S3-GEEK-demo-11.png

ESP32-S3-GEEK wifi36.jpg
ESP32-S3-GEEK-ArDemo-BLE LCD-02.png ESP32-S3-GEEK-ArDemo-BLE LCD-03.png

  • 使用手机蓝牙调试助手发送蓝牙消息至ESP32-S3-GEEK,ESP32-S3-GEEK接收到消息会把消息显示在LCD上,串口调试助手打印消息内容

ESP32-S3-GEEK wifi36.jpg
ESP32-S3-GEEK-ArDemo-BLE LCD-04.png ESP32-S3-GEEK-ArDemo-BLE LCD-05.png
ESP32-S3-GEEK wifi36.jpg
ESP32-S3-GEEK-ArDemo-BLE LCD-06.png ESP32-S3-GEEK-ArDemo-BLE LCD-07.png
ESP32-S3-GEEK-demo-13.png
ESP32-S3-GEEK-ArDemo-BLE LCD-08.png

  • 手机端的蓝牙调试助手打开接收设置,ESP32-S3-GEEK使用USB转UART连接PC,打开串口调试助手,发送串口消息转为蓝牙消息至手机,注意发送时要勾选上回车加换行,发送的消息内容会显示在LCD上,在手机端观察是否接收到蓝牙消息

ESP32-S3-GEEK wifi36.jpg
ESP32-S3-GEEK-ArDemo-BLE LCD-09.png ESP32-S3-GEEK-ArDemo-BLE LCD-10.png
ESP32-S3-GEEK wifi36.jpg
ESP32-S3-GEEK-ArDemo-BLE LCD-11.png ESP32-S3-GEEK-ArDemo-BLE LCD-12.png
ESP32-S3-GEEK-demo-12.png
ESP32-S3-GEEK wifi36.jpg
ESP32-S3-GEEK-ArDemo-BLE LCD-14.png ESP32-S3-GEEK-ArDemo-BLE LCD-15.png
ESP32-S3-GEEK-ArDemo-BLE LCD-08.png


10_BLE_UART

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开蓝牙BLE,使用手机打开蓝牙调试助手,连接ESP32-S3-GEEK,与手机进行蓝牙BLE通讯,发送与接收的消息在串口上显示。操作与09_BLE_LCD相同,但是没有开启LCD,使用UART显示消息内容,较大程度将功耗降低。操作请看09_BLE_LCD

11_BLE_Keyboard

【程序说明】


  • 该例程可将ESP32-S3-GEEK作为蓝牙键盘使用,使用PC蓝牙连接ESP32-S3-GEEK,可以进行一系列键盘单键或组合操作,此示例程序会使电脑反复锁屏解锁,按下boot键重新上电便可退出程序。适用于 ESP32-S3-GEEK 模拟 BLE 键盘,可发送文本和按键指令,测试稳定性与可靠性
  • pc端可进行自动锁屏与开屏操作,按下boot键重新上电便可退出程序

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • setup()
    • 启动串口通信,设置波特率为 115200,用于输出调试信息。
    • 在串口输出提示信息 “Starting BLE work!”。
    • 初始化蓝牙键盘对象bleKeyboard,传入设备名称、制造商名称和电池电量报告间隔等参数,然后调用begin方法启动蓝牙键盘
  • loop()
    • 判断蓝牙键盘是否连接,如果连接:
      • 在串口输出提示信息 “Sendin 'Waveshare'...”,然后使用print方法发送字符串 “waceshare”。
      • 延迟 500 毫秒。
      • 在串口输出提示信息 “Sendin Enter key...”,然后使用write方法发送回车键(KEY_RETURN)。
      • 延迟 500 毫秒。
      • 在串口输出提示信息 “Sendin Ctrl+Alt+Delete...”,依次按下左 Ctrl、左 Alt 和 Delete 键,延迟 100 毫秒后释放所有按键。
    • 在串口输出提示信息 “Waiting 5 seconds...”,然后延迟 5000 毫秒,等待下一次循环

【代码修改】


①. 蓝牙名称
②. 修改为你的开屏密码,则可进行自动锁屏与开屏操作,按下boot键重新上电便可退出程序(以下的waveshare为示例密码)
ESP32-S3-GEEK-demo-14.png

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module与端口
  • 烧录代码

【运行效果】


  • 使用PC打开蓝牙扫描连接设备
  • 连接成功后会每隔5秒会进行一系列键盘操作(输出“Waveshare”、Ctrl+Alt+Delete)
  • pc端可进行自动锁屏与开屏操作,按下boot键重新上电便可退出程序
  • 可在libraries文件夹中的BleKeyboard.h文件中查看各个单键的值


12_WIFI_AP_LCD

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开WIFI的AP模式,PC连接其WIFI后,可以登录IP,在网页端进行控制ESP32-S3-GEEK的LCD显示图片。适用于学习 ESP32-S3-GEEK 与 Wi-Fi 和 LCD 交互,可作为 Wi-Fi 接入点与客户端通信并在 LCD 显示,测试稳定性与可靠性

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • setup()
    • 调用Config_Init()LCD_Init()初始化相关配置和 LCD 显示屏。
    • 启动串口通信,设置波特率为 115200,用于输出调试信息。
    • 设置 LCD 的背光亮度为 100。
    • 创建新的图像缓冲区,设置旋转角度为 90 度,并清空 LCD 显示屏为特定颜色(0x000f)。
    • 调用WIFI_AP_Init()初始化 Wi-Fi 接入点
  • loop()
    • 通过WiFiClient client = server.available();监听是否有客户端连接到服务器。
    • 调用WIFI_LCD_Control(client)函数处理连接的客户端,可能进行与 LCD 显示相关的操作,具体功能取决于该函数的实现

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module与端口
  • 烧录代码

【运行效果】


  • ssid是ESP32-S3-GEEK创建的AP名称(ESP32-S3-GEEK),password则是连接AP的密码(Waveshare)

ESP32-S3-GEEK-demo-15.png

  • 使用PC连接ESP32-S3-GEEK的AP,输入密码Waveshare
  • 烧录成功但PC识别不到wifi时,给开发板重新上电再尝试
  • LCD会显示HTTP服务器的IP地址

ESP32-S3-GEEK-ArDemo-Wifi AP LCD-05.png

  • 使用浏览器进行登录IP:192.168.4.1,通过服务器上的按钮对ESP32-S3-GEEK的LCD进行控制,按下不同按钮,观察LCD变化,更多LCD的显示函数具体可以看LCD程序说明

ESP32-S3-GEEK-demo-16.png


13_WIFI_TCP_Client

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开WIFI的STA模式,与PC端或者手机端连接同一个WIFI后,作为TCP Client访问PC或手机创建的TCP Server,并且与PC或手机建立TCP通讯,在LCD上显示接收内容。适用于学习 ESP32-S3-GEEK 与 Wi-Fi 和 LCD 交互,连接 Wi-Fi 后尝试连接服务器,收发数据并在 LCD 显示,测试稳定性与可靠性

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • intToIpAddress()
    • 使用sprintf函数将传入的 IP 地址整数按照点分十进制的格式转换为字符串,并存储在result指针指向的字符数组中
  • setup()
    • 模块初始化:
      • 调用Config_Init()LCD_Init()初始化相关配置和 LCD 显示屏
      • 启动串口通信,设置波特率为 115200
      • 设置 LCD 的背光亮度为 100
      • 创建新的图像缓冲区,设置旋转角度为 90 度,并清空 LCD 显示屏为特定颜色(0x000f)
    • Wi-Fi 连接:
      • 设置 Wi-Fi 模式为 STA(客户端模式),并关闭 Wi-Fi 休眠以提高响应速度
      • 使用WiFi.begin(ssid, password)尝试连接到指定的 Wi-Fi 网络
      • 在连接过程中,通过循环不断在 LCD 上显示连接状态,并在串口输出连接状态信息
      • 当 Wi-Fi 连接成功后,清空 LCD 显示屏,获取本地 IP 地址,将其转换为字符串并显示在 LCD 上,同时在串口输出连接成功和 IP 地址信息
  • loop()
    • 连接服务器尝试:
      • 在 LCD 上显示正在尝试连接服务器的信息,并在串口输出相应信息
    • 服务器连接成功:
      • 如果成功连接到服务器,清空 LCD 显示屏,显示连接成功信息
      • 向服务器发送 “Hello world!” 数据
      • 进入循环,只要客户端连接或有可用数据,就进行以下操作:
        • 如果有数据可读,读取数据直到遇到回车符,将读取的数据在串口输出,并将其显示在 LCD 上,同时将接收到的数据发送回服务器
      • 在串口输出关闭当前连接的信息,并停止客户端连接
    • 连接失败:
      • 如果连接服务器失败,在串口输出连接失败信息,并停止客户端连接
    • 延迟:
      • 每次循环结束后,延迟 5000 毫秒

【代码修改】


①. 使用PC打开热点,网络频带选择“任何可用频率”,程序中ssid与password与要连接的WIFI名称和密码保持一致
②. 下载网络调试助手,修改为你的本地IP地址(以下的192.168.137.1为示例IP地址)
ESP32-S3-GEEK-demo-17.png

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module与端口
  • 烧录代码

【运行效果】


  • 此时LCD屏幕显示尝试连接,片刻之后显示已连接
  • 修改NetAssist参数,协议类型为TCP Server,本地IP地址与程序中保持一致,本地端口号为8080,点击“连接”,用于和ESP32-S3-GEEK(TCP Client)进行连接与TCP通讯

ESP32-S3-GEEK-demo-18.png

  • 连接成功后,TCP Server会收到ESP32-S3-GEEK发送的TCP消息"Hello world",LCD会显示“Access successful”

ESP32-S3-GEEK-demo-19.png

  • 通过PC端TCP Server发送TCP消息给ESP32-S3-GEEK,若发送成功,ESP32-S3-GEEK作为TCP Client接收到消息会将消息内容显示在LCD上,可以观察到LCD显示消息

ESP32-S3-GEEK-demo-20.png

  • 还可以使用手机打开热点,热点名称与密码同上,选择2.4GHz 频带

ESP32-S3-GEEK-ArDemo-Wifi TCP Client-19.png ESP32-S3-GEEK-ArDemo-Wifi TCP Client-20.png ESP32-S3-GEEK-ArDemo-Wifi TCP Client-21.png

  • 修改代码中serverIP为最后手机创建TCPserver的IP(192.168.6.123)

ESP32-S3-GEEK-ArDemo-Wifi TCP Client-22.png ESP32-S3-GEEK-ArDemo-Wifi TCP Client-23.png

  • 烧录代码,连接成功后,TCP Server会收到ESP32-S3-GEEK发送的TCP消息"Hello world",LCD会显示“Access successful”,可通过手机端TCP Server发送TCP消息给ESP32-S3-GEEK,若发送成功,ESP32-S3-GEEK作为TCP Client接收到消息会将消息内容显示在LCD上,可以观察到LCD显示消息

ESP32-S3-GEEK-ArDemo-Wifi TCP Client-28.png ESP32-S3-GEEK-ArDemo-Wifi TCP Client-29.png ESP32-S3-GEEK-ArDemo-Wifi TCP Client-30.png
ESP32-S3-GEEK-ArDemo-Wifi TCP Client-27.png ESP32-S3-GEEK-ArDemo-Wifi TCP Client-31.png


14_WIFI_TCP_Server

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开WIFI的STA模式,连接PC端打开的热点后,创建TCP Server,PC创建TCP Client访问ESP32-S3-GEEK,两者建立TCP通讯,GEEK在LCD上显示接收内容。适用于学习 ESP32-S3-GEEK 与 Wi-Fi 和 LCD 交互,作为 Wi-Fi 服务器,接收客户端数据并在 LCD 显示,测试稳定性与可靠性

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • intToIpAddress()
    • 使用sprintf函数将传入的 IP 地址整数按照点分十进制的格式转换为字符串,并存储在result指针指向的字符数组中
  • setup()
    • 模块初始化:
      • 调用Config_Init()LCD_Init()初始化相关配置和 LCD 显示屏。
      • 启动串口通信,设置波特率为 115200。
      • 设置 LCD 的背光亮度为 100。
      • 创建新的图像缓冲区,设置旋转角度为 90 度,并清空 LCD 显示屏为特定颜色(0x000f)。
    • Wi-Fi 连接:
      • 设置 Wi-Fi 模式为 STA(客户端模式),并关闭 Wi-Fi 休眠以提高响应速度。
      • 使用WiFi.begin(ssid, password)尝试连接到指定的 Wi-Fi 网络。
      • 在连接过程中,通过循环不断在 LCD 上显示连接状态,并在串口输出连接状态信息。
      • 当 Wi-Fi 连接成功后,清空 LCD 显示屏
  • loop()
    • Wi-Fi 连接状态确认和服务器启动:
      • 获取本地 IP 地址,将其转换为字符串并在串口输出,同时显示在 LCD 上。
      • 使用server.begin(8080)启动服务器,监听端口 8080。
    • 等待客户端连接:
      • 创建一个WiFiClient对象client,并通过server.available()尝试获取连接的客户端。
      • 在 LCD 上显示连接状态信息,并在串口输出相应信息。
    • 客户端连接成功后的处理:
      • 如果有客户端连接,进入循环处理客户端的数据。
      • 当有数据可读时,读取数据直到遇到换行符,然后去除数据末尾的回车和换行符,显示在 LCD 上。
      • 当客户端断开连接后,停止当前连接并在串口输出断开连接的信息

【代码修改】


  • 使用PC打开热点,网络频带选择“任何可用频率”,程序中ssid与password与要连接的WIFI名称和密码保持一致

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module与端口
  • 烧录代码

【运行效果】


  • 烧录成功,LCD显示

ESP32-S3-GEEK-ArDemo-Wifi TCP Server-04.png

  • Wi-Fi连接后,LCD上会显示TCP ServerIP,使用串口调试助手打开TCP Client,用于和ESP32-S3-GEEK(TCP Server)进行连接与TCP通讯

①. 修改端口号为"TCPClient" ,修改远程地址为LCD屏幕上显示的IP,端口号8080,点击连接
②. 加回车换行
③. 输入信息
①. 发送信息
ESP32-S3-GEEK-demo-21.png

  • 消息成功发送,LCD屏幕显示

ESP32-S3-GEEK-ArDemo-Wifi TCP Server-08.png


15_WIFI_Web_Server

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开WIFI的AP模式,PC端连接其WIFI后,打开串口调试助手,通过ESP32-S3-GEEK创建的HTTP网页端发送消息给GEEK,观察串口调试助手与LCD上的接收内容。适用于学习 ESP32-S3-GEEK 与 Wi-Fi 和 LCD 交互,作为 Wi-Fi 接入点服务器,处理客户端请求,测试稳定性与可靠性

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • setup()
    • 调用Config_Init()LCD_Init()初始化相关配置和 LCD 显示屏。
    • 启动串口通信,设置波特率为 115200,用于输出调试信息。
    • 设置 LCD 的背光亮度为 100。
    • 创建新的图像缓冲区,设置旋转角度为 90 度,并清空 LCD 显示屏为特定颜色(0x000f)。
    • 调用WIFI_AP_Init()初始化 Wi-Fi 接入点
  • loop()
    • 通过WiFiClient client = server.available();监听是否有客户端连接到服务器。
    • 调用WIFI_Web_Server(client)函数处理连接的客户端,具体功能取决于该函数的实现,可能涉及提供网页服务或处理特定的网络请求

【代码修改】


  • 使用PC打开热点,网络频带选择“任何可用频率”,程序中ssid与password与要连接的WIFI名称和密码保持一致

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module与端口
  • 烧录代码

【运行效果】


  • 烧录成功,使用PC连接ESP32-S3-GEEK的AP
  • LCD会显示HTTP服务器的IP地址,使用浏览器进行登录IP:192.168.4.1
  • 使用ESP32-S3-GEEK的UART接口通过USB转UART工具与PC连接,打开串口调试助手

ESP32-S3-GEEK-ArDemo-Wifi Web Server-06.png

  • 可在HTTP Web上输入文本内容并且发送HTTP请求至ESP32-S3-GEEK,可在串口调试助手与LCD上显示接收内容

ESP32-S3-GEEK-demo-22.png

ESP32-S3-GEEK-demo-23.png

ESP32-S3-GEEK-ArDemo-Wifi Web Server-11.png


16_MQTT_sub_pub

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开WIFI的STA模式,连接WIFI后,使用微雪云平台,进行MQTT通讯,订阅与发布主题,实现远距离传输信息。适用于学习 ESP32-S3-GEEK 与 Wi-Fi、MQTT 和 LCD 交互,连接 Wi-Fi 和 MQTT 服务器,收发 JSON 数据并在 LCD 显示,测试稳定性与可靠性

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • callback()
    • 将接收到的字节数组转换为字符串inputString
    • 在字符串中查找特定的 JSON 字段,如"data""key"(可根据实际情况修改为特定的数据标识符)。
    • 提取出"builtIn"字段的值,并根据该值进行不同的操作。如果值为 0,则在 LCD 上显示 “close!”,否则显示 “open!”,同时在串口输出相应信息
  • setup_wifi()
    • 在 LCD 上显示 “Wifi Connecting...”。
    • 在串口输出正在连接的 Wi-Fi 网络名称。
    • 设置 Wi-Fi 模式为 STA(客户端模式),并使用指定的 SSID 和密码尝试连接。
    • 在连接过程中,通过循环不断在串口输出连接状态信息,直到连接成功。
    • 连接成功后,清空 LCD 屏幕并显示 “Wifi Connected”,同时在串口输出本地 IP 地址

【代码修改】


  • 开启的热点名称与密码要与代码中一致
  • 微雪云平台账号注册与创建设备后,根据微雪云上新建设备的"查看地址"可以看到设备的Client ID、Pub Topic、Sub Topic,将它们写入例程中进行赋值,用于ESP32-S3-GEEK连接自己的云平台设备

ESP32-S3-GEEK-demo-34.png

ESP32-S3-GEEK-demo-35.png

  • 在callback函数中可以修改识别的标识符为我们自己在云平台上创建的设备属性标识符

ESP32-S3-GEEK-demo-36.png

ESP32-S3-GEEK-demo-37.png

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module与端口
  • 烧录代码

【运行效果】


  • 烧录代码,连接上WIFI后,观察微雪云平台上设备是否进入online状态,若没有可以尝试刷新网页与使用USB转UART连接PC通过串口调试助手查看WIFI与MQTT连接情况,并且在LCD屏上也会显示WIFI与MQTT的连接情况

ESP32-S3-GEEK-demo-32.png

ESP32-S3-GEEK-demo-33.png

  • ESP32-S3-GEEK连接微雪云成功之后即可通过Dashboard进行发送MQTT消息

ESP32-S3-GEEK-ArDemo-MQTT sub pub-10.png

ESP32-S3-GEEK-ArDemo-MQTT sub pub-11.png

  • 我们能在LCD和串口调试助手中看到我们对设备属性值(例:"key")的变化进行了不同的反馈,并且在微雪云的设备接收值中看到ESP32-S3-GEEK发送至微雪云设备的数据(接受值为自己的Client ID,后续自己可将key的返回值或者状态发送回微雪云),至此实现了MQTT的数据上行与下行、订阅主题与发布主题

ESP32-S3-GEEK-ArDemo-MQTT sub pub-12.png

ESP32-S3-GEEK-ArDemo-MQTT sub pub-15.png


17_MQTT_BLE_Keyboard

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开WIFI的STA模式与蓝牙,连接WIFI与蓝牙后,使用微雪云平台,可实现远程蓝牙锁屏与输入密码开屏,还有更多组合键等待您的开发。适用于 ESP32-S3-GEEK 集成 BLE 键盘、Wi-Fi 和 MQTT,控制 LCD 显示,测试稳定性与可靠性

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • callback()
    • 作为 MQTT 订阅的回调函数,用于处理接收到的消息。
    • 打印接收到的消息的主题,然后将接收到的字节数组转换为字符串。
    • 在字符串中查找特定的 JSON 字段 “key”,如果你的标识符不是 “key”,需要修改代码。
    • 提取出 “key” 字段的值,并根据值为 “1” 或其他情况分别调用Screen_ONScreen_OFF函数
  • setup_wifi()
    • 在 LCD 上显示 “Wifi Connecting...”。
    • 在串口输出正在连接的 Wi-Fi 网络名称。
    • 设置 Wi-Fi 模式为 STA(客户端模式),并使用指定的 SSID 和密码尝试连接。
    • 在连接过程中,通过循环不断在串口输出连接状态信息,直到连接成功。
    • 连接成功后,清空 LCD 屏幕并显示 “Wifi Connected”,同时在串口输出本地 IP 地址

【代码修改】


  • 开启的热点名称与密码要与代码中一致(2.4GHZ或任何可用频率)
  • 微雪云平台账号注册与创建设备后,根据微雪云上新建设备的"查看地址"可以看到设备的Client ID、Sub Topic,将它们写入例程中进行赋值,用于ESP32-S3-GEEK连接自己的云平台设备
  • 连接的蓝牙名称与密码要与代码中一致

ESP32-S3-GEEK-demo-34.png

ESP32-S3-GEEK-demo-38.png

  • 在callback函数中可以修改识别的标识符为我们自己在云平台上创建的设备属性标识符

ESP32-S3-GEEK-demo-36.png

ESP32-S3-GEEK-demo-39.png

  • 修改为自己的开屏密码

ESP32-S3-GEEK-demo-40.png

【代码烧录】


  • 选择开发板型号ESP32S3 Dev Module与端口
  • 烧录代码

【运行效果】


  • 烧录代码,连接上WIFI后,打开PC的蓝牙功能以配对连接设备,观察微雪云平台上设备是否进入online状态,若没有可以尝试刷新网页与使用USB转UART连接PC通过串口调试助手查看WIFI与MQTT连接情况,并且在LCD屏上也会显示WIFI与MQTT的连接情况

ESP32-S3-GEEK-demo-32.png

ESP32-S3-GEEK-demo-33.png

  • ESP32-S3-GEEK连接微雪云成功之后,可通过手机端登录微雪云Dashboard进行远程控制PC进行锁屏与输入密码开屏

ESP32-S3-GEEK-ArDemo-MQTT BLE Keyboard-13.png

  • 我们能在LCD和串口调试助手中看到我们对设备属性值(例:"key")的变化进行了不同的反馈,后续还可以在callback函数中将按键修改成Ctrl+C、Ctrl+V等组合键,自己DIY属于你的远程控制蓝牙键盘

ESP32-S3-GEEK-ArDemo-MQTT BLE Keyboard-14.png

  • 还可通过键盘测试的网站来测试ESP32-S3-GEEK蓝牙控制按下了哪些按键
  • 打开键盘测试此界面,用手机端锁屏开屏,键盘测试界面可显示按下了哪些按键

ESP32-S3-GEEK-ArDemo-MQTT BLE Keyboard-16.png


ESP-IDF开发

本章介绍 ESP-IDF 环境搭建,包括 Visual Studio、Espressif IDF插件的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。

环境搭建

下载和安装 Visual Studio

  • 打开VScode官网的下载页面,选择对应系统和系统位数进行下载
    ESP32-S3-AMOLED-1.91-VScode-01.png
  • 运行安装包后,其余均可以默认安装,但这里为了后续的体验建议,建议在此处勾选框中的1、2、3项
    ESP32-S3-AMOLED-1.91-VScode-02.png
    • 第一二项开启后,可以直接通过鼠标右键文件或者目录打开VSCode,可以提高后续的使用体验.
    • 第三项开启后,选择打开方式时,可以直接选择VSCode
环境设置是在 Windows 10 系统下进行,Linux和Mac用户可访问ESP-IDF环境搭建参考

安装Espressif IDF插件

  • 国内部分区域安装,一般推荐“在线安装”, 若因网络因素无法在线安装,则使用“离线安装”。
  • 安装Espressif IDF插件教程,详见:安装Espressif IDF插件教程

运行第一个 ESP-IDF 程序

如果你刚入门学习ESP32和ESP-IDF,还不知道如何创建、编译、烧录和运行ESP-IDF程序,那么请展开看看,希望可以帮助到你!

新建项目

ESP32-S3-AMOLED-1.91-study-01.png

ESP32-S3-AMOLED-1.91-study-02.png

创建例程

  • 使用快捷键 F1 ,输入esp-idf:show examples projects

ESP32-S3-AMOLED-1.91-study-03.png

  • 选择你当前的IDF版本

ESP32-S3-AMOLED-1.91-study-04.png

  • 以Hello world例程为例

①选择对应例程
②其readme会说明该例程适用于什么芯片(下文有介绍例程怎么使用与文件结构,这里略)
③点击创建例程
ESP32-S3-AMOLED-1.91-study-05.png

  • 选择放置例程的路径,要求无例程同名文件夹

ESP32-S3-AMOLED-1.91-study-06.png

修改COM口

  • 此处显示使用对应的COM口,点击可以修改对应COM口
  • 请根据设备对应COM口进行选择(可通过设备管理器查看)
  • 若出现下载失败的情况请点击复位按键1秒以上或进入下载模式,等待 PC 端重新识别到设备后再次下载

ESP32-S3-AMOLED-1.91-study-07.png

修改驱动对象

  • 选择我们需要驱动的对象,也就是我们的主芯片为ESP32S3

ESP32-S3-AMOLED-1.91-study-08.png

  • 选择openocd的路径,这里对我们没有影响,所以我们随便选择一个即可

ESP32-S3-AMOLED-1.91-study-09.png


其余状态栏简介

①.ESP-IDF开发环境版本管理器,当我们的工程需要区分开发环境版本时,可以通过安装不同版本的ESP-IDF来分别管理,当工程使用特定版本时,可以通过使用它来切换
②.设备烧录COM口,选择以将编译好的程序烧录进芯片上
③.set-target 芯片型号选择,选择对应的芯片型号,如:ESP32-P4-Nano需要选择 esp32p4 为目标芯片
④.menuconfig,点击修改sdkconfig配置文件内容,项目配置详细资料
⑤.fullclean 清理按钮,当工程编译报错或其他操作污染编译内容时,通过点击清理全部编译内容
⑥. Build 构建工程,当一个工程满足构建时,通过此按钮进行编译
⑦.当前下载方式,默认为UART
⑧.flash烧录按钮,当一个工程Build构建通过时,选择对应开发板COM口,点击此按钮可以将编译好的固件烧录至芯片
⑨.monitor开启烧录口监控,当一个工程Build-->flash后,可通过点击此按钮查看烧录、调试口输出的l0g,以便观察应用程序是否正常工作
⑩.Debug调试
⑪.Build Flash Monitor 一键按钮,用于连续执行Build-->Flash-->Monitor,常被称作小火苗

ESP32-S3-AMOLED-1.91-study-10.png

编译、烧录、串口监视

  • 点击我们之前介绍的 编译,烧录,打开串口监视器按键

ESP32-S3-AMOLED-1.91-study-11.png

  • 编译可能需要较长时间才能完成,尤其是在第一次编译时

ESP32-S3-AMOLED-1.91-study-12.png

  • 在此过程中,ESP-IDF可能会占用大量CPU资源,因此可能会导致系统卡顿
  • 若是新工程首次烧录程序,将需要选择下载方式,选择 UART

ESP32-S3-AMOLED-1.91-study-13.png

  • 后续也可在 下载方式 处进行修改(点击即可弹出选项)

ESP32-S3-AMOLED-1.91-study-14.png

  • 因为板载自动下载电路,无需手动操作即可自动下载
  • 下载成功后,自动进入串口监视器,可以看到芯片输出对应的信息并提示10S后重启

ESP32-S3-AMOLED-1.91-study-15.png


使用IDF 示例程序

下文以使用“ESP32-S3-LCD-1.47-Demo”为例介绍工程的两种打开方式及使用的一般步骤、ESP-IDF工程项目详解,若使用其他工程,操作步骤类推。

软件内部打开

  • 打开 VScode 软件,选择文件夹打开示例

ESP32-S3-AMOLED-1.91-study-16.png

  • 选择提供的 ESP-IDF 下的示例,点击选择文件(位于 示例程序/Demo/ESP-IDF 路径下)

ESP32-S3-AMOLED-1.91-study-17.png


软件外部打开

  • 正确选择工程目录,打开工程,否则会影响后续程序编译烧录

ESP32-S3-AMOLED-1.91-study-18.png

  • 连接设备后,选择好COM口和型号,点击下方编译并烧录即可实现程序控制

ESP32-S3-AMOLED-1.91-study-19.png

ESP-IDF工程项目详解

  • 组件(Component):ESP-IDF中的组件是构建应用的基本模块,每个组件通常是相对独立的代码库或库,能实现特定的功能或服务,可以被应用程序或是其他组件重复使用,类似于Python开发中的库的定义。
    • 组件的引用:Python开发环境中引入库只需要“import 库名或路径”即可,而ESP-IDF基于C语言基础,引入库是通过CMakeLists.txt进行配置和定义的。
    • CmakeLists.txt的作用:ESP-IDF编译时编译工具CMake会首先通过读取工程目录的顶层CMakeLists.txt的内容来读取构建规则,识别需要编译的内容。当在CMakeLists.txt中引入了需要的组件、程序后,编译工具CMake会根据索引导入每个所需要编译的内容。编译过程如:

ESP32-P4 VSCode ESP-IDF GettingStart 240906 02.png

示例程序

  • ESP32-S3-GEEK 示例程序
示例程序 基础例程说明
Wireless_USB_flash_drive 可将ESP32-S3-GEEK用作具有无线访问功能的 USB 磁盘


Wireless_USB_flash_drive

【程序说明】


  • 该例程可将ESP32-S3-GEEK用作具有无线访问功能的 USB 磁盘,配合SD卡存储可变成一个大容量的无线存储器,同时还可以连接ESP32-S3-GEEK的热点,进行HTTP 文件服务器的上传和下载,极大程度的方便了用户的使用。适用于学习 ESP32 的 USB MSC 功能,可作为存储设备连接 USB 主机,支持不同存储方式,有回调函数处理各种事件,测试稳定性与可靠性
  • 按下boot键重新上电便可退出程序

【硬件连接】


  • 将SD卡装入开发板
  • 将开发板接入电脑

【代码分析】


  • init_fat() :初始化 FAT 文件系统,根据配置选择内部闪存或外部 SD 卡进行挂载
    • 如果使用内部闪存,根据 ESP-IDF 版本选择特定函数挂载
    • 如果使用外部 SD 卡,根据接口类型(SPI 或 SDIO)进行相应初始化和挂载
  • app_main () :主函数,协调程序各部分初始化,包括文件存储、Wi-Fi(若配置)和 USB MSC
    • 调用init_fat初始化文件存储
    • 若配置 Wi-Fi,进行初始化并启动文件服务器
    • 初始化 tinyUSB 并安装驱动

【代码烧录】


  • 确保SD卡已装入
  • 选择型号(esp32s3)与端口
  • UART下载
  • 烧录程序

【运行效果】


  • 烧录成功后,重新插拔ESP-S3-GEEK开发板,此时电脑识别出一个新的U盘设备

ESP32-S3-GEEK-demo-07.png

  • 打开U盘,可以浏览SD卡中的文件,并且可对文件进行增删改查

ESP32-S3-GEEK-demo-08.png

  • 打开电脑WIFI,连接ESP32-S3-GEEK的AP,输入密码Waveshare
  • 连接成功后,打开浏览器,登录IP:192.168.4.1

ESP32-S3-GEEK-demo-09.png

  • 登录成功后,即可进行无线上传和下载文件

ESP32-S3-GEEK-demo-10.png


MicroPython开发

本节围绕 MicroPython 开发环境搭建展开,主要涉及烧录固件以及安装和 Thonny。对于安装 Thonny 部分,详细阐述了其安装步骤与使用说明,为开发者构建 MicroPython 开发环境提供全面且清晰的指导。
MicroPython-flow-01.png

环境搭建

下载和安装 Thonny

  • 打开Thonny官网的下载页面,选择对应系统和系统位数进行下载
    ESP32-S3-Touch-LCD-Thonny install-01.png
  • 选择对应的系统和版本,以windows64位为例,鼠标要移动到windows处,才会显示对应的信息,点击下载安装
    ESP32-S3-Touch-LCD-Thonny install-02.png
  • 其余默认安装即可

烧录固件

  • 目前开发板使用定制的固件进行开发,固件在ESP32-S3-GEEK 示例程序中,固件合并成单个文件,注意下载地址是0x00位置
  • 固件路径:
    ...\ESP32-S3-GEEK-Demo\Firmware\MicroPython-bin
  • 烧录固件教程,详见:Flash固件的烧录与擦除教程
  • factory-bin文件夹下的bin文件为测试板载功能的文件,在此处无需烧录
MicroPython 固件编译更多学习链接

Thonny使用说明

如果你刚入门学习ESP32和Thonny,还不知道如何使用Thonny,那么请展开看看,希望可以帮助到你!

选择开发板及型号

  • 下载安装最新 Thonny IDE后,打开Thonny IDE -> Configure interpreter...,如下图所示
    ESP32-S3-Touch 1.28-Thonny use-01.png
    ESP32-S3-Touch 1.28-Thonny use-02.png
  • 选择ESP32与选择对应的COM口
    ESP32-S3-Touch 1.28-Thonny use-03.png
  • 点击该按钮,可看到shell中输出语句,则说明开发板固件成功使用
    ESP32-S3-Touch 1.28-Thonny use-04.png

上传例程

下文以使用“ESP32-S3-Touch_1.28”例程为例,若使用其他例程,操作步骤类推。
  • 如何找到您想要的示例程序,如果最开始没有files这一栏,我们可以在view里面找到
    ESP32-S3-Touch 1.28-Thonny use-05.png
    ESP32-S3-Touch 1.28-Thonny use-06.png
  • 将本地文件上传到开发板,选择文件,鼠标右键,找到"upload to/",进行下载
    ESP32-S3-Touch 1.28-Thonny use-07.png
  • 以下是全部下载完成的界面,下载的文件请务必与红框内文件保持一致,否则可能会运行失败
    ESP32-S3-Touch 1.28-Thonny use-08.png
  • 选择.py后缀的文件,点击绿色按钮烧录运行
    ESP32-S3-Touch 1.28-Thonny use-09.png
  • 运行另一份文件时要先点击红色stop按钮,这样另一份文件才能正常运行
    ESP32-S3-Touch 1.28-Thonny use-10.png

示例程序

Demo-flow-02.png

  • ESP32-S3-LCD-1.28 示例程序
示例程序 基础例程说明
lcd_example.py 使用ESP32-S3-GEEK打开LCD屏幕,显示文字信息与显示bmp图片
Uart0.py 串口通信
WS_Bluetooth.py 可打开ESP32-S3-GEEK的蓝牙,使用蓝牙与手机蓝牙调试助手进行通讯
WIFI_AP.py 打开WIFI的AP模式,PC可以连接其WIFI
WIFI_STA.py 打开WIFI的STA模式,其可以连接PC打开的热点或者其他WIFI

上传例程及特殊例程

上传例程

  • 将本地文件上传到开发板,选择文件,鼠标右键,找到"upload to/",进行下载

ESP32-S3-GEEK-demo-41.png

  • 以下是全部下载完成的界面,下载的文件请务必与红框内文件保持一致,否则可能会运行失败

ESP32-S3-GEEK-demo-42.png

  • 选择.py后缀的文件,先点击红色stop按钮,再点击绿色按钮烧录运行

ESP32-S3-GEEK-demo-43.png

LCD

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开LCD屏幕,显示文字信息与显示bmp图片
  • 运行时请运行 lcd_example.py

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • lcd_example.py主要定义了一个用于控制特定尺寸的 LCD 显示屏的类LCD_1inch14。它包含了初始化显示屏硬件、发送命令和数据到显示屏、对显示屏缓冲区进行操作以及显示图像和文本等功能。
    • 首先创建了一个 BMPReader 对象 img,并传入一个 BMP 图像文件路径 './ESP32-S3-GEEK.bmp'。这调用了第二段代码中 BMPReader 类的构造函数,该构造函数又调用了 _read_img_info 方法来读取图像文件的相关信息。
    • 然后通过一个循环,调用 img.get_buf(270, 270*x) 方法从 BMP 图像中读取特定长度的数据,并将其插入到 LCD 的帧缓冲区中(通过调用第一段代码中 LCD_1inch14 类的 ins 方法实现)。这里 get_buf 方法的参数 data_len start 用于控制读取的数据长度和起始位置,确保正确地从 BMP 图像中提取数据并显示在 LCD 上
  • bmp_reader.py定义了一个BMPReader类,用于读取 BMP 图像文件。它能够解析 BMP 文件的特定信息,并从文件中提取特定位置和长度的数据,将其转换为特定格式(RGB565)的字节数组返回

【运行效果】


  • LCD屏幕显示

ESP32-S3-GEEK-ArDemo-LCD Button-01.png



SD

【程序说明】


  • 该例程可读取ESP32-S3-GEEK的SD卡槽,直接打开ESP32-S3-GEEK的sd文件夹可浏览SD卡中的文件,使用前需要先将SD卡插入卡槽中。适用于 ESP32 与 SD 卡交互,初始化 SD 卡并挂载文件系统,测试稳定性与可靠性

【硬件连接】


  • 将开发板接入电脑
  • 将SD卡装入开发板

【代码分析】


  • boot.py
    • 通过设置芯片选择(CS)引脚和初始化 SPI 总线来连接到 SD 卡
    • 创建sdcard.SDCard实例并将其挂载到文件系统中,使用uos.mount(sd, '/sd')。一旦挂载成功,可以使用os.listdir('/sd')等文件系统操作来查看 SD 卡中的内容,遍历文件和目录、读取文件内容等
  • sd_card.py
    • 定义了SDCard类,该类提供了与 SD 卡进行交互的方法,初始化 SD 卡、发送命令、读取和写入数据块等。
    • 这段代码本身没有直接显示 SD 卡内容的功能,但它为上层代码提供了底层的操作接口。通过这些接口,可以实现读取 SD 卡上的文件并将其内容显示出来,例如可以读取特定文件的内容并打印出来
  • 两段代码共同协作,实现了在 MicroPython 环境下对 SD 卡的访问和内容显示。第一段代码通常是用户使用的部分,通过调用第二段代码中实现的功能来完成具体的任务

【运行效果】


  • ①②.保证两个文件夹已经上传到开发板
  • ③.点击stop可以看见设备出现了sd文件夹
  • ④.sd文件夹下为所插入SD卡中的内容

ESP32-S3-GEEK-demo-26.png



Uart0.py

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开串口UART0,打开串口调试助手,可以进行串口通信。适用于 MicroPython 与 UART 交互,初始化 UART,可发送和接收数据,测试稳定性与可靠性

【硬件连接】


ESP32-S3-GEEK-ArDemo-UART-01.png

【代码分析】


  • 模块导入和 UART 初始化
    • import machine:导入 MicroPython 的machine模块,用于控制硬件资源。
    • 创建一个 UART 对象uart,指定使用 UART1,设置波特率为 115200,通过指定发送引脚为machine.Pin(43)和接收引脚为machine.Pin(44)来配置 UART 的硬件连接
  • 定义函数
    • send_data函数:接受一个数据参数,使用 UART 的write方法发送数据。
    • receive_data函数:检查 UART 是否有可读数据,如果有,则读取数据并打印出来

【运行效果】


  • 运行后发送字符串 "Hello UART"

ESP32-S3-GEEK-demo-28.png

  • 使用串口调试助手进行通信测试

ESP32-S3-GEEK-demo-27.png



WS_Bluetooth.py

【程序说明】


  • 该例程可打开ESP32-S3-GEEK的蓝牙,使用蓝牙与手机蓝牙调试助手进行通讯

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • ble_irq:蓝牙中断处理函数,根据不同的事件进行相应的处理
    • 如果事件为连接(事件值为 1),调用connected函数
    • 如果事件为断开连接(事件值为 2),调用disconnected函数
    • 如果事件为接收数据(事件值为 3),读取接收特征的值并打印
  • advertiser
    • 将设备名称转换为字节数组,并构建广播数据
    • 使用蓝牙实例的gap_advertise方法进行广播
  • Bluetooth_Init
    • 初始化蓝牙设备
    • 创建蓝牙实例,激活蓝牙,设置设备名称,注册中断处理函数,注册服务并广播设备信息

【运行效果】


  • 程序运行后,打印开发板型号
  • 适用手机蓝牙调试助手与其进行通信

ESP32-S3-GEEK-demo-29.png
ESP32-S3-GEEK-MPDemo-BLE-03.pngESP32-S3-GEEK-MPDemo-BLE-04.pngESP32-S3-GEEK-MPDemo-BLE-05.png



WIFI_AP.py

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开WIFI的AP模式,PC可以连接其WIFI。适用于 ESP32-S3-GEEK 在 MicroPython 下创建 Wi-Fi 接入点,测试稳定性与可靠性

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • redian
    • 创建一个 Wi-Fi 接入点(Access Point,AP)对象ap,使用network.WLAN(network.AP_IF)创建了一个基于接入点模式的网络接口
    • 激活接入点ap.active(True),使设备开始作为一个 Wi-Fi 热点工作
    • 通过ap.config设置接入点的参数,包括网络名称(ESSID)为 'ESP32-S3-GEEK',认证模式为network.AUTH_WPA_WPA2_PSK(即 WPA/WPA2-PSK 加密),以及密码为 'Waveshare'
    • 打印出接入点的 IP 地址,通过ap.ifconfig()[0]获取接入点的 IP 地址并显示

【运行效果】


  • 代码运行后会打印接入点的IP地址
  • 可使用PC打开wifi连接,WiFi名称:ESP32-S3-GEEK,密码:waveshare

ESP32-S3-GEEK-demo-30.png



WIFI_STA.py

【程序说明】


  • 该例程可使用ESP32-S3-GEEK打开WIFI的STA模式,其可以连接PC打开的热点或者其他WIFI。适用于 ESP32 在 MicroPython 下连接特定 Wi-Fi 网络,测试稳定性与可靠性

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • do_connect:程序主入口,初始化显示屏并展示三种字体名称
    • 创建一个 Wi-Fi 客户端接口对象wlan,使用network.WLAN(network.STA_IF)创建了一个基于站点模式(Station Interface)的网络接口。
    • 激活 Wi-Fi 接口wlan.active(True),使设备能够连接到外部的 Wi-Fi 网络。
    • 如果设备当前没有连接到网络,打印出 “connecting to network...” 的提示信息,并尝试连接到指定的 Wi-Fi 网络,这里的网络名称是 'ESP32-S3-GEEK',密码是 'Waveshare'。
    • 通过一个循环不断检查是否连接成功,直到wlan.isconnected()返回True
    • 一旦连接成功,打印出当前的网络配置信息,包括 IP 地址、子网掩码、网关地址等,通过wlan.ifconfig()获取并打印

【运行效果】


  • 可使用PC端打开热点,热点名称与密码为:ESP32-S3-GEEK,Waveshare
  • 程序运行并连接上wifi后打印输出当前网络配置信息

ESP32-S3-GEEK-demo-31.png



Flash固件的烧录与擦除


  • 当前示例程序有提供测试固件,可通过直接烧录测试固件来测试板载设备功能正常与否
  • bin文件路径:
    ..\ESP32-S3-GEEK-Demo\Firmware\factory-bin

资料

原理图

示例程序

数据手册

ESP32-S3

其他器件

软件工具

Arduino

VScode

Thonny

调试工具

固件烧录工具

其他资料链接

FAQ

①烧录时可长按Boot按键插入USB后再松开按键,ESP32-S3-GEEK进去Download mode才开始烧录, 烧录完重新插拔USB则可以进入SPI_FAST_FLASH_BOOT mode,运行程序。
②可尝试关闭PC的蓝牙开关,直接烧录运行(说明蓝牙驱动与ESP32-S3-GEEK的COM驱动有冲突导致)


  • 首次编译很慢属于正常情况,耐心等待即可


  • 部分AppData文件夹是默认隐藏的,可以设置为显示。
  • 英文系统:资源管理器->View->勾选“Hidden items”
  • 中文系统:文件资源管理器->查看->显示->勾选“隐藏的项目”


  • Windows系统:

①通过设备管理器查看: 按下Windows + R键打开“运行”对话框; 输入devmgmt.msc并按回车键打开设备管理器; 展开“端口(COM和LPT)”部分,这里会列出所有的COM端口及其当前状态。
②使用命令提示符查看: 打开命令提示符(CMD); 输入mode命令,这将显示所有COM端口的状态信息。
③查看硬件连接: 如果你已经连接了外部设备到COM口,通常设备会占用一个端口号,可以通过查看连接的硬件来确定使用的是哪个端口。

  • Linux系统:

①使用dmesg命令查看: 打开终端。
②使用ls命令查看: 输入ls /dev/ttyS*或ls /dev/ttyUSB*来列出所有的串口设备。
③使用setserial命令查看: 输入setserial -g /dev/ttyS*来查看所有串口设备的配置信息。



请检查Pub Topic、Sub Topic是否正确填入,设备在微雪云中是否为在线状态



1.14LCD的驱动芯片为ST7789P3。



  • 查看原理图,针对不同开发板的Type-C接口,对应代码处理输出不同:
    • USB直出的开发板,支持printf函数打印输出,若想支持Serial函数打印输出则需要使能USB CDC On Boot功能或者HWCDC声明
    • UART转USB的开发板,支持printf函数和Serial函数打印输出,无需使能USB CDC On Boot


技术支持

联系人:常工
EMAIL:2355861364@qq.com
QQ:2355861364
微信:扫下方二维码添加
Cjs-vx.png

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