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

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-C6XIAO ESP32-C3XIAO 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 Flash400KB SRAM & 4MB Flash8MB 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

XIAO ESP32-S3 vs ESP32-C3 vs ESP32-C6: あなたのプロジェクトに最適なのはどれ?

特長

  • 強化された接続性: 2.4 GHz Wi-Fi 6 (802.11ax)、Bluetooth 5(LE)、および IEEE 802.15.4 無線接続を統合し、ThreadZigbee プロトコルの適用を可能にします。
  • 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 スイッチ

RF スイッチ 機能を使用すると、GPIO14 を設定することで内蔵セラミックアンテナと外部アンテナを切り替えることができます。この機能を有効にするには、まず GPIO3 を Low レベルに設定する必要があります。これにより RF スイッチ制御が有効になります。

  • GPIO14 Low レベル (デフォルト設定): デバイスは内蔵セラミックアンテナを使用します。
  • GPIO14 High レベル: デバイスは外部アンテナに切り替わります。

デフォルトでは、GPIO14 は Low レベルに設定されており、内蔵アンテナが有効になっています。外部アンテナを使用するには、GPIO14 を High レベルに設定します。外部アンテナを有効にするために GPIO3GPIO14 を設定する方法については、以下のサンプルコードを参照してください。

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 ピン機能チップピン代替機能説明
5VVBUS電源入力/出力
GND
3V33V3_OUT電源出力
D0アナログGPIO0LP_GPIO0GPIO, ADC
D1アナログGPIO1LP_GPIO1GPIO, ADC
D2アナログGPIO2LP_GPIO2GPIO, ADC
D3デジタルGPIO21SDIO_DATA1GPIO
D4SDAGPIO22SDIO_DATA2GPIO, I2C データ
D5SCLGPIO23SDIO_DATA3GPIO, I2C クロック
D6TXGPIO16GPIO, UART 送信
D7RXGPIO17GPIO, UART 受信
D8SCKGPIO19SPI_CLKGPIO, SPI クロック
D9MISOGPIO20SPI_MISOGPIO, SPI データ
D10MOSIGPIO18SPI_MOSIGPIO, SPI データ
MTDOGPIO7JTAG
MTDIGPIO5JTAG, ADC
MTCKGPIO6JTAG, ADC
MTMSGPIO4JTAG, ADC
ENCHIP_PUリセット
BootGPIO9ブートモードに入る
RF Switch Port SelectGPIO14オンボードアンテナと UFL アンテナの切り替え
RF Switch PowerGPIO3電源
LightGPIO15ユーザーライト

はじめに

XIAO ESP32C6 をより早く使い始められるように、以下のハードウェアおよびソフトウェアの準備を読んで、XIAO の準備を行ってください。

ハードウェアの準備

次のものを用意する必要があります:

ヒント

一部の 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
  1. 上記のボードマネージャ URL を Arduino IDE の環境設定に追加します。これは Installing - Arduino ESP32 から取得したものです。
  1. XIAO ESP32C6 ボードパッケージをダウンロードします。
注記

esp32 ボードのバージョンが 3.0.0 より大きい場合にのみ利用できます。

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

それではコーディングを楽しみましょう ✨。

  • 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 ピンには電圧は出力されません。

赤色インジケータ LED

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 がチップ向けに公式に作成したサンプルプログラムをもっと見つけることができます。

リソース

ハードウェア設計

メカニカル設計

コースリソース

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

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

Loading Comments...