配置与准备
概述
XIAOML Kit 旨在为 TinyML 应用提供实践平台。该套件包含功能强大的 XIAO ESP32S3 Sense 开发板及扩展板,集成了机器学习项目所需的核心传感器。
XIAOML Kit 全套组件:
- XIAO ESP32S3 Sense:主开发板,集成摄像头、数字麦克风和 SD 卡支持
- 扩展板:内置 6 轴 IMU(LSM6DS3TR-C)和 0.42 英寸 OLED 显示屏,用于运动感知与数据可视化
- SD 卡工具包:含 SD 卡和 USB 适配器,便于数据存储与模型部署
- USB-C 数据线:用于连接开发板与电脑
- 天线与散热片
⚠️ 注意
如需使用 XIAO ML Kit 扩展板,请勿安装散热片(或小心拆除)。详见附录说明。

XIAO ESP32S3 Sense 主板特性
XIAO ESP32S3 Sense 是 XIAOML Kit 的核心,集成了嵌入式 ML 计算能力、摄像与音频功能,非常适合智能语音与视觉 AI 的 TinyML 应用。

主要特性
- 高性能 MCU:ESP32S3 32 位双核 Xtensa 处理器,最高 240 MHz,支持 Arduino / MicroPython
- 丰富功能:可拆卸 OV2640 摄像头(1600×1200),兼容 OV5640,集成数字麦克风
- 电源设计:锂电池充电管理,四种功耗模式,深度睡眠最低 14 μA
- 大容量内存:8 MB PSRAM + 8 MB FLASH,支持最大 32 GB FAT SD 卡
- 无线性能优异:2.4 GHz Wi-Fi + BLE,U.FL 天线支持 100 米以上通信
- 小巧设计:21 × 17.5 mm,经典 XIAO 尺寸,适合空间受限项目

下图为主板引脚分布:

更多详情请参考 Seeed Studio Wiki
扩展板特性
扩展板为 XIAOML Kit 增强了运动感知与机器学习能力:

主要组件:
6 轴 IMU(LSM6DS3TR-C):
- 3 轴加速度计 + 3 轴陀螺仪,支持运动检测与分类
- 加速度范围:±2/±4/±8/±16 g
- 陀螺仪范围:±125/±250/±500/±1000/±2000 dps
- I2C 地址:0x6A
- 3 轴加速度计 + 3 轴陀螺仪,支持运动检测与分类
0.42 英寸 OLED 显示屏
- 单色(72×40 分辨率),实时数据显示
- 控制器:SSD1306
- I2C 地址:0x3C
- 单色(72×40 分辨率),实时数据显示
复位按钮(EN)
电池接口(BAT+,BAT-)
套件组装
扩展板与 XIAO ESP32S3 Sense 无缝连接,构建了集视觉、音频、运动感知于一体的多模态机器学习平台。

请注意模块安装方向:

说明:
- ESP32S3 Sense 底部的
EN
引脚可通过扩展板上的RST
按钮访问。 BAT+
和BAT-
也通过扩展板上的白色BAT3.7V
接口提供。
XIAOML Kit 应用场景:
- 视觉:集成摄像头实现图像分类与目标检测
- 音频:内置麦克风支持关键词检测与语音识别
- 运动:IMU 传感器实现活动识别与异常检测
- 多模态:多传感器融合,支持复杂 ML 应用
在 Arduino IDE 上安装 XIAO ESP32S3 Sense
通过 USB-C 线将 XIAOML Kit 连接至电脑。
图 8: USB 连接示意 根据操作系统下载并安装 Arduino IDE 稳定版。
打开 Arduino IDE,点击板卡管理器(
UNO 图标
)。搜索 “ESP32",选择 “esp32 by Espressif Systems",点击
安装
或更新
。
不要选择 “Arduino ESP32 Boards by Arduino",该包仅适用于 Arduino Nano ESP32。

> ⚠️ **注意**
>
> 3.x 版本在与 Edge Impulse 部署代码配合时可能有兼容性问题,建议使用 2.0.x 稳定版(如 2.0.17)。
点击
选择开发板
,输入 xiao 或 esp32s3,在板卡管理器中选择XIAO_ESP32S3
,并选择对应的端口。图 10: 选择开发板与端口
至此,设备已准备就绪。接下来进行测试。
BLINK 测试
XIAO ESP32S3 Sense 板载 LED 连接至 GPIO21。可运行 Files/Examples/Basics/Blink
示例,或使用如下代码:
#define LED_BUILT_IN 21 // 可选定义
void setup() {
pinMode(LED_BUILT_IN, OUTPUT); // 设置为输出
}
// 注意:引脚为反向逻辑,LOW 亮,HIGH 灭
void loop() {
digitalWrite(LED_BUILT_IN, LOW); // 点亮
delay(1000); // 等待 1 秒
digitalWrite(LED_BUILT_IN, HIGH); // 熄灭
delay(1000); // 等待 1 秒
}
注意:引脚为反向逻辑,LOW 亮,HIGH 灭。

