Skip to main content

Seeed Studio XIAO ESP32C3 入门指南


介绍

Seeed Studio XIAO ESP32C3 是一款基于乐鑫 ESP32-C3 WiFi/Bluetooth 双模芯片的物联网迷你开发板,采用 32 位 RISC-V CPU,凭借高效架构提供强大的计算性能。它具备出色的射频性能,支持 IEEE 802.11 b/g/n WiFiBluetooth 5 (BLE) 协议。该开发板配备了外置天线,可增强无线应用的信号强度。同时,它具有小巧精致的外形尺寸以及单面贴片封装设计。板载丰富的接口,拥有 11 路数字 I/O(可用作 PWM 引脚)以及 4 路模拟 I/O(可用作 ADC 引脚)。它支持 UART、I2C 和 SPI 等多种串行接口。板上还集成了一个小型 复位按钮 和一个 Bootloader 模式按钮。XIAO ESP32C3 与 Grove Shield for Seeeduino XIAOSeeeduino XIAO Expansion board 完全兼容,但对于 Seeeduino XIAO Expansion board,板上的 SWD 弹簧触点将不兼容。

基于以上特性,XIAO ESP32C3 被定位为一款高性能、低功耗、具性价比的物联网迷你开发板,适用于低功耗物联网应用和无线可穿戴应用

本 Wiki 将向你展示如何快速上手 XIAO ESP32C3!

规格参数

参数描述
处理器ESP32-C3 SoC
RISC-V 单核 32 位芯片处理器,采用四级流水线,最高运行频率可达 160 MHz
无线完整的 2.4GHz Wi-Fi 子系统
蓝牙低功耗 5.0/ 蓝牙 Mesh
片上存储400KB SRAM & 4MB Flash
接口1x UART
1x IIC
1x SPI
11x GPIO(PWM)
4x ADC
1x Reset button
1x Boot button
尺寸21 x 17.8mm
功耗(典型)最大 3.3V 输出电流:500mA
测试条件:BAT 引脚输入 @ 3.8V
供电能力:3A
充电电流:380mA(快速)/ 40mA(涓流)
输入电压 (VIN):5V
输入电压 (BAT):3.7V
深度睡眠功耗深度睡眠模式:44 μA
Wi-Fi 使能时功耗Active 模式:75 mA
Modem-sleep 模式:25 mA
Light-sleep 模式:4 mA
BLE 使能时功耗Modem-sleep 模式:27 mA
Light-sleep 模式:10 mA
工作温度-40°C ~ 85°C

特性

  • 强大的 CPU: ESP32-C3,32 位 RISC-V 单核处理器,最高运行频率可达 160 MHz
  • 完整的 Wi-Fi 子系统: 符合 IEEE 802.11b/g/n 协议,支持 Station 模式、SoftAP 模式、SoftAP + Station 模式以及混杂模式
  • Bluetooth LE 子系统: 支持 Bluetooth 5 和 Bluetooth mesh 功能
  • 超低功耗: 深度睡眠功耗约为 43μA
  • 更佳的射频性能: 配备外置射频天线
  • 电池充电芯片: 支持锂电池充放电管理
  • 丰富的片上资源: 400KB SRAM 和 4MB 板载 Flash 存储
  • 超小尺寸: 小如拇指(21x17.8mm),XIAO 系列经典外形,适用于可穿戴设备和小型项目
  • 可靠的安全特性: 支持 AES-128/256、Hash、RSA、HMAC、数字签名和安全启动的加密硬件加速器
  • 丰富的接口: 1xI2C、1xSPI、2xUART、11xGPIO(PWM)、4xADC、1xJTAG 焊盘接口
  • 单面元件、表面贴装设计

硬件概览

*A3(GP105) - 使用 ADC2,可能会因错误采样信号而失效。为了获得可靠的模拟读取,请改用 ADC1(A0/A1/A2)。请参考 ESP32-C3 数据手册。

XIAO ESP32C3 正面标注示意图
XIAO ESP32C3 背面标注示意图
XIAO ESP32C3 引脚列表

引脚映射

XIAO 引脚功能芯片引脚复用功能描述
5VVBUS电源输入/输出
GND
3V33V3_OUT电源输出
D0AnalogGPIO2ADC1_CH2,GPIO, ADC
D1AnalogGPIO3ADC1_CH3GPIO, ADC
D2AnalogGPIO4ADC1_CH4, FSPIHD, MTMSGPIO, ADC
D3AnalogGPIO5ADC2_CH0, FSPIWP, MTDIGPIO, ADC
D4SDAGPIO6FSPICLK, MTCKGPIO, I2C Data
D5SCLGPIO7FSPID, MTDOGPIO, I2C Clock
D6TXGPIO21U0TXDGPIO, UART Transmit
D7RXGPIO20U0RXDGPIO, UART Receive
D8SCKGPIO8GPIO, SPI Clock
D9MISOGPIO9GPIO, SPI Data
D10MOSIGPIO10FSPICS0GPIO, SPI Data
MTDOGPIO7JTAG
MTDIGPIO5JTAG, ADC
MTCKGPIO6JTAG, ADC
MTMSGPIO4JTAG, ADC
ResetCHIP_ENEN
BootGPIO9进入 Boot 模式
U.FL-R-SMT1LNA_INUFL 天线
LightVCC_3V3CHG-LED

