このエントリはSeeed UGアドベントカレンダー2022の12月20日の記事となります。
先日、Seeed Studio XIAO
(以降XIAO
)シリーズであるSeeed Studio XIAO ESP32C3
(以降XIAO ESP32C3
)を購入しましたので、そのファーストタッチということで機能を確認してみたいと思います。自分はスイッチサイエンスさんで購入をしました。同時にSeeed Studio XIAO nRF52840 (Sense)
も購入しました。
Seeed Studio XIAO ESP32C3www.switch-science.com
XIAO ESP32C3
の大きな特徴としては他のXIAO
の仲間であるものと大きく違い2.4 GHz WiFi
が使用できる点かと思います。XIAO nRF52840
を使用したものもありますが、こちらの通信機能はBluetooth
のみ対応、それに比べるとXIAO ESP32C3
はWiFi
も使用可能という点が大きく異なります。XIAO
の小さなボディ!に通信機能!これはかなりの用途があるのではないでしょうか。ちゃんと技適にも対応していますのでご安心を。
WiFi
を使用するため、アンテナを接続することできるようになっています。本体を購入するとこのアンテナも付属してきます。
スペック
以下のリンクから詳細を確認してもらえればいいのですが
基本的なスペックをまとめるとこんな感じ
- 最大160MHzで動作する32bit
RISC-V
シングルコア・プロセッサESP32-C3を搭載 WiFi
はIEEE 802.11b/g/nプロトコル
に準拠。ステーションモード、ソフトAPモード、ソフトAP+ステーションモード、プロミスキャスモードに対応Bluetooth
はBluetooth 5
およびBluetooth mesh
の機能をサポート- ディープスリープ時の消費電力は約43μA
- 400KBのSRAMと4MBのフラッシュメモリーを内蔵
- 超小型→
20x17.5mm
- インタフェース:1xI2C、1xSPI、1xI2S、2xUART、11xGPIO(PWM)、4xADC、1xJTAGボンディングパッドインタフェース
Arduino IDE
での設定
では、PCにUSBケーブルで接続して設定をしていきます。USB Type-C接続なのもいいですよね~
続いてArduino IDE
を起動します。今回はArduino IDE 2.03での設定となります。
まずは、メニューから【ファイル】→【基本設定】を選択し、【基本設定ダイアログ】の下部にある【追加のボードマネージャのURL】の入力ボックスに以下のURLを入力して、【OK」ボタンをクリックして設定を終了させます。
追加のボードマネージャのURL
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
追加のボードマネージャのURLの設定が終わったら、画面右のボードマネージャーを開き検索ボックスにesp32
を入力をして、絞り込みを行います。そして、表示されたesp32
のパッケージの【インストール】ボタンをクリックします。パッケージのインストールが完了すれば、使用可能なのかなと思うのですが、ボードが誤認されることもあるようです。
自分の場合には画面の上部にあるボードやUSBポートの選択にそのままではXIAO‗ESP32C3
の表記が出てこず、ESP32S3 Dev Module
と認識されているようです。どうもデフォルトでこの認識がされる模様です。
そこでメニューの【ツール】→【ボード】→【esp32】→【XIAO ESP32C3】を選択します。これでボードの認識が正常なXIAO ESP32C3
になります。
この作業後には、アプリ上部のボード選択のダイアログからもXIAO‗ESP32C3が選択できるようになります。ちょっとだけ面倒。Arduino IDE 2
系以外ではもう少し簡単なのでしょうか。
ボード情報を確認すると以下のようになっているので、これが関係しているのかも?
これにて設定は完了です。
まずはLチカ
最初なのでまずはLチカをテストしてみようかなと思います。【スケッチ例】からBlink
をロードして、コンパイルをしてみると…以下のようなエラーがでます。
エラーメッセージをみるとLED‗BUILTIN
がないとのこと、ということは…そうXIAO ESP32C3
には本体にテスト用のLEDが存在しないようです。OutピンにLEDをつける必要がありますね。他のXIAOシリーズに比べると初期のテストがちょっと面倒…まあ、LEDをつけるだけにこの機種を選ぶ人なんていないのでいいのかもしれませんけど。
このエラーを回避するにはLEDをOutピンに設定することで回避可能です。今回はLED_BUILTIN
の代わりにledという変数に入れ替えています。D10ピンを使用しています。
// define led according to pin diagram int led = D10; void setup() { // initialize digital pin led as an output pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); // turn the LED on delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off delay(1000); // wait for a second }``` [f:id:ueponx:20221222075427p:plain] 無事に書き込みを行うことができました。 [f:id:ueponx:20221222075424p:plain] 実際にLEDはつけてないですけど、まあうまく動くでしょう😁 # ネットワーク機能を使ってみる Lチカも終わったでの今度はネットワーク機能のテストを行ってみましょう。 以下を参考にしてみます。 [https://wiki.seeedstudio.com/XIAO_ESP32C3_WiFi_Usage/:embed:cite] 以下のコードを```Seeed Wiki```からコピーして使っていきます。こちらのコードは実行時に存在する```SSID```のリストをスキャンして表示するというものです。 **サンプルコード**
include "WiFi.h"
void setup() { Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was previously connected WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100);
Serial.println("Setup done"); }
void loop() { Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found int n = WiFi.scanNetworks(); Serial.println("scan done"); if (n == 0) { Serial.println("no networks found"); } else { Serial.print(n); Serial.println(" networks found"); for (int i = 0; i < n; ++i) { // Print SSID and RSSI for each network found Serial.print(i + 1); Serial.print(": "); Serial.print(WiFi.SSID(i)); Serial.print(" ("); Serial.print(WiFi.RSSI(i)); Serial.print(")"); Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*"); delay(10); } } Serial.println("");
// Wait a bit before scanning again delay(5000); }
設定が問題なければ、特に問題なくコンパイルが行われ [f:id:ueponx:20221222075431p:plain] 書き込みが完了します。 [f:id:ueponx:20221222075434p:plain] 書き込み後は自動的に実行されます。USBシリアルの機能を使ってシリアルモニタ上に情報が出力が行われます。 [f:id:ueponx:20221222075554p:plain] [f:id:ueponx:20221222075447p:plain] #続・通信機能 先ほどは```SSID```の検出でしたが、次は```HTTP```通信を行ってみたいと思います。こちらは```Arduino IDE```のスケッチ例にある```basicHTTPClient.ino```を使用しますが、一部```HTTPS```の残骸等があるのでそれは削除しました。 また接続先は以下となっていて、接続するとHTMLが表示されます。 [http://example.com/index.html:embed:cite] **表示されるHTML** [f:id:ueponx:20221223235146p:plain] **変更したbasicHTTPClient.ino**
include <Arduino.h>
include <WiFi.h>
include <WiFiMulti.h>
include <HTTPClient.h>
define USE_SERIAL Serial
WiFiMulti wifiMulti;
char SSID = "MY_SSID"; //接続するSSID名へ変更 char PASSWORD = "MY_PASSWD"; //接続するSSIDのパスワードへ変更
void setup() {
USE_SERIAL.begin(115200);
USE_SERIAL.println();
USE_SERIAL.println();
USE_SERIAL.println();
for(uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
}
wifiMulti.addAP(SSID, PASSWORD);
}
void loop() { // wait for WiFi connection if*1 {
HTTPClient http;
USE_SERIAL.print("[HTTP] begin...\n");
http.begin("http://example.com/index.html"); //HTTP
USE_SERIAL.print("[HTTP] GET...\n");
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if(httpCode > 0) {
// HTTP header has been send and Server response header has been handled
USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
// file found at server
if(httpCode == HTTP_CODE_OK) {
String payload = http.getString();
USE_SERIAL.println(payload);
}
} else {
USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
delay(30*1000);
}
[f:id:ueponx:20221223235020p:plain] [f:id:ueponx:20221223235026p:plain] # 終わりに 今回は今年発売された```XIAO ESP32C3```を使用してみたという内容でした。最初にも少し書いたのですが```XIAO```の小さなボディに```WiFi```通信ができるというのは非常に魅力的な製品になっているかなと思います。個人的に残念に関したのは本体にテスト用のLEDがなかったことかなと思います。これさえあればLチカからすんなりネットワークの機能へと進んでいけるのになあという感じでしょうか。些細なことかもしれませんけど。 ほかにも```Bluetooth```の機能もあったりするのでこれはかなり面白いデバイスかなと思います。 ```XIAO nRF52840```も購入しているので、今後こちらも触ってみます。 # 参考リンク [https://wiki.seeedstudio.com/:embed:cite] [https://lab.seeed.co.jp/entry/2022/08/19/120000:embed:cite] [https://lab.seeed.co.jp/entry/2022/08/22/120000:embed:cite] # 追記 正式名称からは```Seeeduino```の表記は消えてしまったんですかね。```ArduinoIDE```で初期のXIAOは```Seeeduino```という名称が残っているようですが、最近は```Seeed Studio XIAO```という表記になっているので、変わったのかなと思ってしまいました。 [f:id:ueponx:20221224001223p:plain]
*1:wifiMulti.run() == WL_CONNECTED