麦克风测试
首先进行声音检测。可直接输入下方代码,或参考 GitHub 项目 下载 XIAOML_Kit_Mic_Test 示例:
/*
XIAO ESP32S3 简单麦克风测试
(适用于 ESP32 库 3.0.x 及以上)
*/
#include <ESP_I2S.h>
I2SClass I2S;
void setup() {
Serial.begin(115200);
while (!Serial) {}
// 设置 42 号 PDM 时钟和 41 号 PDM 数据引脚
I2S.setPinsPdmRx(42, 41);
// 16kHz,16 位单声道
if (!I2S.begin(I2S_MODE_PDM_RX,
16000,
I2S_DATA_BIT_WIDTH_16BIT,
I2S_SLOT_MODE_MONO)) {
Serial.println("I2S 初始化失败!");
while (1);
}
}
void loop() {
int sample = I2S.read();
if (sample && sample != -1 && sample != 1) {
Serial.println(sample);
}
}
打开 串口绘图器,即可看到声音变化曲线。

发声时可在串口绘图器中观察到变化。
录音并保存为 .wav 文件到 microSD 卡
使用板载 SD 卡可保存 .wav 音频。需先启用 XIAO PSRAM。
ESP32-S3 芯片内置 RAM 容量有限,XIAO 板载 8 MB PSRAM,可通过 SPI 与主控通信,需在菜单
Tools->PSRAM:"OPI PSRAM"->OPI PSRAM
启用。

XIAO ESP32S3 Sense 支持最大 32GB microSD 卡,需格式化为 FAT32。
插入 FAT32 格式 SD 卡:

/*
* Seeed XIAO ESP32S3 Sense WAV 录音
* (适用于 ESP32 库 3.0.x 及以上)
*/
#include "ESP_I2S.h"
#include "FS.h"
#include "SD.h"
void setup() {
I2SClass i2s;
uint8_t *wav_buffer;
size_t wav_size;
Serial.begin(115200);
while (!Serial) { delay(10); }
Serial.println("初始化 I2S 总线...");
i2s.setPinsPdmRx(42, 41);
if (!i2s.begin(I2S_MODE_PDM_RX,
16000,
I2S_DATA_BIT_WIDTH_16BIT,
I2S_SLOT_MODE_MONO)) {
Serial.println("I2S 初始化失败!");
while (1);
}
Serial.println("I2S 初始化完成。");
Serial.println("初始化 SD 卡...");
if(!SD.begin(21)){
Serial.println("SD 卡挂载失败!");
while (1);
}
Serial.println("SD 卡初始化完成。");
Serial.println("录音 20 秒...");
wav_buffer = i2s.recordWAV(20, &wav_size);
File file = SD.open("/arduinor_rec.wav", FILE_WRITE);
if (!file) {
Serial.println("文件写入失败!");
return;
}
Serial.println("写入音频数据...");
if (file.write(wav_buffer, wav_size) != wav_size) {
Serial.println("音频写入失败!");
return;
}
file.close();
Serial.println("录音完成。");
}
void loop() {
delay(1000);
Serial.printf(".");
}
- 保存为
Wav_Record.ino
,上传至开发板。 - 程序启动或按下
RESET
后自动录音 20 秒,保存为 “arduino_rec.wav” 到 SD 卡。 - 串口每秒输出 “.",表示录音完成,可用读卡器播放。

音质优秀!
代码原理详见 wiki 页面。
更多关于 XIAO ESP32S3 Sense 文件系统请参考 链接 。
摄像头测试
摄像头可通过多种方式测试:
- SenseCraft AI Studio
- Arduino IDE 的 CameraWebServer 示例(见下节)
- 拍照并 保存到 SD 卡
使用 SenseCraft AI Studio 测试摄像头
最简单的方式是使用 SenseCraft AI Studio 平台,支持多种 AI 设备,包括 XIAO ESP32S3 Sense 和 Grove Vision AI V2。
也可使用 SenseCraft Web Toolkit 简化版工具。
操作步骤:
- 打开 SenseCraft AI Vision Workspace ,用 Chrome 浏览器登录或注册账号。

