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 ESP32-C6XIAO ESP32-C3XIAO ESP32-S3
プロセッサEspressif ESP32-C6 SoC
2つの32ビット RISC-V プロセッサ、高性能プロセッサは最大160 MHz、低消費電力プロセッサは最大20 MHzで動作
Espressif ESP32-C3 SoC
RISC-V シングルコア32ビットチッププロセッサ、4段パイプラインで最大160 MHzで動作
Espressif ESP32-S3R8 SoC
Xtensa LX7 デュアルコア、32ビットプロセッサ、最大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
消費電力モデル(標準)
(供給電力:3.8V)
モデムスリープモデル:30 mA
ライトスリープモデル:3.1 mA
ディープスリープモデル:15 μA
モデムスリープモデル:24 mA
ライトスリープモデル:3 mA
ディープスリープモデル:44 μA
モデムスリープモデル:27 mA
ライトスリープモデル:2 mA
ディープスリープモデル:14 μA
動作温度-40°C ~ 85°C-40°C ~ 85°C-40°C ~ 65°C

XIAO ESP32-S3 vs ESP32-C3 vs ESP32-C6: Which One Is Best for Your Project?

特徴

  • 強化された接続性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電源出力
D0AnalogGPIO0LP_GPIO0GPIO、ADC
D1AnalogGPIO1LP_GPIO1GPIO、ADC
D2AnalogGPIO2LP_GPIO2GPIO、ADC
D3DigitalGPIO21SDIO_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 Switch Port SelectGPIO14オンボードアンテナとUFLアンテナの切り替え
RF Switch PowerGPIO3電源
LightGPIO15ユーザーライト

入門ガイド

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と同様に、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
}
tip

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

リソース

ハードウェア設計

機械設計

コースリソース

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

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

Loading Comments...