Seeed Studio XIAO ESP32C6の入門ガイド
| Seeed Studio XIAO ESP32C6 |
|---|
![]() |
はじめに
Seeed Studio XIAO ESP32C6は、高度に統合されたESP32-C6 SoCを搭載し、2つの32ビットRISC-Vプロセッサで構築されています。高性能(HP)プロセッサは最大160 MHzで動作し、低消費電力(LP)32ビットRISC-Vプロセッサは最大20 MHzでクロック動作します。チップ上に512KB SRAMと4 MB Flashを搭載し、より多くのプログラミングスペースを提供し、IoT制御シナリオにより多くの可能性をもたらします。
XIAO ESP32C6は、強化されたワイヤレス接続によりMatterネイティブです。ワイヤレススタックは**2.4 GHz WiFi 6、Bluetooth® 5.3、Zigbee、Thread(802.15.4)**をサポートします。Threadに対応した初のXIAOメンバーとして、Matter準拠プロジェクトの構築に最適で、スマートホームでの相互運用性を実現します。
仕様
| 製品 | XIAO ESP32C6 | XIAO ESP32C3 | XIAO ESP32S3 | |
|---|---|---|---|---|
| プロセッサ | Espressif ESP32-C6 SoC | Espressif ESP32-C3 SoC | Espressif ESP32-S3R8 | |
| 2つの32ビットRISC-Vプロセッサ、高性能プロセッサは最大160 MHz、低消費電力プロセッサは最大20 MHzで動作 | 最大160 MHzで動作する4段パイプラインを持つRISC-Vシングルコア32ビットチッププロセッサ | 最大240 MHzで動作するXtensa LX7デュアルコア32ビットプロセッサ | ||
| ワイヤレス | 完全な2.4GHz Wi-Fi 6サブシステム | 完全な2.4GHz Wi-Fiサブシステム | ||
| BLE: Bluetooth 5.0、Bluetooth Mesh | BLE: Bluetooth 5.0、Bluetooth Mesh | BLE: Bluetooth 5.0、Bluetooth Mesh | ||
| Zigbee、Thread、IEEE 802.15.4 | / | / | ||
| オンチップメモリ | 512KB SRAM & 4MB Flash | 400KB SRAM & 4MB Flash | 8M PSRAM & 8MB Flash | |
| インターフェース | 1x UART、1x LP_UART、1x IIC、1x LP_IIC、1x SPI、11x GPIO(PWM)、7x ADC、1xSDIO 2.0 Slave | 1x UART、1x IIC、1x SPI、11x GPIO(PWM)、4x ADC | 1x UART、1x IIC、1x IIS、1x SPI、11x GPIO(PWM)、9x ADC、1x User LED、1x Charge LED | |
| 1x リセットボタン、1x ブートボタン | ||||
| 寸法 | 21 x 17.8 mm | |||
| 電源 | 入力電圧 | Type-C: 5V BAT: 4.2V | ||
| 回路動作電圧(動作準備完了) | USB:5V@9mA BAT:3.8V@9mA | Type-C: 5V@19mA BAT: 3.8V@22mA | ||
| バッテリー充電電流 | 100mA | 350mA | 100mA | |
| 消費電力モデル(供給電力:3.8V) | モデムスリープモデル | ~ 30 mA | ~ 24 mA | ~ 25 mA |
| ライトスリープモデル | ~ 2.5 mA | ~ 3 mA | ~ 2 mA | |
| ディープスリープモデル | ~ 15 μA | ~ 44 μA | ~ 14 μA | |
| 動作温度 | -40°C ~ 85°C | -40°C ~ 65°C | ||
特徴
- 強化された接続性: 2.4 GHz Wi-Fi 6(802.11ax)、Bluetooth 5(LE)、IEEE 802.15.4無線接続を統合し、ThreadおよびZigbeeプロトコルの適用を可能にします。
- Matterネイティブ: Matter準拠のスマートホームプロジェクトの構築をサポートし、異なるスマートデバイス間の相互運用性を確保します。
- チップ上でのセキュリティ暗号化: ESP32-C6を利用してセキュアブート、暗号化、信頼実行環境(TEE)機能を提供し、スマートホームプロジェクトのセキュリティを強化します。
- 優れたRF性能: 最大80mのBLE/Wi-Fi範囲を持つオンボードアンテナを搭載し、外部UFLアンテナ接続用のインターフェースを提供し、信頼性の高い接続を確保します。
- 消費電力の活用: 15 μAという低消費電力のディープスリープモードを含む4つの動作モードを提供し、リチウムバッテリー充電管理をサポートします。
- デュアルRISC-Vプロセッサ: 2つの32ビットRISC-Vプロセッサを搭載し、高性能プロセッサは最大160 MHz、低消費電力プロセッサは最大20 MHzで動作可能です。
- クラシックなXIAOデザイン: 21 x 17.8mmの親指サイズのフォームファクターと片面実装設計を維持し、ウェアラブルデバイスなどのスペース制限のあるプロジェクトに最適です。
ハードウェア概要
| XIAO ESP32C6 表示図 |
|---|
| XIAO ESP32C6 ピンリスト |
RFスイッチ機能により、GPIO14を設定することで内蔵セラミックアンテナと外部アンテナを切り替えることができます。この機能を有効にするには、まずGPIO3をローレベルに設定する必要があります。これによりRFスイッチ制御が有効になります。
- GPIO14 ローレベル(デフォルト設定): デバイスは内蔵セラミックアンテナを使用します。
- GPIO14 ハイレベル: デバイスは外部アンテナに切り替わります。
デフォルトでは、GPIO14はローレベルに設定され、内蔵アンテナが有効になります。外部アンテナを使用するには、GPIO14をハイレベルに設定します。外部アンテナを有効にするためのGPIO3とGPIO14の設定に関するガイダンスについては、以下のサンプルコードを参照してください:
void setup() {
pinMode(WIFI_ENABLE, OUTPUT); // pinMode(3, OUTPUT);
digitalWrite(WIFI_ENABLE, LOW); // digitalWrite(3, LOW); // Activate RF switch control
delay(100);
pinMode(WIFI_ANT_CONFIG, OUTPUT); // pinMode(14, OUTPUT);
digitalWrite(WIFI_ANT_CONFIG, HIGH); // digitalWrite(14, HIGH); // Use external antenna
}
ピンマップ
| XIAOピン | 機能 | チップピン | 代替機能 | 説明 |
|---|---|---|---|---|
| 5V | VBUS | 電源入力/出力 | ||
| GND | ||||
| 3V3 | 3V3_OUT | 電源出力 | ||
| D0 | アナログ | GPIO0 | LP_GPIO0 | GPIO、ADC |
| D1 | アナログ | GPIO1 | LP_GPIO1 | GPIO、ADC |
| D2 | アナログ | GPIO2 | LP_GPIO2 | GPIO、ADC |
| D3 | デジタル | GPIO21 | SDIO_DATA1 | GPIO |
| D4 | SDA | GPIO22 | SDIO_DATA2 | GPIO、I2Cデータ |
| D5 | SCL | GPIO23 | SDIO_DATA3 | GPIO、I2Cクロック |
| D6 | TX | GPIO16 | GPIO、UART送信 | |
| D7 | RX | GPIO17 | GPIO、UART受信 | |
| D8 | SCK | GPIO19 | SDIO_CLK | GPIO、SPIクロック |
| D9 | MISO | GPIO20 | SDIO_DATA0 | GPIO、SPIデータ |
| D10 | MOSI | GPIO18 | SDIO_CMD | GPIO、SPIデータ |
| MTDO | GPIO7 | JTAG | ||
| MTDI | GPIO5 | JTAG、ADC | ||
| MTCK | GPIO6 | JTAG、ADC | ||
| MTMS | GPIO4 | JTAG、ADC | ||
| EN | CHIP_PU | リセット | ||
| Boot | GPIO9 | ブートモード開始 | ||
| RFスイッチポート選択 | GPIO14 | オンボードアンテナとUFLアンテナの切り替え | ||
| RFスイッチ電源 | GPIO3 | 電源 | ||
| ライト | GPIO15 | ユーザーライト |
入門ガイド
XIAO ESP32C6をより早く使い始められるように、以下のハードウェアとソフトウェアの準備をお読みいただき、XIAOを準備してください。
ハードウェアの準備
以下を準備する必要があります:
- 1 x Seeed Studio XIAO ESP32C6
- 1 x コンピュータ
- 1 x USB Type-Cケーブル
一部のUSBケーブルは電源供給のみでデータ転送ができません。USBケーブルをお持ちでない場合や、お使いのUSBケーブルがデータ転送可能かわからない場合は、Seeed USB Type-C support USB 3.1をご確認ください。
ヘッダーのはんだ付け
XIAO ESP32C6はデフォルトでピンヘッダーが付属していないため、独自にピンヘッダーを準備し、XIAOの対応するピンにはんだ付けして、拡張ボードやセンサーに接続できるようにする必要があります。
XIAO ESP32C6は小型サイズのため、ヘッダーをはんだ付けする際は注意深く行い、異なるピン同士をくっつけたり、シールドや他の部品にはんだを付着させたりしないでください。そうしないと、XIAOがショートしたり正常に動作しなくなる可能性があり、これによって生じる結果はユーザーの責任となります。
BootLoaderモード
間違ったプログラムを使用してXIAOがポートを失ったり正常に動作しなくなったりする場合があります。具体的な症状は以下の通りです:
- コンピュータに接続されているが、XIAOのポート番号が見つからない。
- コンピュータに接続されてポート番号は表示されるが、プログラムのアップロードに失敗する。
上記の2つの状況に遭遇した場合、XIAOをBootLoaderモードにすることで、デバイスの認識失敗やアップロード失敗の問題の大部分を解決できます。具体的な方法は以下の通りです:
- ステップ1. XIAO ESP32C6のBOOTボタンを離さずに押し続けます。
- ステップ2. BOOTボタンを押し続けたまま、データケーブルでコンピュータに接続します。コンピュータに接続後、BOOTボタンを離します。
- ステップ3. Blinkプログラムをアップロードして、XIAO ESP32C6の動作を確認します。
リセット
プログラムが異常に動作している場合、電源投入時にResetを一度押すことで、XIAOにアップロードされたプログラムを再実行させることができます。
電源投入時にBOOTキーを押し続けてからResetキーを一度押すことでも、BootLoaderモードに入ることができます。
ソフトウェアの準備
XIAO ESP32C6の推奨プログラミングツールはArduino IDEです。そのため、ソフトウェア準備の一環としてArduinoのインストールを完了する必要があります。
Arduinoを初めて使用する場合は、Getting Started with Arduinoを参照することを強くお勧めします。
また、XIAO ESP32C6のオンボードパッケージには少なくともバージョン2.0.8が必要です。
-
ステップ1. お使いのオペレーティングシステムに応じて、Arduino IDEの安定版をダウンロードしてインストールします。
-
ステップ2. Arduinoアプリケーションを起動します。
-
ステップ3. XIAO ESP32C6オンボードパッケージをArduino IDEに追加し、
OKをクリックします。 -
ステップ4. Arduino IDEを閉じて再度開きます。
XIAO-C6ボードの追加
XIAO ESP32C6ボードをインストールするには、以下の手順に従ってください:
https://espressif.github.io/arduino-esp32/package_esp32_index.json
- 上記のボードマネージャーURLをArduino IDEの設定に追加します。これはInstalling - Arduino ESP32から取得したものです。

