

| XIAO 引脚 | 功能 | 芯片引脚 | 复用功能 | 描述 |
|---|---|---|---|---|
| 5V | VBUS | 电源输入/输出 | ||
| GND | ||||
| 3V3 | 3V3_OUT | 电源输出 | ||
| D0 | 模拟 | GPIO1 | LP_UART_DSRN, LP_GPIO1 | GPIO,ADC |
| D1 | GPIO0 | LP_UART_DTRN, LP_GPIO0 | GPIO | |
| D2 | GPIO25 | GPIO | ||
| D3 | GPIO7 | SDIO_DATA1 | GPIO | |
| D4 | SDA | GPIO23 | GPIO,I2C 数据 | |
| D5 | SCL | GPIO24 | GPIO,I2C 时钟 | |
| D6 | TX | GPIO11 | GPIO,UART 发送 | |
| D7 | RX | GPIO12 | GPIO,UART 接收 | |
| D8 | SCK | GPIO8 | GPIO,SPI 时钟 | |
| D9 | MISO | GPIO9 | GPIO,SPI 数据 | |
| D10 | MOSI | GPIO10 | GPIO,SPI 数据 | |
| MTDO | GPIO5 | LP_UART_TXD, LP_GPIO5 | JTAG | |
| MTDI | GPIO3 | LP_I2C_SCL, LP_GPIO3 | JTAG,ADC | |
| MTCK | GPIO4 | LP_UART_RXD, LP_GPIO4 | JTAG,ADC | |
| MTMS | GPIO2 | LP_I2C_SDA, LP_GPIO2 | JTAG,ADC | |
| ADC_BAT | GPIO6 | 读取电池电压值 | ||
| ADC_CRL | GPIO26 | 控制(启用/禁用)测量电路以节省电能。 | ||
| Reset | CHIP_EN | EN | ||
| Boot | GPIO28 | 进入 Boot 模式 | ||
| U.FL-R-SMT1 | LNA_IN | UFL 天线 | ||
| CHARGE_LED | VCC_3V3 | CHG-LED_红色 | ||
| USER_LED | GPIO27 | 用户指示灯_黄色 |
为了让你更快地开始使用 XIAO ESP32-C5,请先阅读下面的硬件和软件准备内容,对 XIAO 进行准备。
你需要准备以下物品:
有些 USB 线缆只能供电,不能传输数据。如果你没有 USB 线缆,或者不确定你的 USB 线缆是否可以传输数据,可以查看 Seeed USB Type-C support USB 3.1。
XIAO ESP32-C5 推荐使用 Arduino IDE 作为编程工具,因此在软件准备部分,你需要完成 Arduino 的安装。
如果这是你第一次使用 Arduino,我们强烈建议你参考Arduino 入门指南。
步骤 1. 根据你的操作系统下载并安装稳定版本的 Arduino IDE。
步骤 2. 启动 Arduino 应用程序。
步骤 3. 打开 BOARDS MANAGER -> 搜索 esp32 -> 安装 3.3.5 或更高版本

下面以一个点亮灯光的程序为例。
步骤 1. 选择 XIAO_ESP32C5 和 PORT。如果你不知道 PORT,可以重新插拔 XIAO_ESP3-2C5 来查看。

步骤 2. 在你的 Sketch 中粘贴代码
LED_BUILTIN 对应开发板上的 L 指示灯。
void setup() {
// put your setup code here, to run once:
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED_BUILTIN, LOW);
Serial.print("LED ON \n");
delay(1000);
digitalWrite(LED_BUILTIN, HIGH);
Serial.print("LED OFF \n");
delay(1000);
}
步骤 3. 点击并上传

效果演示:
上传程序后,你会看到 L 指示灯以 1 秒的间隔闪烁,同时串口监视器会打印 LED ON 和 LED OFF。


