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

1、USB-A 接口 2、UART 接口子 3、GPIO 接口 4、I2C 接口 5、Micro SD 卡槽 | 6、W25Q128JVSIQ 7、ESP32-S3 8、BOOT 按键 9、天线 |


ESP32-S3-GEEK 目前提供 Arduino IDE , ESP-IDF 和MicroPython三种开发工具和框架,提供了灵活的开发选择,你可以根据项目需求和个人习惯选择适合的开发工具。
| Arduino IDEArduino IDE是一款便捷灵活、方便上手的开源电子原型平台。不需要太多基础,简单学习后,你也可以快速地进行开发。同时,Arduino 拥有庞大的全球用户社区,提供了海量的开源代码、项目示例和教程,还有丰富的库资源,封装了复杂功能,让开发者能快速实现各种功能。 |
| MicroPythonMicroPython是Python 3编程语言的完全实现,它可直接运行在 ESP32、Raspberry Pi Pico 等嵌入式硬件上。你可以通过REPL直接在板子上运行Python脚本,非常适合快速原型设计。 |
| ESP-IDFESP-IDF,全称Espressif IDE,是乐鑫科技为 ESP系列芯片推出的专业开发框架。它使用C语言开发,包括编译器、调试器、烧录工具等,可在命令行下或使用集成开发环境(如 Visual Studio Code 配合 Espressif IDF 插件)进行开发,插件提供代码导航、项目管理、调试等功能。 |
这两种开发方式各有其优势,开发者可以根据自身需求和技能水平进行选择。Arduino 和 MicroPython适合初学者和非专业人士,因其简单易学、上手快。而对于有专业背景或对性能要求较高的开发者,ESP-IDF 是更好的选择,它提供了更高级的开发工具和更强的控制能力,适用于复杂项目的开发。

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

| 板名称 | 板安装要求 | 版本号要求 |
|---|---|---|
| esp32 by Espressif Systems | “离线”安装/“在线”安装 | 2.0.7 |
| 库名称 | 说明 | 版本 | 库安装要求 |
|---|---|---|---|
| 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 | “在线”安装或“离线”安装 |
File -> New Sketch
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,点击保存①. 点击选择下拉框选项“Select Other Board and Port”;
②. 搜索需要的开发板型号“esp32s3 dev module”并选择;
③. 选择COM口;
④. 保存选择。

①. 编译程序;②. 编译并下载程序;③. 下载成功。

| 示例程序 | 基础例程说明 | 依赖库 |
|---|---|---|
| 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 |
【程序说明】
【硬件连接】
【代码分析】
button.attachLongPressStart(LongPressStart, &button)等语句将特定的函数绑定到按钮的不同事件上,使得当按钮被长按、单击或双击时,能够自动调用相应的处理函数
button.tick()不断检查按钮的状态,判断是否有按钮事件发生。如果有事件发生,就会根据事件类型调用相应的回调函数
【代码烧录】
【运行效果】

【程序说明】
【硬件连接】
【代码分析】
【代码烧录】
USB CDC On Boot
【运行效果】

【程序说明】
【代码分析】
analogWrite将背光控制引脚PIN_BL设置为 0,关闭背光。Wire.begin(PIN_SDA, PIN_SCL)初始化 I2C 通信(注释中的SPI.begin()表示也可以使用 SPI 模式,但这里未启用)。bme68xData结构体对象data来存储传感器数据。BME68X_FORCED_MODE)。bme.getData(data)将数据存储到data结构体中,并在串口输出时间戳、温度、压力、湿度、气体电阻和状态信息【代码烧录】
USB CDC On Boot【运行效果】

【程序说明】
【代码分析】
analogWrite函数将引脚DEV_BL_PIN(7)的模拟输出设置为 0,用于关闭设备的背光buffer用于存储输入数据,以及一个变量bufferSize用于记录缓冲区中的数据大小。memset函数将缓冲区清零,为下一次输入做准备【代码烧录】
【运行效果】

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

【程序说明】
【硬件连接】
【其余准备】

【代码分析】
setup() :【代码烧录】
USB CDC On Boot【运行效果】

