SSブログ

ワイヤレスセンサー端末の製作(ESP32版)

ESP32搭載のESP-WROOM-32開発ボードを使ったワイヤレスセンサーターミナルを紹介します。
回路的には「ワイヤレスセンサー端末の製作」で紹介した回路のBOTTOM基板の一部を変更するだけで、図1にブロックダイヤグラムを、図2に変更したBOTTOM基板の回路を示します。
図3はEP8266用のBOTTOM基板に中継基板を介して接続する場合の回路で、今回ソフトを作るのにはこの中継基板を用いて行い、新たに基板製作やケース加工をすることはしませんでした。(中継基板を使う場合 ケースによってはスペースが足りず取り付かなかったり、WiFiアンテナが遮られたりするので注意してください。)
他の部分の回路や製作方法、TWELITEの設定に関しては「ワイヤレスセンサー端末の製作」の記事を参照願います。

図1 ブロックダイヤグラム
ESP32_WSTブロック図.jpg

図2 ESP32 を使ったBOTTOM基板回路 (2021.05.17更新)
ESP32_WST_BOT回路図(2).jpg

図3 ESP32用中継基板を使ったBOTTOM基板回路 (2021.05.17更新)
ESP32_WST_BOT回路図(1).jpg

ESP8266では時分割のスレッドなので TWELITEからのシリアルデータ取りこぼしを防ぐためにいくつかプログラム上の小細工をしていましたが、ESP32はDual coreなので1つをTWELITEからのシリアルデータ取り込み専用に使うことができるので取りこぼし防止の小細工が不要になります。
これによってプログラムがシンプルになり作りやすくなりました。
またシリアルポートは3つまで持つことが出来るのでTWELITE用とプログラム用に別々のポートを使え、ESP8266の時のようにスイッチで切り換える必要はなくなりました。


ソフトウェア

ソフトウェア => ダウンロード (2021.05.21 更新)
ソフト修正 => 参照 (2021.10.03 追加)
プログラムの構成 => 参照
設定(CONFIG)ファイルの作り方 => 参照
取り扱い説明 => 参照

毎度のことですがプログラムの完全な動作保証は致しかねます。
不具合がありましたらご自身で対応をよろしくお願い致します。

・IDEはArduino IDEにESP-WROOM-32用ファイルを追加したものを使います。
方法はこちらを見て下さい。
https://garretlab.web.fc2.com/arduino/esp32/installation/

・ESP32のソフトウェアを作成するにあたってはいろいろ制約があるようで、ESP8266からの書き換えに意外と時間がかかってしまいました。
参考までにいくつか触れておきます。(もしかしたらMulti taskで動作させていることが関係しているかもしれませんので、その点考慮願います。)

1. Dual core はcore0とcore1 があります。UART受信プログラムをcore0で走らせるとwatchdogが作動します。watchdogの対応方法もあるのかもしれませんが、core0はシステム関連の処理も入るらしいので、UART受信はcore1で行うことにしました。これで問題なく動作してます。

2.LCD表示でLiquidCrystal_I2Cライブラリを使っていますが、Setupで初期化表示してその後マルチタスクを起動してCore0から表示をしようとすると画異常になります。Core0の初めで再度初期化処理をしたら正常に動作しました。

3.Core1からI2C通信, gpio制御をすると正常に動作しません。I2C-拡張GPIO (PCAL9555APW) ではキーボタン入力を検出できませんでした。 I2C通信、 gpio制御はCore0で行う必要があるようです。
(Core1でのSPI制御は未確認。現在はSD card用にCore0で制御。)

4. メール送信をしようとしたら突然 "Core 0 panic'ed" というようなメッセージが出てリブートしました。原因は xTaskCreatePinnedToCore() で指定するstackサイズが小さかった為。メール送信関数でバッファとして配列1024Bを準備したためのメモリー不足かと思われます。4096 -> 8192 に変更して解決しました。
キーワードは”コア0 パニック”です。(”コア1 パニック” もあるかもしれません) 出てきたらまずはこの対応をしてみては。

5.ブザー用にTone32ライブラリを使いましたが、ブザー音を出している間delay()をかけているのでTask2のループ処理が停止してしまいます。そこでライブラリを修正してdelay()を使わないようにしました。しかし次の問題として、アラーム時にメール送信をするとメール接続と送信で5秒位Task2のループ処理が止まってずっとブザー音も出てしまいます。(間欠ブザーにならない)
そこで間欠制御する部分をハードウェア(ICM7555)を使って行うことにしました。(上の回路図参照)
ICM7555を使うと最初のブザー音だけ時間が長めになります。

書き出してみるとこれだけなのですが、個々の対策を探したりあれこれ実験したりで結構時間がかかりました。事前にこういったことを知っているのと知らないのでは大違いだと思います。ご参考になれば幸いです。


===== 関連記事 =====
ワイヤレスセンサー端末の製作
ワイヤレスセンサー端末の製作(Raspberry Pi版)
ESP32 & 2.8" G_LCD一体型ユニットの製作(3)


>> ブログ記事一覧へ
nice!(0) 
共通テーマ:趣味・カルチャー

nice! 0