Skip to main content

Seeed Studio XIAO ESP32C3 入门指南


介绍

Seeed Studio XIAO ESP32C3 是一款基于 Espressif 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 在内的多种串行接口。板上还集成了一个小型复位按钮和一个引导模式按钮。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 子系统
Bluetooth Low Energy 5.0 / Bluetooth Mesh
片上存储400KB SRAM & 4MB Flash
接口1x UART
1x IIC
1x SPI
11x GPIO(PWM)
4x ADC
1x Reset 按钮
1x Boot 按钮
尺寸21 x 17.8mm
功耗(典型)最大 3.3V 输出电流:500mA
测试条件:BAT 引脚输入 @ 3.8V
供电能力:3A
充电电流:380mA(快速)/ 40mA(涓流)
输入电压 (VIN):5V
输入电压 (BAT):3.7V
深度睡眠功耗深度睡眠模式:44 μA
启用 Wi-Fi 时的功耗工作模式: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电源输出
D0模拟GPIO2ADC1_CH2,GPIO,ADC
D1模拟GPIO3ADC1_CH3GPIO,ADC
D2模拟GPIO4ADC1_CH4, FSPIHD, MTMSGPIO,ADC
D3模拟GPIO5ADC2_CH0, FSPIWP, MTDIGPIO,ADC
D4SDAGPIO6FSPICLK, MTCKGPIO,I2C 数据
D5SCLGPIO7FSPID, MTDOGPIO,I2C 时钟
D6TXGPIO21U0TXDGPIO,UART 发送
D7RXGPIO20U0RXDGPIO,UART 接收
D8SCKGPIO8GPIO,SPI 时钟
D9MISOGPIO9GPIO,SPI 数据
D10MOSIGPIO10FSPICS0GPIO,SPI 数据
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 - 电源/数据/信号地

启动配置引脚(Strapping Pins)

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

入门指南

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

硬件准备

你需要准备以下物品:

tip

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

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

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

软件准备

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

  • 步骤 2. 启动 Arduino 应用程序

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

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

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

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

开发板

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

端口

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

  • 步骤 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
}
  • 步骤 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 模式

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

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

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

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

  • 步骤 1. 按住 BOOT BUTTON 并将 XIAO ESP32C3 连接到电脑以进入 bootloader 模式

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

  • 步骤 3. 访问此页面并下载 ESP RF Test Tool and Test Guide

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

你将看到如下输出

  • 步骤 6. 选择 Flash 并点击 Select Bin

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

MicroPython GitHub 仓库

资源

硬件设计

机械结构

软件与工具

其他

课程资源

技术支持与产品讨论

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

Loading Comments...