如何刷写原生固件
SenseCAP indicator 有两个 MCU,ESP32-S3 和 RP2040。本教程提供了全面的指南来帮助开发者上手,包括刷写开箱即用的工厂原生固件以及将早期出货的设备更新到最新固件。
固件更新特别适用于两种场景:
- 如果您在 2023 年 6 月之前购买了不带 OpenAI 固件的产品,固件版本为
1.0.0
,您可以下载并更新到包含 OpenAI 功能的最新固件。最新固件可以从这里下载。 - 如果您已经开发了一个应用程序并希望刷写自定义固件,您可以按照下面提供的教程进行操作。
简而言之,您需要本教程是因为:
- 您有一个需要刷写到 ESP32-S3 或 RP2040 的固件。
- 您已经修改了代码,需要编译并将其刷写到设备中。
让我们开始这个教程。
准备工作
要开始,您只需要您的 SenseCAP Indicator 和一台 Windows/Mac/Linux 计算机。

获取原生固件
SenseCAP Indicator 的默认出货固件对于 ESP32-S3 和 RP2040 都是完全开源的。
- 源代码: 在刷写之前,您可以选择根据您的需求修改代码。您需要一个工具链(ESP-IDF、Arduino)来编译它。
- 固件: 直接刷写预编译的二进制文件,无需任何代码修改或编译。使用诸如 Esptool 和 Flash Download Tools 等工具。
源代码
固件
对于 ESP32-S3
ESP-IDF
ESP-IDF(Espressif IoT 开发框架)是 Espressif Systems 提供的软件开发框架,专门用于为其 ESP32 和 ESP8266 系列微控制器设计固件和应用程序。有关更多信息,您可以参考 ESP-IDF 编程指南
如果您选择将源代码编译成固件,您需要 ESP-IDF 来执行编译过程。
ESP-IDF 版本必须大于 v5.0。如果您使用的是较旧版本,您需要将其更新到最新版本。
对于新用户,这个视频可能会帮助您更好地理解以下步骤:
工具链安装
- Windows
- Linux and MacOS
官方 Espressif 文档:Windows 工具链标准设置
选项 1:使用离线安装程序
对于 Windows 用户,您可以选择直接下载 ESP-IDF 离线安装程序。这里是直接下载链接:🖱️下载离线安装程序 v5.1.1
选项 2:使用推荐脚本
导航到使用命令提示符
官方 Espressif 文档:Linux 和 macOS 标准工具链设置
如果在 Linux 或 MacOS 中,您可以按照此指南更改 git 仓库的版本。
git clone --recursive https://github.com/espressif/esp-idf.git
导航到 esp-idf 目录:
- 运行
./install.sh esp32s3
,添加 ESP32-S3 支持(SenseCAP indicator 需要) - 输入
./export.sh
在当前终端会话中设置 PATH 和 IDF_PATH 变量。
如果您想在任何 shell 会话中调用,您可以将以下行添加到您的 shell 配置文件中(例如 ~/.bash_profile):
alias get_idf='. $HOME/esp/esp-idf/export.sh'
然后您可以使用 get_idf
来激活环境。^refer
构建项目和刷写
如果您选择将源代码编译成固件,您需要 ESP-IDF 来执行编译过程。
要构建、烧录和监控您的项目,请执行以下命令:
cd <your_sdk_path>/examples/indicator_basis/
idf.py -p PORT build flash monitor
如果不指定 PORT
,IDF 将自动选择可用端口。

