Seeed Studio XIAO ESP32C6 のはじめに
| Seeed Studio XIAO ESP32C6 |
|---|
![]() |
はじめに
Seeed Studio XIAO ESP32C6 は、高度に統合された ESP32-C6 SoC を搭載しており、2 つの 32-bit RISC-V プロセッサ をベースに構成されています。高性能 (HP) プロセッサは 最大 160 MHz で動作 し、低消費電力 (LP) 32-bit 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 ESP32-C6 | XIAO ESP32-C3 | XIAO ESP32-S3 |
|---|---|---|---|
| プロセッサ | Espressif ESP32-C6 SoC 2 つの 32-bit RISC-V プロセッサを搭載し、高性能コアは最大 160 MHz で動作、低消費電力コアは最大 20 MHz で動作 | Espressif ESP32-C3 SoC 4 段パイプラインを備え、最大 160 MHz で動作する RISC-V シングルコア 32-bit チッププロセッサ | Espressif ESP32-S3R8 SoC Xtensa LX7 デュアルコア 32-bit プロセッサ、最大 240 MHz で動作 |
| ワイヤレス | 完全な 2.4GHz Wi-Fi 6 サブシステム | 完全な 2.4GHz Wi-Fi サブシステム | 完全な 2.4GHz Wi-Fi サブシステム |
| Bluetooth Low Energy 5.0 | |||
| Zigbee, Thread, IEEE 802.15.4 | / | / | |
| オンチップメモリ | 512KB SRAM & 4MB Flash | 400KB SRAM & 4MB Flash | 8MB PSRAM & 8MB Flash |
| インターフェース | 1x UART 1x LP_UART 1x IIC 1x LP_IIC 1x SPI 11x GPIO(PWM) 7x ADC 1x SDIO | 1x UART 1x IIC 1x SPI 11x GPIO(PWM) 4x ADC | 1x UART 1x IIC 1x SPI 11x GPIO(PWM) 9x ADC 1x User LED 1x Charge LED |
| 1x Reset button 1x Boot button | |||
| 寸法 | 21 x 17.8mm | ||
| 電源 | 入力電圧 (Type-C): 5V 入力電圧 (BAT): 3.7V | ||
| 消費電力モード (Typ.) (供給電圧: 3.8V) | Modem-sleep モード: 30 mA Light-sleep モード: 3.1 mA Deep Sleep モード: 15 μA | Modem-sleep モード: 24 mA Light-sleep モード: 3 mA Deep Sleep モード: 44 μA | Modem-sleep モード: 27 mA Light-sleep モード: 2 mA Deep Sleep モード: 14 μA |
| 動作温度 | -40°C ~ 85°C | -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 を利用して、セキュアブート、暗号化、Trusted Execution Environment (TEE) 機能を提供し、スマートホームプロジェクトのセキュリティを強化します。
- 優れた RF 性能: オンボードアンテナにより 80m の BLE/Wi-Fi 通信距離を実現し、外部 UFL アンテナ接続用インターフェースも備えており、信頼性の高い接続を保証します。
- 電力消費の活用: 4 つの動作モードを提供し、その中には 15 μA まで低減できるディープスリープモードが含まれ、リチウム電池の充電管理もサポートします。
- デュアル RISC-V プロセッサ: 2 つの 32-bit RISC-V プロセッサを搭載し、高性能プロセッサは最大 160 MHz、低消費電力プロセッサは最大 20 MHz で動作します。
- クラシックな XIAO デザイン: 21 x 17.8mm の親指サイズフォームファクタと片面実装デザインを維持しており、ウェアラブルデバイスのようなスペース制約のあるプロジェクトに最適です。
ハードウェア概要
| XIAO ESP32C6 インジケータ図 |
|---|
| XIAO ESP32C6 ピン一覧 |
RF スイッチ 機能を使用すると、GPIO14 を設定することで内蔵セラミックアンテナと外部アンテナを切り替えることができます。この機能を有効にするには、まず GPIO3 を Low レベルに設定する必要があります。これにより RF スイッチ制御が有効になります。
- GPIO14 Low レベル (デフォルト設定): デバイスは内蔵セラミックアンテナを使用します。
- GPIO14 High レベル: デバイスは外部アンテナに切り替わります。
デフォルトでは、GPIO14 は Low レベルに設定されており、内蔵アンテナが有効になっています。外部アンテナを使用するには、GPIO14 を High レベルに設定します。外部アンテナを有効にするために 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 | SPI_CLK | GPIO, SPI クロック |
| D9 | MISO | GPIO20 | SPI_MISO | GPIO, SPI データ |
| D10 | MOSI | GPIO18 | SPI_MOSI | GPIO, SPI データ |
| MTDO | GPIO7 | JTAG | ||
| MTDI | GPIO5 | JTAG, ADC | ||
| MTCK | GPIO6 | JTAG, ADC | ||
| MTMS | GPIO4 | JTAG, ADC | ||
| EN | CHIP_PU | リセット | ||
| Boot | GPIO9 | ブートモードに入る | ||
| RF Switch Port Select | GPIO14 | オンボードアンテナと UFL アンテナの切り替え | ||
| RF Switch Power | GPIO3 | 電源 | ||
| Light | 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 モードにすることで、認識されないデバイスや書き込み失敗の問題のほとんどを解決できます。具体的な方法は次のとおりです:
- Step 1. XIAO ESP32C6 上の BOOT ボタンを押し続けたままにします。
- Step 2. BOOT ボタンを押し続けたまま、データケーブルでコンピュータに接続します。コンピュータに接続した後で BOOT ボタンを離します。
- Step 3. Blink プログラムを書き込んで、XIAO ESP32C6 の動作を確認します。
リセット
プログラムが異常に動作した場合、電源投入中に Reset を 1 回押すことで、XIAO にアップロード済みのプログラムを再実行させることができます。
電源投入時に BOOT キーを押し続け、その後 Reset キーを 1 回押すことで、BootLoader モードに入ることもできます。
ソフトウェアの準備
XIAO ESP32C6 に推奨される開発ツールは Arduino IDE です。そのため、ソフトウェアの準備として Arduino のインストールを完了する必要があります。
初めて Arduino を使用する場合は、Getting Started with Arduino を参照することを強くお勧めします。
また、XIAO ESP32C6 用のオンボードパッケージを利用するには、少なくともバージョン 2.0.8 が必要です。
-
Step 1. お使いのオペレーティングシステムに応じて、安定版の Arduino IDE をダウンロードしてインストールします。
-
Step 2. Arduino アプリケーションを起動します。
-
Step 3. Arduino IDE に XIAO ESP32C6 のオンボードパッケージを追加し、
OKをクリックします。 -
Step 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 プログラムを実行する
-
Step 1. Arduino アプリケーションを起動します。
-
Step 2. File > Examples > 01.Basics > Blink に移動し、プログラムを開きます。

