XIAO ESP32S3 Senseを使ってみる その1(カメラ)
はじめに
今回はXIAO ESP32S3 Senseを使ってみました。XIAOシリーズの小型マイコンで、拡張コネクタを差すとカメラやSDカード、マイクを取り付けることができます。よくそこまで収まりますね...
カメラモジュールは熱くなるという印象があります。ArduCAMのストリーミングを試したときはチップが熱くなって、動作が鈍くなっていました。S3 senseはそのときよりも安定しているように感じています。
▼こちらの記事で詳しく検証されていました。
https://tamanegi.digick.jp/computer-embedded/mcuboa/xiaos3/
▼最近設計していたRumiCar-C3にカメラを搭載しようかなと思っています。XIAO系はピンの互換性があるのも便利ですよね。
https://protopedia.net/prototype/5030
▼以前MQTT通信、HID機能を試したときも使いました。
概要
▼SWITCH SCIENCEの販売ページはこちら。
▼Amazonの販売ページはこちら。
▼カメラはケーブルを延長したものがありました。DigiKeyで注文中です。
https://www.digikey.jp/ja/products/detail/seeed-technology-co.,-ltd/114993115/21277047
▼公式のGetting Startedはこちら
https://wiki.seeedstudio.com/xiao_esp32s3_getting_started/
円形ディスプレイも買ってみたのですが、また後日使ってみようと思います。
▼円形ディスプレイもGetting Startedがあります。ボタン電池が取り付けられるなと思っていたら、RTC用みたいですね。
https://wiki.seeedstudio.com/get_start_round_display/



Getting Startedの下のほうに、3Dモデルも用意されていました。これはありがたいです。
▼Prusa MK4の記事でも紹介していました。スナップフィットが使われていて、パチッと止まります。

microSDカードが深く差さらないので、力が加わると折れる可能性はありそうです。
▼Getting StartedのApplicationsに面白そうなサンプルがいくつかあります。こちらはGoogle CloudのサービスとChat GPTも使っているみたいですね。
https://wiki.seeedstudio.com/xiao_esp32s3_speech2chatgpt/
プログラムを書き込むときの注意点
ポートが認識しない場合があるのですが、BOOTボタンを押しながら電源を入れてみてください。ESP系だとよくやる方法です。
リセットボタンとBOOTボタンの両方を押した状態で、リセットボタン→BOOTボタンの順に離すのが楽かなと思います。
▼こちらでも言及されています。
この手順を踏まなくても、ポートを認識する場合もあります。拡張コネクタを取り付けた状態だとボタンが押せないので、取り外すことになるのは不便ですね。しかし、小型化には替えられない...
サンプルプログラムを試してみる
▼GitHubのリポジトリはこちら
https://github.com/limengdu/SeeedStudio-XIAO-ESP32S3-Sense-camera/tree/main
Code ->Download ZIPでプログラムをダウンロードできます。inoファイル以外に、camera_pins.hなどのヘッダファイルが必要です。
inoファイルのプログラムをコピー&ペーストしただけではコンパイルできないのでご注意ください。
写真を撮ってSDカードに保存する
▼take_photosを試してみます
https://github.com/limengdu/SeeedStudio-XIAO-ESP32S3-Sense-camera/tree/main/take_photos
デフォルトでは撮影周期が1分になっています。撮影された写真は、SDカードに保存されます。
今回は1秒周期で撮影してみました。それほど熱くなっていないように感じました。
▼撮影してみた写真。周囲の明るさや焦点距離の調整が必要かも?





▼動かしていると画像がぶれます。静止させておいた方が安定します。



プログラムの画質を変更して、UXGA(1600×1200)にしてみました。おそらく一番高い画質なのですが、撮影しようとすると以下のエラーが出ました。
Camera init failed with error 0xffffffff
PSRAMが有効かどうかでプログラムが分岐していたので、PSRAMを有効にすると実行できました。
▼ToolsのPSRAMで変更できます。

▼あんまり変わっていないような気もします。



▼ちなみに、私のiPhone8で撮影した写真はこちら。


Webサーバーを起動してパソコンで映像を見る
▼CameraWebServerを試してみます
https://github.com/limengdu/SeeedStudio-XIAO-ESP32S3-Sense-camera/tree/main/CameraWebServer
WiFiのSSIDとパスワードを設定してください。シリアルモニタにアドレスが表示されるので、パソコンのブラウザからアクセスします。
▼ブラウザで表示した様子。左下のボタンで写真の撮影と、ストリーミングの開始を選択できます。

設定項目が細かいですね。Gray Scaleにしたり、画質を変更したりできます。それ以外の設定項目はよく分からない...
画質が高すぎるとやはり処理が重くなるのか、飛び飛びになっていることがありました。
ちなみにFace Detection、Face Recognitionは画質が高すぎると実行できません。エラーが出ました。処理が重くなりすぎるのかもしれません。
▼画質の選択肢もいろいろあります。

▼Saveボタンを押すと、パソコンに画像が保存されました。

最後に
カメラの動作がどんな感じなのか分かったので、ロボットに搭載してみようと思います。Webサーバーで取得したカメラの映像をもとに、さらにパソコン側で画像処理を行いたいところです。
マイクもあるので、音声ファイルもWiFi経由で取得したいですね。LiPoバッテリーからの給電でも安定して動作するのでしょうか。