到此为止,通过输入命令 idf.py -p PORT flash
,固件已成功烧录到 ESP32-S3 中。
Esptool
ESPtool - GitHub 是一个基于 Python 的开源实用程序,提供了与 Espressif 芯片中 ROM 引导加载程序通信的平台无关方式。
Esptool 可以作为您 Python 脚本的一部分使用。在本指南中,我们将使用 Esptool 发布页面 上提供的 打包软件
。选择与您计算机操作系统对应的软件。
使用 Esptool 进行烧录
提供了两个脚本,展示了如何有效利用 Esptool 将固件烧录到 ESP32-S3 微控制器上。
请注意,提供的脚本是为 Windows 操作系统量身定制的。如果您使用的是不同的操作系统,您需要调整脚本以适应您的环境。
merge.bat 脚本特别有用,因为它智能地将引导加载程序、分区表和指示器基础二进制文件合并为单个固件文件。合并后,可以使用 flash.bat 脚本将此固件无缝烧录到 ESP32-S3 上。出现提示时,输入与您设备对应的 COM 端口,烧录过程将开始。完整操作可总结如下:
esptool.exe --chip esp32s3 ^
merge_bin -o sensecap_indicator_basis_v1.0.0.bin ^ # Target file name
--flash_mode dio ^
--flash_size 8MB ^
0x0 ../../build/bootloader/bootloader.bin ^
0x8000 ../../build/partition_table/partition-table.bin ^
0x10000 ../../build/indicator_basis.bin
或者,如果您更喜欢直接烧录单个二进制文件而不是合并文件然后烧录,您可以直接使用 just_flash.bat
脚本:
esptool.exe --chip esp32s3 --port COMx --baud 921600 write_flash -z ^
0x0 ../../build/bootloader/bootloader.bin ^
0x8000 ../../build/partition_table/partition-table.bin ^
0x10000 ../../build/indicator_basis.bin
对于使用合并固件的直接烧录过程:
esptool.exe --chip esp32s3 --port COMx --baud 921600 write_flash -z 0x0 indicator_basis_v1.0.0.bin
请密切注意起始(0x0)地址,特别是在不合并二进制文件时。对于单独的二进制文件,请参考 Flash Download Tools 单独二进制文件 中的说明。遵循这些指导原则可确保无错误烧录。
要使用这些脚本,请将代码保存到项目文件夹中名为 merge.bat
和 flash.bat
的单独文本文件中。这种组织方法简化了访问和使用。
通过使用这些脚本,您可以简化固件准备和烧录阶段,有助于实现更流畅、更可靠的过程。
├── indicator_basis
│ ├── CMakeLists.txt
│ ├── build
│ ├── docs
│ ├── main
│ ├── partitions.csv
│ ├── sdkconfig
│ └── .defaults
│ └── flash.bat
│ └── merge.bat
- 使用
merge.bat
合并二进制文件。 - 使用
flash.bat
烧录合并的固件。
烧录固件
对于烧录固件,您可以使用提供的 flash.bat
脚本。此脚本旨在简化将固件烧录到 ESP32-S3 微控制器的过程。
显示 flash.bat 代码
@echo off
setlocal
cd /d "%~dp0"
:: Set Chip
set chip=esp32s3
:: Set Baud
set baud=921600
:: List COM ports
echo Available ports and devices:
echo.
for /F "tokens=* delims=" %%A in ('wmic path Win32_PnPEntity get Name ^| findstr /C:"COM" ^| findstr /C:"CH340"') do (
echo %%A
)
:: Prompt for port
:chooseport
echo.
echo Please enter the COM port to use (e.g., COM5):
set /p port=
:: Check if chosen port is valid and contains "CH340"
for /F "tokens=* delims=" %%A in ('wmic path Win32_PnPEntity get Name ^| findstr /C:"%port%" ^| findstr /C:"CH340"') do (
set device=%%A
goto :flash
)
echo Port %port% not found
goto :chooseport
:flash:: Print chosen parameters
echo.
echo You have chosen:
echo Chip: %chip%
echo Port: %port% - %device%
echo Baud: %baud%
@REM echo Press any key to continue to...
@REM pause >nul
:: Run esptool for the single file
esptool.exe --chip %chip% --port %port% --baud %baud% write_flash -z 0x0 indicator_basis_v1.0.0.bin
if ERRORLEVEL 1 (
echo Flashing with the single file failed with error %ERRORLEVEL%.
goto :end
)
:: End of script
:end
endlocal
合并二进制文件
提供的 merge.bat
脚本可用于将必要的二进制文件合并为一个固件文件。此脚本简化了过程并确保正确合并以成功烧录,这允许您烧录单个 bin 文件而不是烧录单独文件。
显示 merge.bat 代码
@echo off
SETLOCAL
SET CurrentDir=%cd%
SET ScriptDir=%~dp0
SET CurrentDir=%CurrentDir:~0,-1%
SET ScriptDir=%ScriptDir:~0,-1%
IF NOT "%CurrentDir%"=="%ScriptDir%" (
cd /d "%ScriptDir%"
)
esptool.exe --chip esp32s3 ^
merge_bin -o indicator_basis_v1.0.0.bin ^
--flash_mode dio ^
--flash_size 8MB ^
0x0 ../../build/bootloader/bootloader.bin ^
0x8000 ../../build/partition_table/partition-table.bin ^
0x10000 ../../build/indicator_basis.bin
ENDLOCAL
Flash Download Tools (仅限Windows)
Flash Download Tools 用于对ESP8266和ESP32系列微控制器进行编程或固件烧录。它们提供图形用户界面(GUI),让用户可以轻松地将固件烧录到ESP微控制器上。
按照以下步骤烧录预编译固件:
下载: Flash Download Tools (仅限Windows)

-
步骤1:双击
.exe
文件进入工具的主界面。 -
步骤2:选择以下选项:
选项 | 参数 |
---|---|
芯片类型 | ESP32-S3 |
工作模式 | Develop |
加载模式 | UART |