- 连接 XIAOML Kit,选择设备:

注:WebUSB 工具在 Safari 等浏览器可能无法正常工作,建议用 Chrome。确保 Arduino IDE 或其他串口工具未占用设备。
上传模型后即可看到摄像头画面。可选择 Seeed Studio 预置的多种视觉模型,点击 [Select Model]
按钮选择。

鼠标悬停可查看模型名称、描述、类别(如图像分类、目标检测、姿态检测)、算法(如 YOLO V5/V8、FOMO、MobileNet V2 等)及部分指标(准确率、mAP)。

选择如 “Person Classification” 等模型,点击 [Confirm] 或上传自定义模型。

Preview 区域可实时查看摄像头画面。

后续视觉 AI 实验将详细介绍 SenseCraft AI Studio。
WiFi 测试
天线安装
XIAOML Kit 出厂已组装。首先拆下扩展板(含摄像头、麦克风、SD 卡槽)。
XIAO ESP32S3 正面左下有 “WiFi/BT 天线接口”。为提升信号,将天线插入接口。
安装技巧:先插入一侧,再轻压另一侧,避免用力过猛导致手指受伤。拆卸时同理,先撬起一侧。

扩展板重新安装只需对齐 B2B 连接器,按压听到“咔哒”声即完成。
XIAO ESP32S3 支持 WiFi。可通过示例代码扫描周围 WiFi 网络。
在 Arduino IDE 选择开发板和端口,打开 Examples -> WiFI -> WiFIScan,上传至开发板。
串口监视器可看到扫描到的 WiFi SSID 和信号强度:

简易 WiFi 服务器(LED 控制)
测试设备作为 WiFi 服务器的能力。可通过网页控制板载 LED 开关。
在 Examples -> WiFI -> SimpleWiFIServer 中找到示例,上传前需:
填写 WiFi 账号密码:
const char* ssid = "Your credentials here"; const char* password = "Your credentials here";
将 pin 5 改为 pin 21,并修改网页内容(第 85、86 行):
client.print("Click <a href=\"/H\">here</a> to turn the LED on pin 21 OFF.<br>"); client.print("Click <a href=\"/L\">here</a> to turn the LED on pin 21 ON.<br>");
串口监视器可查看服务器运行状态。

浏览器输入串口显示的 IP 地址,即可通过网页控制 LED。

使用 CameraWebServer
在 Arduino IDE 依次进入 File > Examples > ESP32 > Camera
,选择 CameraWebServer
。
在 board_config.h
注释掉除 XIAO 型号外的所有摄像头定义:
#define CAMERA_MODEL_XIAO_ESP32S3 // Has PSRAM
请确保已启用 PSRAM。

在 CameraWebServer.ino
填写 WiFi 账号密码并上传。
串口监视器显示如下:
WiFi connecting....
WiFi connected
Camera Ready! Use 'http://192.168.5.60' to connect
浏览器访问该地址,选择分辨率(如 QVGA),点击 [START STREAM]
,即可实时查看摄像头画面。点击 [Save]
可保存图片。

至此,可直接在电脑保存图片用于项目开发。
IMU 传感器(LSM6DS3TR-C)测试
惯性测量单元(IMU) 用于测量运动与姿态。XIAOML Kit 配备的 LSM6DS3TR-C 为 6 轴 IMU,集成:
- 3 轴加速度计:测量 X/Y/Z 方向线性加速度(含重力)
- 3 轴陀螺仪:测量 X/Y/Z 方向角速度
技术参数
- 通信:I2C,地址
0x6A
- 加速度范围:±2/±4/±8/±16 g(默认 ±2g)
- 陀螺仪范围:±125/±250/±500/±1000/±2000 dps(默认 ±250 dps)
- 分辨率:16 位 ADC
- 功耗:超低功耗设计
坐标系说明
传感器采用右手坐标系。扩展板底视图如下:

- X 轴:向右
- Y 轴:向前(远离自己)
- Z 轴:向上(垂直于板面)

所需库
上传代码前需安装库:
- 打开 Arduino IDE,点击
管理库
(书本图标
)。 - 搜索 “LSM6DS3",选择 “Seeed Arduino LSM6DS3 by Seeed",点击
安装
或更新
。