XIAO ESP32-C5 具有深度睡眠和唤醒功能。本示例使用引脚 D0 的高电平触发来将设备从深度睡眠中唤醒。
需要注意的是,这是一个可配置选项,因为硬件同时支持高电平和低电平触发,以适配不同的电路设计。
#define WAKEUP_PIN D0 // LP_GPIO1
RTC_DATA_ATTR int bootCount = 0;
void print_wakeup_reason(){
esp_sleep_wakeup_cause_t wakeup_reason = esp_sleep_get_wakeup_cause();
switch(wakeup_reason)
{
case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
case ESP_SLEEP_WAKEUP_GPIO : Serial.println("Wakeup caused by GPIO"); break;
default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
}
}
void setup(){
Serial.begin(115200);
delay(1000);
++bootCount;
Serial.println("Boot number: " + String(bootCount));
print_wakeup_reason();
pinMode(WAKEUP_PIN, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
uint64_t mask = 1ULL << WAKEUP_PIN;
esp_deep_sleep_enable_gpio_wakeup(mask, ESP_GPIO_WAKEUP_GPIO_HIGH);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
delay(2000); //Delay time depends on the serial port / Give the PC time to stabilize
Serial.println("Going to sleep now");
esp_deep_sleep_start();
}
void loop(){}
如果你足够快地在 XIAO 进入深度睡眠之前打开串口监视器,那么你可以看到如下所示的消息输出。这意味着 XIAO 现在已经进入睡眠。然后你也可以通过按下按键来查看并唤醒它。你还可以通过观察 L 指示灯 的亮灭状态来检查设备是否被唤醒。一旦被唤醒,它会呈现闪烁效果。

进入深度睡眠模式后,XIAO 的端口会消失,你需要将其唤醒后才能再次看到端口号!
XIAO ESP32-C5 支持 GPIO 唤醒和定时器唤醒。为防止在低功耗开发过程中丧失硬件调试能力以及增加固件烧录难度,强烈建议将 JTAG(MTMS、MTDI、MTCK、MTDO)引脚预留为专用用途,不要将其用作深度睡眠模式的唤醒源。
XIAO ESP32-C5 可以使用 3.7V 锂电池作为电源输入。你可以参考下图进行接线。

焊接时请注意不要将正负极短路,以免烧毁电池和设备。
电池使用说明:
XIAO ESP32-C5 搭载了 SGM40567 电池充电芯片和 TPS22916CYFPR 电池电压采集芯片。你可以使能 BAT_VOLT_PIN_EN 来激活电池电压采集功能,并通过 BAT_VOLT_PIN 读取电池电压。
在 XIAO ESP32C5 上,BAT_VOLT_PIN 对应的引脚为 GPIO6,BAT_VOLT_PIN_EN 对应的引脚为 GPIO26。
#include <Arduino.h>
void setup() {
Serial.begin(115200);
pinMode(BAT_VOLT_PIN, INPUT); // Configure A0 as ADC input
pinMode(BAT_VOLT_PIN_EN , OUTPUT);
digitalWrite(BAT_VOLT_PIN_EN , HIGH);
}
void loop() {
uint32_t Vbatt = 0;
for(int i = 0; i < 16; i++) {
Vbatt += analogReadMilliVolts(BAT_VOLT_PIN ); // Read and accumulate ADC voltage
}
float Vbattf = 2 * Vbatt / 16 / 1000.0; // Adjust for 1:2 divider and convert to volts
Serial.println(Vbattf, 3); // Output voltage to 3 decimal places
delay(1000); // Wait for 1 second
}
analogReadMilliVolts(BAT_Voltage_Read)
BAT_VOLT_PIN 引脚读取当前模拟电压,并返回以毫伏(mV)为单位的校准电压值。analogRead() 只提供原始 ADC 数值不同,analogReadMilliVolts() 会自动应用芯片中内置的出厂校准参数。这带来了更高的精度、更好的电压测量线性度,并且无需手动进行 ADC 到电压的换算。for 循环进行16 次重复采样并对结果进行累加。多次采样的目的是抑制瞬时噪声和离散误差,从而提高测量稳定性。最后将累加值除以采样次数(16),以获得更平滑、更可靠的平均电压值。
根据数据手册,ESP32-C5 的有效测量范围为 0~3300 mV。因此,XIAO ESP32-C5 内置的电池电压采集电路采用两个 100K 电阻进行分压设计,从而实现对电压值的精确读取。
硬件设计
机械设计