-
步骤3:使用USB type-C线缆将SenseCAP Indicator连接到您的笔记本电脑。
-
步骤4:在SPI下载选项卡中,点击"..."并导航到您刚刚下载的固件。
- 步骤5:配置SPI闪存:
选项 | 参数 |
---|---|
SPI速度 | 40MHz |
SPI模式 | DIO |
- 步骤6:配置下载面板:

- COM:检查您设备管理器中的端口,USB-SERIAL是正确的端口。
(
这里我们选择COM4
) - 波特率:921600(推荐值)
然后点击START
开始烧录。

当显示FINISH
时,固件烧录已完成。

用于单独二进制文件的Flash Download Tools
在前面提到的指南中,二进制文件"Default_Factory_Firmware_ESP32-S3.bin"将三个二进制文件合并为一个。
但是,如果您使用ESP-IDF构建固件,直接烧录单个文件可能会导致错误。相反,您需要找到您构建的三个单独的二进制文件并指定正确的地址(您可以使用自己的地址),如下所示:
- bootloader.bin ----> 0x0
- partion-table.bin ----> 0x6800
- termial_demo.bin ----> 0x10000

对于 RP2040
通过 Arduino IDE 烧录
RP2040 开发工具利用 Arduino 来增强您的编码体验。
Arduino IDE 是用于编写 Arduino 开发板代码的免费软件。凭借其用户友好的界面,您可以轻松编写和上传代码。基于简化版的 C++,它提供了库和示例,非常适合初学者。
下载:
-
步骤 1:安装 Arduino IDE
-
步骤 2:添加 Raspberry Pi Pico 开发板
打开您的 Arduino IDE,点击 Arduino IDE > Preferences,并将以下 URL 复制到 Additional Boards Manager URLs:
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
![]() | ![]() |
点击 Tools > Board > Board Manager。

在开发板管理器中搜索 "indicator" 并安装 "Raspberry Pi Pico/RP2040"

- 步骤 3:添加库
- Sensirion Core: Sensirion Arduino Core library
- PacketSerial : Serial communication protoco
- Sensirion I2C SGP40 : SGP40 TVOC sensor library
- Sensirion I2C SCD4x : SCD41 CO2 sensor library
- Sensirion Gas Index Algorithm : Transfer index library
- Seeed_Arduino_AHT20 : AHT20 temperature and humidity sensor library
在 Arduino IDE 中,您可以在 Library Manager
中搜索它,例如 Seeed_Arduino_AHT20
,然后安装它。
点击预览离线安装
要离线安装,您可以从 GitHub 下载仓库 zip 文件,导航到 Sketch -> Include Library -> Add .ZIP Library,然后选择您下载的库。

-
步骤 4:使用提供的 USB Type-C 线缆将设备连接到您的 PC。
-
步骤 5:选择开发板和端口
搜索 "Indicator" 并选择 Seeed INDICATOR RP2040
开发板,然后选择 usbmodem
串口。
![]() |
![]() |
- 步骤 6:打开示例代码文件
File -> Open,然后选择示例代码文件(.ino 文件)。
我们提供了一个示例代码文件,您可以根据需要修改代码。

- 步骤 7:验证并上传文件。
![]() |
![]() |
![]() |
至此,我们已经完成了在 RP2040 上构建和烧录(下载)固件。
烧录 .uf2 文件
- 步骤 1:将设备连接到您的 PC
使用针长按此内部按钮,然后通过提供的 USB Type-C 线缆将设备连接到您的 PC,连接后释放按钮。

- 步骤 2:固件烧录
连接成功后,您的 PC 将显示一个磁盘。

将 .uf2 文件复制到磁盘,然后磁盘将注销。

升级将自动运行。
ESP32 & RP2040 通信协议
ESP32 和 RP2040 使用串口通信,采用 cobs 通信协议。演示中使用的命令列表如下:
命令格式由数据包类型和数据包参数组成。

资源
常见问题
如何区分串口?
- Windows
- MacOS
在设备管理器中检查端口
- "USB Serial Device(COMx)" 或 "USB 串行设备" 是 RP2040 的端口
- "USB-SERIAL CH340" 是 ESP32 的端口 简而言之,CH340 端口是 ESP32 的端口。

- "/dev/cu.usbmodem" 是 RP2040 的端口

最近更新
- 2023-11-17
- 移除了补丁部分
- 2023-08-25
- 使补丁部分更加清晰
- 2023-07-25
- 添加了使用 Esptool 刷写固件的内容
- 2023-05-29
- 添加了补丁部分
技术支持
需要 SenseCAP Indicator 的帮助?我们随时为您提供协助!