Skip to main content

Seeed Studio XIAO ESP32C6 の使い方を始める

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

Seeed Studio XIAO ESP32C6 の使い方を始める

Seeed Studio XIAO ESP32C6

概要

Seeed Studio XIAO ESP32C6 は、高度に統合された ESP32-C6 SoC を搭載しており、2つの32ビットRISC-Vプロセッサを備えています。高性能プロセッサは最大160 MHzで動作し、低消費電力プロセッサは最大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 ESP32C6XIAO ESP32C3XIAO ESP32S3
プロセッサEspressif ESP32-C6 SoCEspressif ESP32-C3 SoCEspressif ESP32-S3R8
2つの32ビットRISC-Vプロセッサを搭載。高性能プロセッサは最大160 MHzで動作し、低消費電力プロセッサは最大20 MHzで動作RISC-Vシングルコア32ビットチッププロセッサ。4段階のパイプラインで最大160 MHzで動作Xtensa LX7デュアルコア32ビットプロセッサ。最大240 MHzで動作
ワイヤレス完全な2.4GHz Wi-Fi 6 サブシステム完全な2.4GHz Wi-Fi サブシステム
BLE: Bluetooth 5.0, Bluetooth MeshBLE: Bluetooth 5.0, Bluetooth MeshBLE: Bluetooth 5.0, Bluetooth Mesh
Zigbee, Thread, IEEE 802.15.4//
オンチップメモリ512KB SRAM & 4MB Flash400KB SRAM & 4MB Flash8M PSRAM & 8MB Flash
インターフェース1x UART, 1x LP_UART, 1x IIC, 1x LP_IIC, 1x SPI, 11x GPIO(PWM), 7x ADC, 1x SDIO 2.0 Slave1x UART, 1x IIC, 1x SPI, 11x GPIO(PWM), 4x ADC1x UART, 1x IIC, 1x IIS, 1x SPI, 11x GPIO(PWM), 9x ADC, 1x ユーザーLED, 1x 充電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
充電バッテリー電流100mA350mA100mA
消費電力モデル (供給電力: 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 を利用してセキュアブート、暗号化、および Trusted Execution Environment (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スイッチ

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

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

デフォルトでは、GPIO14は低レベルに設定されており、内蔵アンテナが有効です。外部アンテナを使用するには、GPIO14を高レベルに設定してください。以下の例コードを参考にして、外部アンテナを有効にするためのGPIO3GPIO14の設定方法を確認してください:

void setup() {
pinMode(WIFI_ENABLE, OUTPUT); // pinMode(3, OUTPUT);
digitalWrite(WIFI_ENABLE, LOW); // digitalWrite(3, LOW); // RFスイッチ制御をアクティブ化

delay(100);

pinMode(WIFI_ANT_CONFIG, OUTPUT); // pinMode(14, OUTPUT);
digitalWrite(WIFI_ANT_CONFIG, HIGH); // digitalWrite(14, HIGH); // 外部アンテナを使用
}

はじめに

XIAO ESP32C6を迅速に使用開始するために、以下のハードウェアおよびソフトウェアの準備を読んでXIAOを準備してください。

ハードウェアの準備

以下を準備する必要があります:

tip

一部のUSBケーブルは電力供給のみ可能で、データ転送ができません。USBケーブルを持っていない場合や、USBケーブルがデータ転送可能かどうかわからない場合は、Seeed USB Type-C support USB 3.1を確認してください。

ヘッダーのはんだ付け

XIAO ESP32C6はデフォルトでピンヘッダーが付属していません。ピンヘッダーを準備し、対応するXIAOのピンに自分ではんだ付けする必要があります。これにより拡張ボードやセンサーに接続できます。

XIAO ESP32C6の小型サイズのため、ヘッダーのはんだ付け時には注意してください。異なるピンを一緒に接続したり、シールドや他のコンポーネントにハンダを付けないようにしてください。そうしないと、XIAOがショートしたり正常に動作しなくなる可能性があります。この結果による影響はユーザーが負担するものとします。

BootLoaderモード

誤ったプログラムを使用すると、XIAOがポートを失ったり正常に動作しなくなることがあります。具体的な症状は以下の通りです:

  • コンピュータに接続してもXIAOのポート番号が見つからない。
  • コンピュータに接続してポート番号が表示されるが、プログラムのアップロードが失敗する。

上記の状況に遭遇した場合、XIAOをBootLoaderモードにすることで、認識されないデバイスやアップロード失敗の問題を解決できる場合があります。具体的な方法は以下の通りです:

  • ステップ1. XIAO ESP32C6のBOOTボタンを押し続けます。
  • ステップ2. BOOTボタンを押したまま、データケーブルでコンピュータに接続します。コンピュータに接続した後、BOOTボタンを離します。
  • ステップ3. BlinkプログラムをアップロードしてXIAO ESP32C6の動作を確認します。

リセット

プログラムが異常に動作する場合、電源投入時にリセットを1回押すことで、XIAOがアップロードされたプログラムを再実行します。

BOOTキーを押しながら電源を投入し、その後リセットキーを1回押すことでBootLoaderモードに入ることもできます。

ソフトウェアの準備

XIAO ESP32C6の推奨プログラミングツールはArduino IDEです。そのため、ソフトウェア準備の一環としてArduinoのインストールを完了する必要があります。

tip

Arduinoを初めて使用する場合は、Arduinoの使い方を参照することを強くお勧めします。

また、XIAO ESP32C6のオンボードパッケージはバージョン2.0.8以上が必要です。

  • ステップ1. オペレーティングシステムに応じて安定版のArduino IDEをダウンロードしてインストールします。


  • ステップ2. Arduinoアプリケーションを起動します。

  • ステップ3. Arduino IDEにXIAO ESP32C6のオンボードパッケージを追加し、OKをクリックします。

  • ステップ4. Arduino IDEを閉じて再度開きます。

XIAO-C6ボードを追加する

XIAO ESP32C6ボードをインストールするには、以下の手順に従ってください:

https://espressif.github.io/arduino-esp32/package_esp32_index.json
  1. 上記のボードマネージャURLをArduino IDEの設定に追加します。このURLはInstalling - Arduino ESP32から取得されています。
  1. XIAO ESP32C6ボードパッケージをダウンロードします。
note

esp32ボードのバージョンが3.0.0以上である場合のみ利用可能です。

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

これでコーディングを楽しめます✨。

初めてのBlinkプログラムを実行する

  • ステップ 1. Arduino アプリケーションを起動します。

  • ステップ 2. ファイル > スケッチ例 > 01.Basics > Blink に移動し、プログラムを開きます。

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

プログラムが正常にアップロードされると、以下の出力メッセージが表示され、XIAO ESP32C6 の右側にあるオレンジ色の LED が点滅しているのを確認できます。

バッテリー使用

XIAO ESP32C6 シリーズは内蔵の電源管理チップを備えており、バッテリーで独立して電源供給を行うことができ、また USB ポートを介してバッテリーを充電することも可能です。

XIAO にバッテリーを接続するには、認定された充電可能な 3.7V リチウムバッテリーを使用することをお勧めします。バッテリーをはんだ付けする際は、正極と負極を慎重に区別してください。負極パッドはシルクスクリーン「D8」の近くの左側に位置し、正極パッドはシルクスクリーン「D5」の近くの右側に位置します。

caution

バッテリー電源を使用する場合、5V ピンには電圧が供給されません。

赤色インジケータライト

XIAO ESP32C6 にはバッテリー充電用の赤色インジケータライトがあり、XIAO ESP32S3 と同様です。

XIAO ESP32C6 の赤色ライトの動作は以下の通りです:

  • バッテリーが接続されていない場合:
    • Type-C ケーブルが接続されると赤色ライトが点灯し、30 秒後に消灯します。
  • バッテリーが接続され、Type-C ケーブルが充電のために接続されている場合:
    • 赤色ライトが点滅します。
  • Type-C 接続を介してバッテリーが完全に充電された場合:
    • 赤色ライトが消灯します。

バッテリー電圧の読み取り

XIAO ESP32C6 のバッテリー電圧を監視するには、XIAO ESP32C3 と同様に、200kΩ の抵抗を 1:2 の構成ではんだ付けする必要があります。この設定により電圧が半分に減少し、A0 アナログポートを介して安全に監視することができます。

サンプルコード

以下のコードは、A0 ポートの ADC を初期化し、16 回の読み取りを平均化して、電圧分圧器の 1:2 減衰比を考慮したバッテリー電圧を計算します。

#include <Arduino.h>

void setup() {
Serial.begin(115200);
pinMode(A0, INPUT); // A0 を ADC 入力として設定
}

void loop() {
uint32_t Vbatt = 0;
for(int i = 0; i < 16; i++) {
Vbatt += analogReadMilliVolts(A0); // ADC 電圧を読み取り、累積
}
float Vbattf = 2 * Vbatt / 16 / 1000.0; // 1:2 分圧器を考慮して調整し、ボルトに変換
Serial.println(Vbattf, 3); // 小数点以下 3 桁で電圧を出力
delay(1000); // 1 秒待機
}

このコードは、ADC から 16 回の測定を行い、それを平均化した後、電圧分圧器の 1:2 比率を補正して、3 桁の小数点精度でバッテリー電圧をボルト単位で出力します。

ディープスリープモードとウェイクアップ

XIAO ESP32C6は完全なディープスリープモードとウェイクアップ機能を備えています。ここでは、ESPが提供する一般的な例を2つ紹介します。

デモ1: 外部ウェイクアップによるディープスリープ

このコードは、外部トリガーをウェイクアップソースとして使用する方法と、RTCメモリにデータを保存して再起動時に使用する方法を示しています。

/*
ハードウェア接続
======================
GPIO 0に接続されたプッシュボタンを10Kオームの抵抗でプルダウン

注意:
======
ウェイクアップを引き起こすGPIO番号のビットマスク。RTC機能を持つGPIOのみがこのビットマップで使用可能です。
異なるSoCにおける関連するGPIOは以下の通りです:
- 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のビットマスク(ext1用)

RTC_DATA_ATTR int bootCount = 0;

/*
ESP32がスリープから目覚めた理由を表示するメソッド
*/
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("RTC_IOを使用した外部信号によるウェイクアップ"); break;
case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("RTC_CNTLを使用した外部信号によるウェイクアップ"); break;
case ESP_SLEEP_WAKEUP_TIMER : Serial.println("タイマーによるウェイクアップ"); break;
case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("タッチパッドによるウェイクアップ"); break;
case ESP_SLEEP_WAKEUP_ULP : Serial.println("ULPプログラムによるウェイクアップ"); break;
default : Serial.printf("ディープスリープによるウェイクアップではありません: %d\n",wakeup_reason); break;
}
}