【程序说明】
【硬件连接】
【代码分析】
DEV_BL_PIN的设备输出设为 0,初始化串口通信,启动 HSPI 总线并设置时钟分频,然后尝试初始化连接在特定引脚上的 SD 卡,若成功,确定 SD 卡类型并显示其容量大小。之后进行一系列对 SD 卡的文件系统操作,如列出目录、创建和删除目录、读写文件、重命名文件以及测试读写性能,同时输出 SD 卡总空间和已用空间【代码烧录】
USB CDC On Boot【运行效果】

【程序说明】
【SD卡准备】
【硬件连接】
【代码分析】
jpegRender【代码烧录】
USB CDC On Boot【运行效果】

【动画】

【程序说明】
【硬件连接】
【代码分析】
【代码烧录】
USB CDC On Boot【程序说明】
【程序说明】
【硬件连接】
【代码分析】
bleKeyboard,传入设备名称、制造商名称和电池电量报告间隔等参数,然后调用begin方法启动蓝牙键盘print方法发送字符串 “waceshare”。write方法发送回车键(KEY_RETURN)。【代码修改】
①. 蓝牙名称
②. 修改为你的开屏密码,则可进行自动锁屏与开屏操作,按下boot键重新上电便可退出程序(以下的waveshare为示例密码)
【代码烧录】
【运行效果】
【程序说明】
【硬件连接】
【代码分析】
Config_Init()和LCD_Init()初始化相关配置和 LCD 显示屏。WIFI_AP_Init()初始化 Wi-Fi 接入点WiFiClient client = server.available();监听是否有客户端连接到服务器。WIFI_LCD_Control(client)函数处理连接的客户端,可能进行与 LCD 显示相关的操作,具体功能取决于该函数的实现【代码烧录】
【运行效果】



【程序说明】
【硬件连接】
【代码分析】
sprintf函数将传入的 IP 地址整数按照点分十进制的格式转换为字符串,并存储在result指针指向的字符数组中Config_Init()和LCD_Init()初始化相关配置和 LCD 显示屏WiFi.begin(ssid, password)尝试连接到指定的 Wi-Fi 网络【代码修改】
①. 使用PC打开热点,网络频带选择“任何可用频率”,程序中ssid与password与要连接的WIFI名称和密码保持一致
②. 下载网络调试助手,修改为你的本地IP地址(以下的192.168.137.1为示例IP地址)
【代码烧录】
【运行效果】













【程序说明】
【硬件连接】
【代码分析】
sprintf函数将传入的 IP 地址整数按照点分十进制的格式转换为字符串,并存储在result指针指向的字符数组中Config_Init()和LCD_Init()初始化相关配置和 LCD 显示屏。WiFi.begin(ssid, password)尝试连接到指定的 Wi-Fi 网络。server.begin(8080)启动服务器,监听端口 8080。WiFiClient对象client,并通过server.available()尝试获取连接的客户端。【代码修改】
【代码烧录】
【运行效果】

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

【程序说明】
【硬件连接】
【代码分析】
Config_Init()和LCD_Init()初始化相关配置和 LCD 显示屏。WIFI_AP_Init()初始化 Wi-Fi 接入点WiFiClient client = server.available();监听是否有客户端连接到服务器。WIFI_Web_Server(client)函数处理连接的客户端,具体功能取决于该函数的实现,可能涉及提供网页服务或处理特定的网络请求【代码修改】
【代码烧录】
【运行效果】




【程序说明】
【硬件连接】
【代码分析】
inputString。"data"和"key"(可根据实际情况修改为特定的数据标识符)。"builtIn"字段的值,并根据该值进行不同的操作。如果值为 0,则在 LCD 上显示 “close!”,否则显示 “open!”,同时在串口输出相应信息【代码修改】




【代码烧录】
【运行效果】






【程序说明】
【硬件连接】
【代码分析】
Screen_ON或Screen_OFF函数【代码修改】





【代码烧录】
【运行效果】





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






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




①.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,常被称作小火苗









CMakeLists.txt进行配置和定义的。CMake会首先通过读取工程目录的顶层CMakeLists.txt的内容来读取构建规则,识别需要编译的内容。当在CMakeLists.txt中引入了需要的组件、程序后,编译工具CMake会根据索引导入每个所需要编译的内容。编译过程如:



