Skip to main content

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 ESP32C6XIAO ESP32C3XIAO ESP32S3
プロセッサEspressif ESP32-C6 SoCEspressif ESP32-C3 SoCEspressif 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 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、1xSDIO 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 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
バッテリー充電電流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

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

特徴

  • 強化された接続性: 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スイッチ

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); // 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受信
D8SCKGPIO19SDIO_CLKGPIO、SPIクロック
D9MISOGPIO20SDIO_DATA0GPIO、SPIデータ
D10MOSIGPIO18SDIO_CMDGPIO、SPIデータ
MTDOGPIO7JTAG
MTDIGPIO5JTAG、ADC
MTCKGPIO6JTAG、ADC
MTMSGPIO4JTAG、ADC
ENCHIP_PUリセット
BootGPIO9ブートモード開始
RFスイッチポート選択GPIO14オンボードアンテナとUFLアンテナの切り替え
RFスイッチ電源GPIO3電源
ライトGPIO15ユーザーライト

入門ガイド

XIAO ESP32C6をより早く使い始められるように、以下のハードウェアとソフトウェアの準備をお読みいただき、XIAOを準備してください。

ハードウェアの準備

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

tip

一部の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のインストールを完了する必要があります。

tip

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

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

  1. 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」のシルクスクリーンマーキング近くの右側に配置する必要があります。

caution

バッテリー電源を使用する場合、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
}
tip

ディープスリープモードとウェイクアップ機能をより多く使用する方法を学びたい場合は、Arduino IDEでESPがチップ用に公式に書いたサンプルプログラムをより多く見つけることができます。

リソース

コースリソース

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

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

Loading Comments...