void setup(){
Serial.begin(115200);
delay(1000); //シリアルモニターを開くための時間を確保

//起動回数をインクリメントし、再起動ごとに表示
++bootCount;
Serial.println("起動回数: " + String(bootCount));

//ESP32のウェイクアップ理由を表示
print_wakeup_reason();

/*
まずウェイクアップソースを設定します。
ESP32を外部トリガーでウェイクアップするように設定します。
ESP32にはext0とext1の2種類がありますが、ESP32C6ではext0がサポートされていないため、ext1を使用します。
*/

//ext1を使用する場合は以下のように設定します
esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK,ESP_EXT1_WAKEUP_ANY_HIGH);

//スリープに入る
Serial.println("スリープに入ります");
esp_deep_sleep_start();
Serial.println("このメッセージは表示されません");
}

void loop(){
//この関数は呼び出されません
}

デモ2: タイマーウェイクアップによるディープスリープ

ESP32は、IoTアプリケーションにおいて重要な要素である電力効率を向上させるためにディープスリープモードを提供します。このモードでは、CPU、RAMの大部分、およびAPB_CLKからクロックされるすべてのデジタル周辺機器が電源オフになります。チップの中で電源がオンのままになる部分は、RTCコントローラー、RTC周辺機器、およびRTCメモリのみです。