电源引脚

  • 5V - 这是来自 USB 接口的 5V 输出。你也可以将其用作电压输入,但必须在你的外部电源和该引脚之间串联某种二极管(肖特基、信号、功率),二极管的阳极接电池,阴极接 5V 引脚。
  • 3V3 - 这是板载稳压器的稳压输出。你可以从这里汲取 700mA 电流
  • GND - 电源/数据/信号地

启动配置引脚

根据 ESP32C3 芯片手册,芯片中的 GPIO2GPIO8GPIO9 是启动配置引脚,这些引脚的高低电平配置可能会让芯片进入不同的启动模式,在使用这些引脚时请特别注意这一点,否则可能会导致你的 XIAO 一直无法上传或执行程序。

入门指南

首先,我们将 XIAO ESP32C3 连接到电脑,连接一个 LED 到开发板,并从 Arduino IDE 上传一个简单的代码,通过让连接的 LED 闪烁来检查开发板是否工作正常。

硬件准备

你需要准备以下物品:

tip

有些 USB 线缆只能供电,不能传输数据。如果你没有 USB 线缆,或者不知道你的 USB 线缆是否可以传输数据,你可以查看 Seeed USB Type-C support USB 3.1

  • Step 1. 通过 USB Type-C 线缆将 XIAO ESP32C3 连接到电脑。
  • Step 2. 按如下方式将一个 LED 连接到 D10 引脚

注意: 请确保串联一个电阻(约 150Ω)来限制流过 LED 的电流,以防止过大的电流烧毁 LED

软件准备

  • Step 1. 根据你的操作系统下载并安装最新版本的 Arduino IDE

  • Step 2. 启动 Arduino 应用程序

  • Step 3. 在 Arduino IDE 中添加 ESP32 开发板包

依次进入 File > Preferences,并在 "Additional Boards Manager URLs" 中填入以下链接: https://jihulab.com/esp-mirror/espressif/arduino-esp32.git

依次进入 Tools > Board > Boards Manager...,在搜索框中输入关键字 "esp32",选择最新版本的 esp32 并安装。

  • Step 4. 选择你的开发板和端口

开发板

依次进入 Tools > Board > ESP32 Arduino 并选择 "XIAO_ESP32C3"。开发板列表有点长,你需要滚动到最底部才能找到它。

端口

依次进入 Tools > Port 并选择已连接 XIAO ESP32C3 的串口名称。它很可能是 COM3 或更高(COM1COM2 通常保留给硬件串口)。

  • Step 1. 将下面的代码复制到 Arduino IDE 中

确保你的 D10 已按上图所示连接到一个 LED。


// define led according to pin diagram in article
const int led = D10; // there is no LED_BUILTIN available for the XIAO ESP32C3.

void setup() {
// initialize digital pin led as an output
pinMode(led, OUTPUT);
}

void loop() {
digitalWrite(led, HIGH); // turn the LED on
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off
delay(1000); // wait for a second
}
  • Step 2. 点击 Upload 按钮将代码上传到开发板

上传完成后,你会看到连接的 LED 以 1 秒的间隔闪烁一次。这意味着连接成功,现在你可以使用 XIAO ESP32C3 探索更多项目了!

电池使用

XIAO ESP32C3 支持使用 3.7V 锂电池作为电源输入。你可以参考下图了解接线方式。

pir
caution

焊接时请注意不要将正负极短路,以免烧毁电池和设备。

电池使用说明:

  1. 请使用符合规格的合格电池。
  2. 使用电池时,XIAO 仍可以通过数据线连接到你的电脑设备,请放心,XIAO 内置电路保护芯片,是安全的。
  3. 当使用电池供电时,XIAO ESP32C3 不会有任何 LED 亮起(除非你编写了特定程序),请不要通过 LED 的状态来判断 XIAO ESP32C3 是否在工作,而应根据你的程序进行合理判断。
  4. 很抱歉,目前我们无法通过软件帮助你检查电池剩余电量(因为没有多余的芯片引脚可用),你需要定期给电池充电或使用万用表检测电池电量。

检测电池电压

由于 ESP32C3 的引脚数量限制,为了确保 XIAO ESP32C3 拥有与其他 XIAO 系列相同数量的 GPIO,引脚,工程师们没有多余的引脚分配给电池用于电压测量。

但如果你更希望使用单独的引脚来测量电池电压,你可以参考 msfujino 的巧妙做法。我们也在此特别感谢 msfujino 为 XIAO ESP32C3 分享的所有经验和付出。