⚠️ 注意:不要安装 “Arduino_LSM6DS3 by Arduino”,该库不适用于本开发板!
测试代码
在 Arduino IDE 输入下方代码并上传:
#include <LSM6DS3.h>
#include <Wire.h>
// I2C 模式,地址 0x6A
LSM6DS3 myIMU(I2C_MODE, 0x6A);
float accelX, accelY, accelZ;
float gyroX, gyroY, gyroZ;
void setup() {
Serial.begin(115200);
while (!Serial) { delay(10); }
Serial.println("XIAOML Kit IMU 测试");
Serial.println("LSM6DS3TR-C 6 轴 IMU 传感器");
Serial.println("=============================");
if (myIMU.begin() != 0) {
Serial.println("错误:IMU 初始化失败!");
Serial.println("请检查连接与 I2C 地址");
while(1) { delay(1000); }
} else {
Serial.println("✓ IMU 初始化成功\n");
Serial.println("传感器信息:");
Serial.println("- 加速度范围:±2g");
Serial.println("- 陀螺仪范围:±250 dps");
Serial.println("- 通信:I2C 地址 0x6A\n");
Serial.println("数据格式:");
Serial.println("AccelX,AccelY,AccelZ,GyroX,GyroY,GyroZ");
Serial.println("单位:g(重力加速度),°/s(角速度)\n");
delay(2000);
}
}
void loop() {
accelX = myIMU.readFloatAccelX();
accelY = myIMU.readFloatAccelY();
accelZ = myIMU.readFloatAccelZ();
gyroX = myIMU.readFloatGyroX();
gyroY = myIMU.readFloatGyroY();
gyroZ = myIMU.readFloatGyroZ();
Serial.print("加速度 (g): ");
Serial.print("X="); Serial.print(accelX, 3);
Serial.print(" Y="); Serial.print(accelY, 3);
Serial.print(" Z="); Serial.print(accelZ, 3);
Serial.print(" | 陀螺仪 (°/s): ");
Serial.print("X="); Serial.print(gyroX, 2);
Serial.print(" Y="); Serial.print(gyroY, 2);
Serial.print(" Z="); Serial.print(gyroZ, 2);
Serial.println();
Serial.println(String(accelX) + "," + String(accelY) + "," +
String(accelZ) + "," + String(gyroX) + "," +
String(gyroY) + "," + String(gyroZ));
delay(100);
}
串口监视器可查看数值,绘图器可观察随时间变化。例如沿 y 轴 移动时,第二个值(红线)会变化,z 轴(第三个,绿线)接近 1.0g,x 轴为蓝线。

选择第 4~6 个值可观察陀螺仪变化。
OLED 显示屏(SSD1306)测试
OLED(有机发光二极管)为自发光屏幕,XIAO ML kit 配备 0.42 英寸单色 OLED,适合显示传感器数据、状态信息等。
技术参数
- 尺寸:0.42 英寸
- 分辨率:72 × 40 像素
- 控制器:SSD1306
- 接口:I2C,地址
0x3C
- 颜色:单色
- 可视性:高对比度,强光下清晰
- 功耗:低,无需背光
显示特性
- 像素独立控制:共 2880 像素
- 刷新快:适合动画与实时数据
- 无残影:响应迅速
- 广视角:多角度清晰可见
所需库
上传代码前需安装库:
- 打开 Arduino IDE,点击
管理库
(书本图标
)。 - 搜索 u8g2,选择 U8g2 by oliver,点击
安装
或更新
。
ℹ️ 说明:U8g2 是功能强大的单色图形库,支持多种显示器。

U8g2 主要特性:
- 支持多种控制器(含 SSD1306)
- 多字体文本渲染
- 绘制基本图形(线、矩形、圆等)
- 内存高效,分页渲染
- 支持硬件/软件 I2C
测试代码
在 Arduino IDE 输入下方代码并上传:
#include <U8g2lib.h>
#include <Wire.h>
// SSD1306 控制器,72x40 分辨率,I2C 接口
U8G2_SSD1306_72X40_ER_1_HW_I2C u8g2(U8G2_R2, U8X8_PIN_NONE);
void setup() {
Serial.begin(115200);
Serial.println("XIAOML Kit - Hello World");
Serial.println("==========================");
u8g2.begin();
Serial.println("✓ 显示屏初始化完成");
Serial.println("显示 Hello World 信息...");
u8g2.clearDisplay();
}
void loop() {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(8, 15);
u8g2.print("Hello");
u8g2.setCursor(12, 30);
u8g2.print("World!");
u8g2.drawFrame(2, 2, 68, 36);
} while (u8g2.nextPage());
}
如一切正常,屏幕将显示矩形框内的 “Hello World”。

