配置与准备

概述

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 扩展板,请勿安装散热片(或小心拆除)。详见附录说明。

图 1: XIAOML Kit 全家福
图 1: XIAOML Kit 全家福

XIAO ESP32S3 Sense 主板特性

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

图 2: XIAO ESP32S3 Sense 主板
图 2: XIAO ESP32S3 Sense 主板

主要特性

  • 高性能 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 尺寸,适合空间受限项目
图 3: XIAO ESP32S3 Sense 引脚图
图 3: XIAO ESP32S3 Sense 引脚图

下图为主板引脚分布:

图 4: XIAO ESP32S3 Sense 引脚分布
图 4: XIAO ESP32S3 Sense 引脚分布

更多详情请参考 Seeed Studio Wiki

扩展板特性

扩展板为 XIAOML Kit 增强了运动感知与机器学习能力:

图 5: 扩展板多视图
图 5: 扩展板多视图

主要组件:

  • 6 轴 IMU(LSM6DS3TR-C):

    • 3 轴加速度计 + 3 轴陀螺仪,支持运动检测与分类
      • 加速度范围:±2/±4/±8/±16 g
      • 陀螺仪范围:±125/±250/±500/±1000/±2000 dps
      • I2C 地址:0x6A
  • 0.42 英寸 OLED 显示屏

    • 单色(72×40 分辨率),实时数据显示
      • 控制器:SSD1306
      • I2C 地址:0x3C
  • 复位按钮(EN)

  • 电池接口(BAT+,BAT-)

套件组装

扩展板与 XIAO ESP32S3 Sense 无缝连接,构建了集视觉、音频、运动感知于一体的多模态机器学习平台。

图 6: 套件组装效果
图 6: 套件组装效果

请注意模块安装方向:

图 7: 模块安装方向
图 7: 模块安装方向

说明:

  • ESP32S3 Sense 底部的 EN 引脚可通过扩展板上的 RST 按钮访问。
  • BAT+BAT- 也通过扩展板上的白色 BAT3.7V 接口提供。

XIAOML Kit 应用场景:

  • 视觉:集成摄像头实现图像分类与目标检测
  • 音频:内置麦克风支持关键词检测与语音识别
  • 运动:IMU 传感器实现活动识别与异常检测
  • 多模态:多传感器融合,支持复杂 ML 应用

在 Arduino IDE 上安装 XIAO ESP32S3 Sense

  1. 通过 USB-C 线将 XIAOML Kit 连接至电脑。

    图 8: USB 连接示意
    图 8: USB 连接示意
  2. 根据操作系统下载并安装 Arduino IDE 稳定版。

    [下载 Arduino IDE]

  3. 打开 Arduino IDE,点击板卡管理器(UNO 图标)。

  4. 搜索 “ESP32",选择 “esp32 by Espressif Systems",点击 安装更新

不要选择 “Arduino ESP32 Boards by Arduino",该包仅适用于 Arduino Nano ESP32。

图 9: 板卡管理器选择
图 9: 板卡管理器选择
> ⚠️ **注意**
>
> 3.x 版本在与 Edge Impulse 部署代码配合时可能有兼容性问题,建议使用 2.0.x 稳定版(如 2.0.17)。
  1. 点击 选择开发板,输入 xiaoesp32s3,在板卡管理器中选择 XIAO_ESP32S3,并选择对应的端口。

    图 10: 选择开发板与端口
    图 10: 选择开发板与端口

至此,设备已准备就绪。接下来进行测试。

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 灭。

图 11: BLINK 效果图
图 11: BLINK 效果图

麦克风测试

首先进行声音检测。可直接输入下方代码,或参考 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);
  }
}

打开 串口绘图器,即可看到声音变化曲线。

图 12: 声音测试曲线
图 12: 声音测试曲线

发声时可在串口绘图器中观察到变化。

录音并保存为 .wav 文件到 microSD 卡

使用板载 SD 卡可保存 .wav 音频。需先启用 XIAO PSRAM。

ESP32-S3 芯片内置 RAM 容量有限,XIAO 板载 8 MB PSRAM,可通过 SPI 与主控通信,需在菜单 Tools->PSRAM:"OPI PSRAM"->OPI PSRAM 启用。

图 13: PSRAM 设置
图 13: PSRAM 设置

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

插入 FAT32 格式 SD 卡:

图 14: SD 卡插入示意
图 14: 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 卡。
  • 串口每秒输出 “.",表示录音完成,可用读卡器播放。
图 15: 录音完成界面
图 15: 录音完成界面

音质优秀!

代码原理详见 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 简化版工具。

操作步骤:

图 16: SenseCraft AI 登录界面
图 16: SenseCraft AI 登录界面
  • 连接 XIAOML Kit,选择设备:
图 17: 选择设备
图 17: 选择设备

注:WebUSB 工具在 Safari 等浏览器可能无法正常工作,建议用 Chrome。确保 Arduino IDE 或其他串口工具未占用设备。

上传模型后即可看到摄像头画面。可选择 Seeed Studio 预置的多种视觉模型,点击 [Select Model] 按钮选择。

图 18: 选择 AI 模型
图 18: 选择 AI 模型

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

图 19: 模型信息展示
图 19: 模型信息展示

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

图 20: 确认模型选择
图 20: 确认模型选择

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

