メインコンテンツまでスキップ

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
4 ステージパイプラインを備え、最大 160 MHz で動作する RISC-V シングルコア 32-bit チッププロセッサ
ワイヤレス完全な 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 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 有効時消費電力アクティブモード: 75 mA
モデムスリープモード: 25 mA
ライトスリープモード: 4 mA
BLE 有効時消費電力モデムスリープモード: 27 mA
ライトスリープモード: 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 ピン機能チップピン代替機能説明
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 を点滅させることでボードが正常に動作しているか確認します。

ハードウェアの準備

次のものを用意します:

ヒント

一部の USB ケーブルは電源供給のみで、データ転送ができません。USB ケーブルを持っていない場合や、お使いの USB ケーブルがデータ転送に対応しているか分からない場合は、Seeed USB Type-C support USB 3.1 を確認してください。

  • Step 1. USB Type-C ケーブルで XIAO ESP32C3 をコンピュータに接続します。
  • Step 2. 次のように D10 ピンに LED を接続します

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

ソフトウェアの準備

  • Step 1. お使いのオペレーティングシステムに応じて、最新バージョンの Arduino IDE をダウンロードしてインストールします

  • Step 2. Arduino アプリケーションを起動します

  • Step 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 の最新バージョンを選択し、インストールします。

  • Step 4. ボードとポートを選択します

Board

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

Port

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
注意

はんだ付けの際に、正極と負極を短絡させてバッテリーや機器を焼損させないよう十分注意してください。

バッテリー使用上の注意:

  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 変換の結果とマルチメータで測定した電圧はよく一致しており、誤差は約 5 mV で、実用上問題ありません。

さらに、特に通信中にはスパイク状の誤差が発生したため、それらを除去するために 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);
}
ヒント

上記の内容は 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 が現在「スリープ中」であることを意味します。

ヒント

ディープスリープモードに入ると、XIAO のポートは表示されなくなり、再びポート番号を確認するにはウェイクアップさせる必要があります!

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

注意

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 を使用してブートローダを工場出荷時ファームウェアで書き直すだけで構いません。

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

  • Step 2. 接続されたら、BOOT BUTTON を離します

  • Step 3. このページ にアクセスし、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 を開きます
  • ステップ 5. ChipType として ESP32C3、COM ポート、BaudRate として 115200 を選択し、open をクリックします

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

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

フラッシュが成功すると、次のような出力が表示されます

MicroPython GitHub リポジトリ

リソース

ハードウェア設計

メカニカル

ソフトウェア & ツール

その他

コースリソース

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

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

Loading Comments...