OLED 文本与坐标
文本通过
setCursor(x, y)
定位,如本例居中:u8g2.setCursor(8, 15);
字体可选:
u8g2_font_4x6_tr
:超小u8g2_font_6x10_tr
:小号u8g2_font_ncenB08_tr
:中号u8g2_font_ncenB14_tr
:大号
图形绘制
- 矩形边框:
drawFrame(x, y, width, height)
- 实心矩形:
drawBox(x, y, width, height)
- 圆形:
drawCircle(x, y, radius)
- 直线:
drawLine(x1, y1, x2, y2)
- 单像素:
drawPixel(x, y)
坐标系
- 原点 (0,0):左上角
- X 轴:左→右(0~71)
- Y 轴:上→下(0~39)
- 文本定位:
setCursor(x, y)
,y 为基线
显示旋转
- 可用:
U8G2_R0
:正常U8G2_R1
:顺时针 90°U8G2_R2
:180°U8G2_R3
:270°
自定义字符
// 绘制自定义位图
static const unsigned char myBitmap[] = {0x00, 0x3c, 0x42, 0x42, 0x3c, 0x00};
u8g2.drawBitmap(x, y, 1, 6, myBitmap);
文本测量
int width = u8g2.getStrWidth("Hello");
int height = u8g2.getAscent();
OLED 显示屏现已可用于显示传感器数据、系统状态或自定义图形,为后续 ML 项目做好准备!
总结
XIAOML Kit 搭载 ESP32S3 Sense,为 TinyML 与嵌入式机器学习提供了强大且易用的入门平台。通过本章配置与测试,已验证所有传感器与外设功能正常。ESP32S3 双核处理器与 8MB PSRAM 足以支持实时 ML 推理,OV2640 摄像头、数字麦克风、LSM6DS3TR-C IMU 及 0.42 英寸 OLED 显示屏构成完整多模态感知平台。WiFi 连接能力为边缘到云端 ML 流程提供了可能,Arduino IDE 开发环境及所需库也已配置完毕。
本章不仅完成了功能测试,还深入理解了各传感器的坐标系、数据格式与操作特性,为后续 ML 数据采集与预处理打下基础。
本套件的实践体验,真实反映了边缘 AI 的资源约束与多模态融合等关键问题,这些原则同样适用于智能手机、IoT 设备、自动驾驶等场景。多模态平台为探索现实世界 AI 应用提供了理想基础。
从原始数据采集、模型推理到 OLED 用户反馈,XIAOML Kit 完整呈现了微型化 ML 部署流程,贴近生产级 AI 系统的实际挑战。
有了这些基础,你已准备好进入后续章节的核心 TinyML 应用:
- 视觉项目:利用摄像头进行图像分类与目标检测
- 音频项目:处理音频流,实现关键词检测与语音识别
- 运动项目:基于 IMU 数据进行活动识别与异常检测
每个应用都将基于本章的硬件理解与软件环境,展示 AI 如何在资源受限设备中落地。
本套件涉及的实时处理、传感器融合与边缘推理等原则,正是自动驾驶、智慧城市、医疗设备、工业自动化等领域 AI 部署的核心。完成本章配置后,你已具备探索嵌入式机器学习前沿的能力。
资源
- XIAOML Kit 代码
- XIAO ESP32S3 Sense 手册与示例代码
- Seeed Studio XIAO ESP32S3 麦克风用法
- XIAO ESP32S3 Sense 文件系统
- Seeed Studio XIAO ESP32S3 Sense 摄像头用法
散热片注意事项
如需在无扩展板情况下使用摄像头,可安装散热片。
注意:安装散热片后无法连接扩展板。

散热片安装方法
为确保 XIAO ESP32S3 Sense 散热,摄像头应用时建议安装散热片,尤其在高负载场景。
套件含两片散热片,建议仅用一片以便电池引脚可用。
安装步骤:
- 断电并拔掉设备电源。
- 优先覆盖 ESP32S3 芯片上的 Thermal PAD,确保散热片对齐且不遮挡 BAT 引脚。
具体步骤:
步骤 1. 准备散热片: 撕下保护膜,露出导热胶面。
步骤 2. 安装散热片:

安装后确保无短路风险,散热片对齐牢固。
如需更强散热,可安装第二片,但此时所有引脚将不可用。
⚠️ 注意
再次使用 IMU 扩展板前,请小心拆除散热片。