- Step 3. ボードモデルを XIAO ESP32C6 に選択し、正しいポート番号を選択してプログラムを書き込みます。

プログラムが正常に書き込まれると、次のような出力メッセージが表示され、XIAO ESP32C6 の右側にあるオレンジ色の LED が点滅しているのを確認できます。
![]() | ![]() |
バッテリーの使用
XIAO ESP32C6 シリーズには電源管理チップが内蔵されており、バッテリーによる単独給電や、USB ポートを介したバッテリーの充電が可能です。
XIAO にバッテリーを接続する場合は、認証済みの充電式 3.7V リチウムバッテリーの使用を推奨します。バッテリーをはんだ付けする際は、必ず正極と負極を慎重に見分けてください。負極パッドはシルク印刷「D8」の近くの左側に、正極パッドはシルク印刷「D5」の近くの右側にあります。
バッテリー電源を使用している場合、5V ピンには電圧は出力されません。
XIAO ESP32C6 には、XIAO ESP32S3 と同様に、バッテリー充電用の赤色インジケータ LED が搭載されています:
XIAO ESP32C6 の赤色 LED の動作は次のとおりです:
- バッテリーが接続されていない場合:
- Type-C ケーブルを接続すると赤色 LED が点灯し、30 秒後に消灯します。
- バッテリーを接続し、Type-C ケーブルを挿して充電している場合:
- 赤色 LED が点滅します。
- Type-C 接続でバッテリーが満充電になった場合:
- 赤色 LED が消灯します。
バッテリー電圧の読み取り
XIAO ESP32C6 上のバッテリー電圧を監視するには、XIAO ESP32C3 と同様に、200k の抵抗を 1:2 の構成で実装する必要があります。この構成により電圧が半分に分圧され、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 がチップ向けに公式に作成したサンプルプログラムをもっと見つけることができます。

リソース
ハードウェア設計
- 📄[データシート] Espressif ESP32-C6 データシート
- 📄[回路図] XIAO ESP32-C6 回路図
- 🗃️[PCB 設計ファイル] XIAO ESP32-C6 KiCad プロジェクト
- 🗃️[PCB 設計ライブラリ]
- 📄[ピン配置図] XIAO ESP32-C6 ピン配置シート
メカニカル設計
- 📄[3D モデル] XIAO ESP32-C6 3D モデル
コースリソース

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


