タッチディスプレイ搭載のESP32の開発ボードです。
温度センサーと湿度センサー、あわよくば空気の質(二酸化炭素・排気ガスなど)を測定出来るセンサーを付けて、10秒ごとくらいで状況表示したいなと思い購入しました。
以降、この製品を使用した趣味で活動している開発記録になります。
開発中のGitHubのリポジトリ(途中で名称変更するかも)
https://github.com/kamomilen/WT32-SC01-Plus_LVGL-HardwareTest
Gitの使用経験はありますが、GitHubは今回初めてですね。
更新履歴
2023~
03-12 新規登録
03-13 起動時のデモ動画を追加、サンプルプログラムのベースを変更、日本語フォントを追加
03-14 描画速度の比較動画を追加
03-17 明度の動画を追加、残課題の追加+更新、4ピンケーブルの説明の訂正
03-20 GitHubへのリンクを追加、MMCまたは互換カードとスピーカー処理の実装中の旨を追加
03-21 MMC互換カードについて少し進展。
03-22 Bluetoothについて少し記載。MMC互換カードの処理を大まかに実装完了
03-23 レビュー構成を少々変更。MMC互換カード実装とブザー実装の進展を追記
04-05 画面ブランク(明度0)、タッチによる復帰(明度127)の実装の追加
04-23 Extended IO 8PinのLチカテストを追加
ケースのテープを外すと内容物が盛り上がってくるくらい詰まってるよ
パッケージ
内容物(USB Type-C -> Aケーブル、本体、デバッグ用 7ピンケーブル、RS485用 4ピンケーブル)※4ピンはバッテリーケーブルではありませんでした。
拡張用の8ピンケーブルが何故か入っていない。2ピンのブザー用ケーブルも無い。
本体裏面
ケーブルを挿した状態
デバッグ用に接続してみたが、実際はデバッグ用ポートが不要。本体側USBからType-C -> Aのデータケーブルで別途繋げばCOM0としてシリアル通信が出来るようになる。
ただ、それなりにアンペアが必要。電源供給量が少ないとディスプレイ表示されない。
感覚的に最低1Aは必要だと思っていて、Type-C -> A より Type-C -> C で接続したほうが安全かもしれない。
ビルドした内容をアップロードしたときに自動で再起動してくれないので、USBケーブルを抜き差しが必要になる。
デバッグ用ポートを使用してUSB接続すると、このあたりを自動でやってくれるみたい。とりあえず無くても開発は可能なようです。
マニュアルは公式サイトからダウンロードしました。
http://www.wireless-tag.com/wp-content/uploads/2022/11/WT32-SC01-Plus-V1.3-EN.pdf
それなりに癖がある模様
とりあえず電源を入れてみる。プリインストールデモが表示される。
GitHub上のどっかで一度見た気がするんだけど、記録残してなかったのでURLがわからない。
→多分・・・これ。
https://github.com/wireless-tag-com/ZX3D50CE02S
どこからかのサイトから持ってきたのですが、下位バージョンとの比較です。
比較動画とかYoutubeとかで探すと海外の方がアップロードしていますね。
比べると描画速度が全然違う印象。Plusの方が全然良い。
あとはBluetoothを使用するのであれば、バージョンが5に対応しているのは大きい気がします。
OTGに関してはどの程度使えるか不明。マウスやキーボードは使えると思うがそれ以外は独自にドライバを組み込まないと動かないと思う。
MMC互換カード対応なので、そこから画像を読みだしたり、SQLite(データベース)やJSON(コンフィグファイル等)など使って情報を読み書きするとよいかもしれない。
WT32-SC01 Plus のデモプログラムとして下記がありました。
・https://github.com/fritsjan/WT32-SC01-PLUS-PLATFORMIO
Platformioが使える環境を用意すれば、ローカルでビルドしたもので使えそうかなと。
ということで、VSCodeにプラグインがあるので導入しました。
platformio.iniを開いて下記のライブラリを比較的最新にしてあげます。不安な場合はそのままで。
・LovyanGFX
・lvgl
書き込みが成功するとこんな感じでした。
UI回りの調査
下記を参考にUI回り(LVGL)のドキュメントを見つつサンプルプログラムに追加を加えました。
・https://github.com/lvgl/lvgl/blob/master/docs/README_jp.md
温度と湿度のラベルを追加してみました。
すると・・・文字化けして□になりました。英数字と基本記号は問題ないようです。
デフォルトは「lv_font_montserrat_14」というフォントサイズ14のものが使われていました。
これを「lv_font_simsun_16_cjk」というフォントサイズ16の中国語 (簡体字)フォント?に変更してみました。
表示されるようになりましたが、一部の文字が表示されません。
湿度の「湿」と記号の「:」が表示されません。
色々試した結果、日本語フォントから指定された文字を組み込めることがわかりました。
何を思ったか、「Hachi Maru Pop」をダウンロードして入れてみます。
「Online Font Converter」を使用します。
画像でも表示していますが、このように入力しました。
Name:lv_font_hachimarupop_regular_custom_14
Size:14
Bpp:1 bit-per-pixel
TTF/WOFF file:ダウンロードしたファイル(HachiMaruPop-Regular.ttf)
Symbols:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890:%-_,./+* :%-_、。/+* テスト温湿度
注意点としてNameの項目にはハイフンを使わない方がよい。使うとビルド時にエラーが出る。
「Convert」ボタンを押すと「lv_font_hachimarupop_regular_custom_14.c」がダウンロードされます。
これを下記の画像階層の場所へ登録する。
決まった文字だけになりますが、無事に表示出来るようになりました。Size14だと少し見にくいですね。ボールドになってないからか。
あとで「Noto Sans Japanese」でもう一度試してみたいと思います。
この製品はタッチ操作が出来るので、下記を実装したいと思っています。
・無操作時でブラックスクリーン化させる。
・ブラックスクリーン状態でタッチすると画面が表示される。
なので、あとは明度を下げる実装が出来ればOKかな。
スライドバーが動作するので、これが明度と連動させればいいかも。
★2023-03-17追記 実装出来た。
★2023-04-05 追記
画面ブランク(明度0)、タッチによる復帰(明度127)の実装をした。
最後にタッチしてから1分後に明度を20%へ変更。
上記から更に1分後(最後にタッチしてから2分後)に明度を1/127に変更。
上記から更に1分後(最後にタッチしてから3分後)に明度を0に変更。
どの状態だったとしてもタッチすると強制的に明度127にするように変更。
明度1だったとしても微妙に見える。
明度0だった場合、タッチによってボタンを押してしまう恐れがある。
もうちょっと考慮が必要かもしれない。
ESP32-S3機能の調査
基本的には ESP32-S3 なので、Wi-FiとかBluetoothの接続も調べればすぐに出てくるはず。
MMC互換カードの読み書きも試したい。
そういえば、LVGLのドキュメントにシンボルアイコンの表示もあったなぁ。スマホ右側上部によくある電波マークなどです。ON/OFFなどはこのアイコンを使って表示させてあげればよいかもです。
※シンボルはデフォルトフォント「LV_FONT_MONTSERRAT」でないと使用できない模様。
下記のサンプルプログラムをベースとすればWiFi実装がいい感じに出来そう。
https://github.com/WojciechowskiMarek/WT32-SC01-Plus_ESP32-S3_WifiScan
一度選択してパスワードを入れたものはEEPROMに記録して、次回以降はそこから情報を読み出すみたい。
NTPサーバーとの接続もあるので、タイムゾーン設定なども日本向けに再設定。
「Your Contents」の場所へ自由に作成すれば良い。
なかなか使いやすいテンプレートですね。
ただ、シンボル記号がデフォルトフォントに入ってるので、作成した日本語フォントに切り替えるとシンボルが表示されなくなる模様。
ヘッダー部の領域、「Your Contents」の領域、WIFI設定の領域など、色々と表示領域の定義がある。
通常はデフォルトフォントを使用して「Your Contents」の領域だけ日本語フォントにするようにしてみた。
表示領域を細分化してあげれば細やかな対応も可能と感じた。
★2023-03-20追記
現在MMC互換カードの実装中。
16GBの手持ちの余りものを使ってみたらエラーが出る。
---- シリアル ポート COM5 を開きました ----
16:04:54:732 -> Name: --
16:04:54:732 -> Type: ----/----
16:04:54:732 -> Speed: 20 MHz
16:04:54:732 -> Size: 14940MB
16:04:54:739 -> CORRUPT HEAP: Bad head at 0x3fcb33d8. Expected 0xabba1234 got 0x3fcb1854
16:04:54:745 ->
16:04:54:745 -> assert failed: multi_heap_free multi_heap_poisoning.c:253 (head != NULL)
下記のようにパーティションを4096MBにしてみたが変わりは無かった。
手持ちに8GB以下とかあったかなぁ?
下記で試したが駄目だった。
→後日試したら結果的に使えた。
★2023-03-21追記
結果的に発注したMMC互換カードも同じエラーになった。
ソースコードをよく見直してみたら、ボタンを押したときの判定方法が悪かったらしい。
「/card」へのディレクトリマウントは出来た。
テキストファイルの書き込みも出来るようになったが、ファイルからの読み込み処理でエラーが出ているので、解析中。
これのゴールはMMC互換カードにSQLiteのDBファイルを保存して、読み書き出来るようにすること。(SQLを使用できるようになること)
★2023-03-22追記
MMC互換カードのアクセス制御がある程度実装出来た。
BluetoothはA2DPプロトコルによる音声連携が出来るようだ。
例えばスマートフォンとペアリングし、スマートフォンの音を受信してこの製品のスピーカー線を経由して音を出すような感じ。しかもモノラルスピーカー。
なんの意味があるのだろう。利用シーンが想像出来ない。
他のBluetoothプロトコルが出来るか不明。(調査中)
★2023-03-23追記
MMC互換カードのテキスト読み書き、ファイル名のリネーム、ファイルの削除の実装は完了した。
あとはバイナリファイルに対しての読み書きに対応すればMMC互換カードに関しては完全に完了する。(MMC互換カード内のファイル一覧の列挙、フォルダー作成は実装してないけれど、使わないからいいか・・・。)
Extended IO、RS485に対するGPIOピン番号の定義を書き込んだ。
MMC互換カード関連が終わったら、RS485のネットワーク通信の実装に移る。
Bluetoothは引き続き調査中。
残課題:
- MMC互換カード読み書きの実装(実装中)
- ESP-NOWを使用したESP間のネットワーク通信の実装(こちらはサーバ側として実装)
- Bluetoothの実装(ESP32-S3のサンプルを漁るか?)
センサー回りの調査
現在、Extended IOについては未調査。
8ピンが無いと、そもそも接続が出来ない。
JST MX 1.25mmピッチらしい。
2.54mmではない。合わなかった。
マニュアルに記載の内容のままですが、列挙します。
通常は8ピンの Extended IO は使わず、センサーを扱いたい場合は下記のようにする必要がありそうです。
・ESP32(マスター)は物理センサーは繋がないようにする。
・他のESP32(スレーブ)でセンサーのアナログ入出力を制御する。
・RS485の4ピンケーブルでESP32(スレーブ) -> ESP32(マスター) とで接続する。
・マスター側でスレーブのセンサー情報をRS485通信で取得して画面表示する。
結果的に 5V の供給線が1本ではなく複数本を想定しておかないといけなさそうです。
★2023-03-20追記
・Audioについて。
2ピンのモノラルスピーカーへ出力する線の情報が出ていますが、具体的に何をすれば音を出せるのかわかっていません。
マニュアルを眺めていると、「NS4168」を使用している模様。これはモノラル オーディオ パワー アンプらしい。
上記の画像にGPIOピン情報としてAudio Amplifierを追加しました。
このGPIOにアクセスして音を出力してあげればいけそうな感じはします。
下記の参考情報をもとに、これから実装してみる。
https://docs.m5stack.com/en/atom/atom_spk?id=easyloader
https://qiita.com/riraosan/items/7480276612d4cd257718
ブザーのAPIを叩くくらいは出来そう。
MMC互換カードの音声ファイルを再生出来るところまで出来たらいいけれど、MMC互換カードも着手中(模索中)だ。
★2023-03-21追記
ブザーについては難航中。もともとM5Stackのライブラリベースであったため、うまく根幹部分が流用出来ない。
実装出来るようになったら、AquesTalk ESP32との連携も視野を入れたいと思っている。
★2023-03-23追記
ブザーの実装は一応出来ているが、鳴らそうとすると画面UIに異常が発生する。
具体的にはLCDの光度が0になったり画面UIのアニメーション表示が止まる。
ボタンを設置していて、押したときに処理が動くからタッチは反応している模様。
EXTのGPIOを使用して外付けでスピーカーを経由させた方が動作するかもしれない。
★2023-04-23追記
Extended IO 8PinについてLチカテストした。
ケーブルは下記を使用した。
GitHubにてサンプルソースをコミット済みだが、通常は使わないのでコメントアウトしてある。
残課題:
- 使用可能なセンサーポート調査(アナログ・デジタル) →基本的にデジタルのみでアナログ入出力が無い
- 温度・湿度センサーを取り付けて値を表示させる。→RS485を経由して値を表示させる。(未実装)
- 2ピンのブザーを鳴らしてみる。→実装中
-
購入金額
4,164円
-
購入日
2023年03月01日
-
購入場所
AliExpress
ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。