①.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,常被称作小火苗









CMakeLists.txt进行配置和定义的。CMake会首先通过读取工程目录的顶层CMakeLists.txt的内容来读取构建规则,识别需要编译的内容。当在CMakeLists.txt中引入了需要的组件、程序后,编译工具CMake会根据索引导入每个所需要编译的内容。编译过程如:
| 示例程序 | 基础例程说明 |
|---|---|
| Wireless_USB_flash_drive | 可将ESP32-S3-GEEK用作具有无线访问功能的 USB 磁盘 |
【程序说明】
【硬件连接】
【代码分析】
init_fat初始化文件存储【代码烧录】

【运行效果】




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


...\ESP32-S3-GEEK-Demo\Firmware\MicroPython-bin











| 示例程序 | 基础例程说明 |
|---|---|
| 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 |



【程序说明】
【硬件连接】
【代码分析】
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 上【运行效果】

【程序说明】
【硬件连接】
【代码分析】
sdcard.SDCard实例并将其挂载到文件系统中,使用uos.mount(sd, '/sd')。一旦挂载成功,可以使用os.listdir('/sd')等文件系统操作来查看 SD 卡中的内容,遍历文件和目录、读取文件内容等【运行效果】

【程序说明】
【代码分析】
import machine:导入 MicroPython 的machine模块,用于控制硬件资源。uart,指定使用 UART1,设置波特率为 115200,通过指定发送引脚为machine.Pin(43)和接收引脚为machine.Pin(44)来配置 UART 的硬件连接send_data函数:接受一个数据参数,使用 UART 的write方法发送数据。receive_data函数:检查 UART 是否有可读数据,如果有,则读取数据并打印出来【运行效果】


【程序说明】
【硬件连接】
【代码分析】
connected函数disconnected函数gap_advertise方法进行广播【运行效果】




【程序说明】
【硬件连接】
【代码分析】
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'ap.ifconfig()[0]获取接入点的 IP 地址并显示【运行效果】

【程序说明】
【硬件连接】
【代码分析】
wlan,使用network.WLAN(network.STA_IF)创建了一个基于站点模式(Station Interface)的网络接口。wlan.active(True),使设备能够连接到外部的 Wi-Fi 网络。wlan.isconnected()返回True。wlan.ifconfig()获取并打印【运行效果】

..\ESP32-S3-GEEK-Demo\Firmware\factory-bin
①烧录时可长按Boot按键插入USB后再松开按键,ESP32-S3-GEEK进去Download mode才开始烧录, 烧录完重新插拔USB则可以进入SPI_FAST_FLASH_BOOT mode,运行程序。
②可尝试关闭PC的蓝牙开关,直接烧录运行(说明蓝牙驱动与ESP32-S3-GEEK的COM驱动有冲突导致)
①通过设备管理器查看: 按下Windows + R键打开“运行”对话框; 输入devmgmt.msc并按回车键打开设备管理器; 展开“端口(COM和LPT)”部分,这里会列出所有的COM端口及其当前状态。
②使用命令提示符查看: 打开命令提示符(CMD); 输入mode命令,这将显示所有COM端口的状态信息。
③查看硬件连接: 如果你已经连接了外部设备到COM口,通常设备会占用一个端口号,可以通过查看连接的硬件来确定使用的是哪个端口。
①使用dmesg命令查看: 打开终端。
②使用ls命令查看: 输入ls /dev/ttyS*或ls /dev/ttyUSB*来列出所有的串口设备。
③使用setserial命令查看: 输入setserial -g /dev/ttyS*来查看所有串口设备的配置信息。
请检查Pub Topic、Sub Topic是否正确填入,设备在微雪云中是否为在线状态
可以的,需要烧录无线U盘程序,SD卡映像中 SPIFS只支持32GB以下。
1.14LCD的驱动芯片为ST7789P3。
查看使用外部SD卡教程,进行使用SD卡。
周一-周五(9:30-6:30)周六(9:30-5:30)
手机:13434470212
邮箱:services04@spotpear.cn
QQ:202004841