图 21: 摄像头预览
图 21: 摄像头预览

后续视觉 AI 实验将详细介绍 SenseCraft AI Studio。

WiFi 测试

天线安装

XIAOML Kit 出厂已组装。首先拆下扩展板(含摄像头、麦克风、SD 卡槽)。

XIAO ESP32S3 正面左下有 “WiFi/BT 天线接口”。为提升信号,将天线插入接口。

安装技巧:先插入一侧,再轻压另一侧,避免用力过猛导致手指受伤。拆卸时同理,先撬起一侧。

图 22: 天线安装示意
图 22: 天线安装示意

扩展板重新安装只需对齐 B2B 连接器,按压听到“咔哒”声即完成。

XIAO ESP32S3 支持 WiFi。可通过示例代码扫描周围 WiFi 网络。

在 Arduino IDE 选择开发板和端口,打开 Examples -> WiFI -> WiFIScan,上传至开发板。

串口监视器可看到扫描到的 WiFi SSID 和信号强度:

图 23: WiFi 扫描结果
图 23: WiFi 扫描结果

简易 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>");
    

串口监视器可查看服务器运行状态。

图 24: WiFi 服务器串口输出
图 24: WiFi 服务器串口输出

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

图 25: 网页控制 LED
图 25: 网页控制 LED

使用 CameraWebServer

在 Arduino IDE 依次进入 File > Examples > ESP32 > Camera,选择 CameraWebServer

board_config.h 注释掉除 XIAO 型号外的所有摄像头定义:

#define CAMERA_MODEL_XIAO_ESP32S3 // Has PSRAM

请确保已启用 PSRAM。

图 26: CameraWebServer 配置
图 26: CameraWebServer 配置

CameraWebServer.ino 填写 WiFi 账号密码并上传。

串口监视器显示如下:

WiFi connecting....
WiFi connected
Camera Ready! Use 'http://192.168.5.60' to connect

浏览器访问该地址,选择分辨率(如 QVGA),点击 [START STREAM],即可实时查看摄像头画面。点击 [Save] 可保存图片。

图 27: CameraWebServer 页面
图 27: CameraWebServer 页面

至此,可直接在电脑保存图片用于项目开发。

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
  • 功耗:超低功耗设计

坐标系说明

传感器采用右手坐标系。扩展板底视图如下:

图 28: IMU 坐标系标记
图 28: IMU 坐标系标记
  • X 轴:向右
  • Y 轴:向前(远离自己)
  • Z 轴:向上(垂直于板面)
图 29: IMU 坐标方向
图 29: IMU 坐标方向

所需库

上传代码前需安装库:

  1. 打开 Arduino IDE,点击 管理库书本图标)。
  2. 搜索 “LSM6DS3",选择 “Seeed Arduino LSM6DS3 by Seeed",点击 安装更新
图 30: IMU 库安装
图 30: IMU 库安装

⚠️ 注意:不要安装 “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 轴为蓝线。

图 31: IMU 数据绘图
图 31: IMU 数据绘图

选择第 4~6 个值可观察陀螺仪变化。

OLED 显示屏(SSD1306)测试

OLED(有机发光二极管)为自发光屏幕,XIAO ML kit 配备 0.42 英寸单色 OLED,适合显示传感器数据、状态信息等。

技术参数

  • 尺寸:0.42 英寸
  • 分辨率:72 × 40 像素
  • 控制器:SSD1306
  • 接口:I2C,地址 0x3C
  • 颜色:单色
  • 可视性:高对比度,强光下清晰
  • 功耗:低,无需背光

显示特性

  • 像素独立控制:共 2880 像素
  • 刷新快:适合动画与实时数据
  • 无残影:响应迅速
  • 广视角:多角度清晰可见

所需库

上传代码前需安装库:

  1. 打开 Arduino IDE,点击 管理库书本图标)。
  2. 搜索 u8g2,选择 U8g2 by oliver,点击 安装更新

ℹ️ 说明:U8g2 是功能强大的单色图形库,支持多种显示器。

图 32: OLED 库安装
图 32: OLED 库安装

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”。

图 33: OLED 显示效果
图 33: OLED 显示效果

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 部署的核心。完成本章配置后,你已具备探索嵌入式机器学习前沿的能力。

资源

散热片注意事项

如需在无扩展板情况下使用摄像头,可安装散热片。

注意:安装散热片后无法连接扩展板。

图 34: 散热片安装效果
图 34: 散热片安装效果

散热片安装方法

为确保 XIAO ESP32S3 Sense 散热,摄像头应用时建议安装散热片,尤其在高负载场景。

套件含两片散热片,建议仅用一片以便电池引脚可用。

安装步骤:

  • 断电并拔掉设备电源。
  • 优先覆盖 ESP32S3 芯片上的 Thermal PAD,确保散热片对齐且不遮挡 BAT 引脚。

具体步骤:

步骤 1. 准备散热片: 撕下保护膜,露出导热胶面。

步骤 2. 安装散热片:

图 35: 散热片组装示意
图 35: 散热片组装示意

安装后确保无短路风险,散热片对齐牢固。

如需更强散热,可安装第二片,但此时所有引脚将不可用。

⚠️ 注意

再次使用 IMU 扩展板前,请小心拆除散热片。

文章导航

章节内容

这是章节的内容页面。

章节概览

评论区