Skip to main content

Seeed Studio XIAO ESP32C3 を使い始める


はじめに

Seeed Studio XIAO ESP32C3 は、Espressif の ESP32-C3 WiFi/Bluetooth デュアルモードチップをベースとした IoT 向けミニ開発ボードで、効率的なアーキテクチャを備えた 32-bit RISC-V CPU により高い演算性能を発揮します。IEEE 802.11 b/g/n WiFi および Bluetooth 5 (BLE) プロトコルをサポートし、優れた高周波特性を備えています。また、ワイヤレスアプリケーションの信号強度を高めるための外部アンテナが付属しています。さらに、小型で精巧なフォームファクタ片面実装可能なデザイン を兼ね備えています。豊富なインターフェースを備え、11 本のデジタル I/OPWM ピン として、4 本のアナログ I/OADC ピン として使用できます。UART、I2C、SPI など 4 種類のシリアルインターフェースをサポートします。基板上には小型の リセットボタンブートローダーモードボタン も搭載されています。XIAO ESP32C3 は Grove Shield for Seeeduino XIAO および Seeeduino XIAO Expansion board と完全な互換性がありますが、Seeeduino XIAO Expansion board については、基板上の SWD スプリングコンタクトは互換性がありません。

上記の特長から、XIAO ESP32C3 は 高性能・低消費電力・高コストパフォーマンスな IoT ミニ開発ボード として位置付けられており、低消費電力 IoT アプリケーションやワイヤレスウェアラブルアプリケーション に適しています。

この wiki では、XIAO ESP32C3 をすばやく使い始める方法を紹介します。

仕様

パラメータ説明
プロセッサESP32-C3 SoC
最大 160 MHz で動作する、4 ステージパイプラインを備えた RISC-V シングルコア 32-bit チッププロセッサ
ワイヤレス完全な 2.4GHz Wi-Fi サブシステム
Bluetooth Low Energy 5.0 / Bluetooth Mesh
オンチップメモリ400KB SRAM & 4MB フラッシュ
インターフェース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、最大 160 MHz で動作する 32­bit RISC­-V シングルコアプロセッサ
  • 完全な Wi­Fi サブシステム: IEEE 802.11b/g/n プロトコルに準拠し、Station モード、SoftAP モード、SoftAP + Station モード、およびプロミスキャスモードをサポート
  • Bluetooth LE サブシステム: Bluetooth 5 および Bluetooth mesh の機能をサポート
  • 超低消費電力: ディープスリープ時の消費電力は約 43μA
  • 優れた RF 性能: 外部 RF アンテナ付属
  • バッテリ充電チップ: リチウムバッテリの充放電管理をサポート
  • 豊富なオンチップリソース: 400KB の SRAM と 4MB のオンボードフラッシュメモリ
  • 超小型サイズ: 親指ほどの大きさ (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 データ
D5SCLGPIO7FSPID, MTDOGPIO, I2C クロック
D6TXGPIO21U0TXDGPIO, UART 送信
D7RXGPIO20U0RXDGPIO, UART 受信
D8SCKGPIO8GPIO, SPI クロック
D9MISOGPIO9GPIO, SPI データ
D10MOSIGPIO10FSPICS0GPIO, SPI データ
MTDOGPIO7JTAG
MTDIGPIO5JTAG, ADC
MTCKGPIO6JTAG, ADC
MTMSGPIO4JTAG, ADC
ResetCHIP_ENEN
BootGPIO9ブートモードに入る
U.FL-R-SMT1LNA_INUFL アンテナ
LightVCC_3V3CHG-LED

電源ピン

  • 5V - これは USB ポートからの 5V 出力です。外部電源入力としても使用できますが、このピンと外部電源の間には必ず何らかのダイオード(ショットキー、信号用、電力用)を、アノードをバッテリー側、カソードを 5V ピン側にして接続する必要があります。
  • 3V3 - これはオンボードレギュレータからの安定化出力です。700mA まで取り出すことができます
  • GND - 電源/データ/信号用グラウンド

ストラップピン

ESP32C3 のチップマニュアルによると、チップ内の GPIO2GPIO8GPIO9 はストラップピンであり、これらのピンの High / Low レベル設定によってチップが異なるブートモードに入る場合があります。これらのピンを使用する際はこの点に注意してください。そうしないと、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. 次のように D10 ピンに LED を接続します

Note: LED に流れる電流を制限し、過電流による LED の焼損を防ぐために、必ず直列に抵抗(約 150Ω)を接続してください。

ソフトウェアの準備

  • ステップ 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. ボードとポートを選択します

Board

Tools > Board > ESP32 Arduino に移動し、"XIAO_ESP32C3" を選択します。ボードのリストは少し長いので、一番下までスクロールする必要があります。

Port

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 シリーズと同じ数の GPIO を XIAO ESP32C3 で利用できるようにするため、エンジニアはバッテリー電圧測定用に割り当てる余分なピンを確保できませんでした。

しかし、バッテリー電圧測定専用のピンを使用したい場合は、msfujino 氏の素晴らしい工夫を参考にすることができます。XIAO ESP32C3 のために多くの経験と労力を共有してくださった msfujino 氏に、ここで特別な感謝を申し上げます。

基本的な動作の考え方は次のとおりです:バッテリー電圧を 200k で 1/2 に分圧し、A0 ポートに接続することで、電圧を監視できるようにします。

pir

データシート上では、公称 2500mV フルスケールの AD 変換とされていますが、チップごとのばらつきが大きく、実際には ±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 は、ディープスリープモードとウェイクアップ機能をサポートするように設計されています。これら 2 つの機能の使用方法について、以下に使用例を示します。

#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のポートは表示されなくなり、再びポート番号を確認するにはXIAOをウェイクアップさせる必要があります!

このプログラムでは、D1 のローレベルでウェイクアップするようにしています。つまり、D1ピンにボタンを接続しておけば、そのボタンを押したときにXIAOが起動します。

caution

XIAO ESP32-C3はGPIOウェイクアップとタイマーウェイクアップをサポートしており、ウェイクアップに対応しているピンはD0〜D3です。

トラブルシューティング

Q1: Arduino IDEでボードにコードを書き込むときに処理が止まってしまう

まず、ボードをPCに接続した状態で RESET BUTTON を1回押して、ボードをリセットしてみてください。それでも解決しない場合は、BOOT BUTTON を押し続けたままボードをPCに接続し、BOOT ボタンを離して bootloader mode に入ってください。

Q2: Arduino IDEでボードがシリアルデバイスとして表示されない

上記の Q1 と同じ手順に従ってください。

Q3: ブートローダを工場出荷時ファームウェアで書き直したい

ボードを USB Type-C 経由でPCに接続し、ESP RF Test Tool を使用して工場出荷時ファームウェアのブートローダを書き込むだけで行えます。

  • ステップ 1. BOOT BUTTON を押し続けたままXIAO ESP32C3をPCに接続し、bootloader mode に入ります

  • ステップ 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. ChipTypeとして ESP32C3、COMポート、BaudRateとして 115200 を選択し、open をクリックします

次のような出力が表示されます

  • ステップ 6. Flash を選択し、Select Bin をクリックします

書き込みが成功すると、次のような出力が表示されます

MicroPython GitHub リポジトリ

リソース

ハードウェア設計

メカニカル

ソフトウェア & ツール

その他

コース用リソース

技術サポート & 製品ディスカッション

当社の製品をお選びいただきありがとうございます。私たちは、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに合わせて選べる、複数のコミュニケーションチャネルをご用意しています。

Loading Comments...