其基本操作思路是:使用 200k 电阻将电池电压分压为 1/2 并连接到 A0 端口,从而可以监测电压。

pir

数据手册中标称满量程 AD 转换电压为 2500mV,但不同芯片之间差异较大,实际为 ±10%。我的芯片满量程为 2700mV。

幸运的是,每颗芯片的校准修正值都写在熔丝区域,通过使用 analogReadMilliVolts() 函数,我无需做任何特殊处理就可以读取到修正后的电压值。

AD 转换结果与万用表测得的电压非常一致,误差约为 5mV,在实际使用中没有问题。

另外,尤其在通信过程中,会出现尖峰状误差,需要进行 16 次平均才能将其消除。

下面是用于测试电池电压的程序。

void setup() {
Serial.begin(115200);
pinMode(A0, INPUT); // ADC
}

void loop() {
uint32_t Vbatt = 0;
for(int i = 0; i < 16; i++) {
Vbatt = Vbatt + analogReadMilliVolts(A0); // ADC with correction
}
float Vbattf = 2 * Vbatt / 16 / 1000.0; // attenuation ratio 1/2, mV --> V
Serial.println(Vbattf, 3);
delay(1000);
}
tip

以上内容来自 Seeed Studio 论坛用户 msfujino,原帖地址: https://forum.seeedstudio.com/t/battery-voltage-monitor-and-ad-conversion-for-xiao-esp32c/267535. 我们建议你在根据上述方法尝试测量电池电压之前,具备良好的动手能力和较好的焊接技术,并对电池短路等危险操作保持警惕。

深度睡眠模式与唤醒

XIAO ESP32C3 支持深度睡眠模式和唤醒功能。对于这两个功能的使用,我们提供如下使用示例。

#define BUTTON_PIN_BITMASK 0x200000000 // 2^33 in hex

RTC_DATA_ATTR int bootCount = 0;

/*
Method to print the reason by which ESP32
has been awaken from sleep
*/
void print_wakeup_reason(){
esp_sleep_wakeup_cause_t wakeup_reason;

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;
default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
}
}

void setup(){
Serial.begin(115200);
delay(1000); //Take some time to open up the Serial Monitor

//Increment boot number and print it every reboot
++bootCount;
Serial.println("Boot number: " + String(bootCount));

//Print the wakeup reason for ESP32
print_wakeup_reason();

esp_deep_sleep_enable_gpio_wakeup(BIT(D1), ESP_GPIO_WAKEUP_GPIO_LOW);

//Go to sleep now
Serial.println("Going to sleep now");
esp_deep_sleep_start();
Serial.println("This will never be printed");
}

void loop(){
//This is not going to be called
}

如果你足够快地在 XIAO 进入深度睡眠之前打开串口监视器,那么你可以看到如下所示的消息输出。这意味着 XIAO 现在已经“睡着”了。

tip

进入深度睡眠模式后,XIAO 的端口会消失,你需要将它唤醒才能再次看到端口号!

在程序中,我们使用 D1 低电平来唤醒。这意味着我们可以将一个按钮连接到 D1 引脚,当我们按下按钮时,XIAO 就会被唤醒。

caution

XIAO ESP32-C3 支持 GPIO 唤醒和定时器唤醒,支持唤醒的引脚为 D0~D3。

故障排查

Q1: 我在向开发板上传代码时,Arduino IDE 卡住了

你可以先尝试在开发板连接到电脑时,单击一次 RESET BUTTON 来重置开发板。如果这不起作用,请按住 BOOT BUTTON,在按住 BOOT 按钮的同时将开发板连接到电脑,然后松开按钮以进入 bootloader mode

Q2: 我的开发板没有在 Arduino IDE 中显示为串行设备

请参考上面 Q1 的相同答案。

Q3: 我想使用出厂固件重新烧录 bootloader

你只需通过 USB Type-C 将开发板连接到电脑,并使用 ESP RF Test Tool 重新烧录带有出厂固件的 bootloader 即可。

  • Step 1. 按住 BOOT BUTTON 并将 XIAO ESP32C3 连接到电脑以进入 bootloader mode

  • Step 2. 连接完成后,松开 BOOT BUTTON

  • Step 3. 访问 this page 并下载 ESP RF Test Tool and Test Guide

  • Step 4. 解压 .zip,进入 ESP_RF_Test_EN\ESP_RF_Test_EN\EspRFTestTool_v2.8_Manual 并打开 EspRFTestTool_v2.8_Manual.exe
  • Step 5. 选择 ESP32C3 作为 ChipType,选择你的 COM 端口,将 BaudRate 设为 115200,然后点击 open

你会看到如下输出

  • Step 6. 选择 Flash 并点击 Select Bin

当烧录成功时,你会看到如下输出

MicroPython GitHub 仓库

资源

硬件设计

机械结构

软件与工具

其他

课程资源

技术支持与产品讨论

感谢你选择我们的产品!我们为你提供多种支持方式,以确保你在使用我们产品的过程中尽可能顺利。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...