- XIAO ESP32C6ボードパッケージをダウンロードします。
esp32ボードのバージョンが3.0.0より大きい場合のみ利用可能です。

XIAO_ESP32C6バリアントを選択します。

これでコーディングを楽しめます ✨。
最初のBlinkプログラムを実行する
-
ステップ1. Arduinoアプリケーションを起動します。
-
ステップ2. File > Examples > 01.Basics > Blinkに移動し、プログラムを開きます。

- ステップ3. ボードモデルをXIAO ESP32C6に選択し、正しいポート番号を選択してプログラムをアップロードします。

プログラムが正常にアップロードされると、以下の出力メッセージが表示され、XIAO ESP32C6の右側にあるオレンジ色のLEDが点滅しているのを確認できます。
![]() | ![]() |
バッテリーの使用
XIAO ESP32C6 シリーズには内蔵電源管理チップが搭載されており、バッテリーで独立して電源供給したり、USBポート経由でバッテリーを充電したりできます。
XIAOにバッテリーを接続する場合は、認定された充電式3.7Vリチウムバッテリーの使用をお勧めします。バッテリーをはんだ付けする際は、正極と負極の端子を慎重に区別してください。負極パッドは「D8」のシルクスクリーンマーキング近くの左側に、正極パッドは「D5」のシルクスクリーンマーキング近くの右側に配置する必要があります。
バッテリー電源を使用する場合、5Vピンには電圧が存在しません。
XIAO ESP32C6には、XIAO ESP32S3と同様に、バッテリー充電用の赤色インジケーターライトがあります:
XIAO ESP32C6の赤色ライトの動作は以下の通りです:
- バッテリーが接続されていない場合:
- Type-Cケーブルが接続されると赤色ライトが点灯し、30秒後に消灯します。
- バッテリーが接続されてType-Cケーブルが充電のために接続されている場合:
- 赤色ライトが点滅します。
- Type-C接続でバッテリーが完全に充電された場合:
- 赤色ライトが消灯します。
バッテリー電圧の読み取り
XIAO ESP32C6でバッテリー電圧を監視するには、XIAO ESP32C3と同様に、1:2構成で200kΩ抵抗をはんだ付けする必要があります。この設定により電圧が半分に減少し、A0アナログポート経由で安全に監視できます。
サンプルコード
以下のコードはA0ポートでADCを初期化し、16回の読み取りを平均してバッテリー電圧を計算し、電圧分割器の1:2減衰比を調整します。
#include <Arduino.h>
void setup() {
Serial.begin(115200);
pinMode(A0, INPUT); // Configure A0 as ADC input
}
void loop() {
uint32_t Vbatt = 0;
for(int i = 0; i < 16; i++) {
Vbatt += analogReadMilliVolts(A0); // 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
}
このコードはADCから16回の測定を行い、それらを平均し、電圧分割器の1:2比を補正してバッテリー電圧を小数点以下3桁の精度でボルト単位で出力します。
ディープスリープモードとウェイクアップ
XIAO ESP32C6には完全なディープスリープモードとウェイクアップ機能があります。ここでは、ESPが提供するより一般的な2つの例を示します。
デモ1:外部ウェイクアップ付きディープスリープ
このコードは、外部トリガーをウェイクアップソースとしてディープスリープを使用する方法と、再起動時に使用するためにRTCメモリにデータを保存する方法を示しています。
/*
Hardware Connections
======================
Push Button to GPIO 0 pulled down with a 10K Ohm
resistor
NOTE:
======
Bit mask of GPIO numbers which will cause wakeup. Only GPIOs
which have RTC functionality can be used in this bit map.
For different SoCs, the related GPIOs are:
- ESP32: 0, 2, 4, 12-15, 25-27, 32-39
- ESP32-S2: 0-21
- ESP32-S3: 0-21
- ESP32-C6: 0-7
- ESP32-H2: 7-14
*/
#define BUTTON_PIN_BITMASK (1ULL << GPIO_NUM_0) // GPIO 0 bitmask for ext1
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();
/*
First we configure the wake up source
We set our ESP32 to wake up for an external trigger.
There are two types for ESP32, ext0 and ext1, ext0
don't support ESP32C6 so we use ext1.
*/
//If you were to use ext1, you would use it like
esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK,ESP_EXT1_WAKEUP_ANY_HIGH);
//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
}
デモ2: タイマーウェイクアップ付きディープスリープ
ESP32は、IoTアプリケーションにとって電力が重要な要素であるため、効果的な省電力のためのディープスリープモードを提供しています。このモードでは、CPU、RAMの大部分、およびAPB_CLKからクロックされるすべてのデジタル周辺機器の電源が切られます。チップの中で電源を入れたままにできる部分は、RTCコントローラー、RTC周辺機器、およびRTCメモリのみです。
このコードは、ウェイクアップ用のタイマーを使った最も基本的なディープスリープと、再起動時に使用するためにRTCメモリにデータを保存する方法を示しています。
/*
Simple Deep Sleep with Timer Wake Up
=====================================
This code is under Public Domain License.
Author:
Pranav Cherukupalli <[email protected]>
*/
#define uS_TO_S_FACTOR 1000000ULL /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP 5 /* Time ESP32 will go to sleep (in seconds) */
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();
/*
First we configure the wake up source
We set our ESP32 to wake up every 5 seconds
*/
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) +
" Seconds");
/*
Next we decide what all peripherals to shut down/keep on
By default, ESP32 will automatically power down the peripherals
not needed by the wakeup source, but if you want to be a poweruser
this is for you. Read in detail at the API docs
http://esp-idf.readthedocs.io/en/latest/api-reference/system/deep_sleep.html
Left the line commented as an example of how to configure peripherals.
The line below turns off all RTC peripherals in deep sleep.
*/
//esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
//Serial.println("Configured all RTC Peripherals to be powered down in sleep");
/*
Now that we have setup a wake cause and if needed setup the
peripherals state in deep sleep, we can now start going to
deep sleep.
In the case that no wake up sources were provided but deep
sleep was started, it will sleep forever unless hardware
reset occurs.
*/
Serial.println("Going to sleep now");
Serial.flush();
esp_deep_sleep_start();
Serial.println("This will never be printed");
}
void loop(){
//This is not going to be called
}
ディープスリープモードとウェイクアップ機能をより多く使用する方法を学びたい場合は、Arduino IDEでESPがチップ用に公式に書いたサンプルプログラムをより多く見つけることができます。

リソース
-
[PDF] ESP32C6 データシート
-
🔗 [Kicad] Seeed Studio XIAO ESP32C6 フットプリント
コースリソース

技術サポート & 製品ディスカッション
弊社製品をお選びいただき、ありがとうございます!弊社製品での体験ができるだけスムーズになるよう、さまざまなサポートを提供いたします。さまざまな好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。


