Skip to main content

Seeed Studio XIAO ESP32C6の使用開始

Seeed Studio XIAO ESP32C6

はじめに

Seeed Studio XIAO ESP32C6 は、高度に統合された ESP32-C6 SoC を搭載し、2つの32ビットRISC-Vプロセッサ上に構築されています。高性能(HP)プロセッサは最大160MHzで動作し、低消費電力(LP)32ビットRISC-Vプロセッサは最大20MHzでクロック動作可能です。チップには512KBのSRAMと4MBのFlashが搭載されており、より多くのプログラミング領域を提供し、IoT制御シナリオにより多くの可能性をもたらします。

XIAO ESP32C6 は強化されたワイヤレス接続により、Matterにネイティブ対応しています。ワイヤレススタックは**2.4GHz 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プロセッサ、高性能プロセッサは最大160MHz、低消費電力プロセッサは最大20MHzで動作最大160MHzで動作する4段パイプラインを持つRISC-Vシングルコア32ビットチッププロセッサ最大240MHzで動作する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

機能

  • 強化された接続性: 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プロセッサを搭載し、高性能プロセッサは最大160MHz、低電力プロセッサは最大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 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
}

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

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...