このコードは、タイマーを使用してウェイクアップする最も基本的なディープスリープと、RTCメモリにデータを保存して再起動時に使用する方法を示しています。

/*
タイマーウェイクアップによるシンプルなディープスリープ
=====================================
このコードはパブリックドメインライセンスの下で提供されています。

著者:
Pranav Cherukupalli <[email protected]>
*/

#define uS_TO_S_FACTOR 1000000ULL /* マイクロ秒から秒への変換係数 */
#define TIME_TO_SLEEP 5 /* ESP32がスリープする時間(秒単位) */

RTC_DATA_ATTR int bootCount = 0;

/*
ESP32がスリープから目覚めた理由を表示するメソッド
*/
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("RTC_IOを使用した外部信号によるウェイクアップ"); break;
case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("RTC_CNTLを使用した外部信号によるウェイクアップ"); break;
case ESP_SLEEP_WAKEUP_TIMER : Serial.println("タイマーによるウェイクアップ"); break;
case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("タッチパッドによるウェイクアップ"); break;
case ESP_SLEEP_WAKEUP_ULP : Serial.println("ULPプログラムによるウェイクアップ"); break;
default : Serial.printf("ディープスリープによるウェイクアップではありません: %d\n",wakeup_reason); break;
}
}

void setup(){
Serial.begin(115200);
delay(1000); //シリアルモニターを開くための時間を確保

//起動回数をインクリメントし、再起動ごとに表示
++bootCount;
Serial.println("起動回数: " + String(bootCount));

//ESP32のウェイクアップ理由を表示
print_wakeup_reason();

/*
まずウェイクアップソースを設定します。
ESP32を5秒ごとにウェイクアップするように設定します。
*/
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
Serial.println("ESP32を" + String(TIME_TO_SLEEP) + "秒ごとにスリープするように設定しました");

/*
次に、シャットダウンする周辺機器/オンにしておく周辺機器を決定します。
デフォルトでは、ESP32はウェイクアップソースに必要のない周辺機器を自動的に電源オフしますが、
より詳細に設定したい場合は以下を参考にしてください。
詳細はAPIドキュメントを参照してください:
http://esp-idf.readthedocs.io/en/latest/api-reference/system/deep_sleep.html
以下の行は、すべてのRTC周辺機器をディープスリープ中に電源オフにする例としてコメントアウトされています。
*/
//esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
//Serial.println("すべてのRTC周辺機器をスリープ中に電源オフに設定しました");

/*
ウェイクアップ原因を設定し、必要に応じてディープスリープ中の周辺機器の状態を設定した後、
ディープスリープを開始します。
ウェイクアップソースが提供されずにディープスリープが開始された場合、
ハードウェアリセットが発生するまで永遠にスリープします。
*/
Serial.println("スリープに入ります");
Serial.flush();
esp_deep_sleep_start();
Serial.println("このメッセージは表示されません");
}

void loop(){
//この関数は呼び出されません
}
tip

ディープスリープモードとウェイクアップ機能をさらに活用する方法を学びたい場合は、Arduino IDEでESPが公式に作成したサンプルプログラムを参照してください。

リソース

コースリソース

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

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

Loading Comments...