こんばんは。
今回は前回記事のコードをいろいろ手を加えて改善し、M5StackとM5CameraのWiFi, UDP動画通信で、パケットロスが格段に少なくなりました。
しかも、パケットロスをあまり感じさせないように画像表示プログラムを修正し、そして、24時間以上の長時間連続WiFi, UDP通信でもESP32のCPUがフリーズしない安定した動作が実現できるようになりました。
これで、M5StackやESP32のWiFiを長時間フルパワーで連続運転させた場合の、Arduino coreプログラミングの勘所や注意点がだんだん分かって来ました。
今回の実験は、正直、かなり辛かったです。
なぜなら、パソコンのUSBポートを占有され、24時間以上パソコンのシリアルモニターを動かし続けなければならなく、他の仕事がかなり制限されてしまったからです。
8時間経過直後にフリーズすることが多く、コードを修正してもう一度最初から実験やり直し、という状態が1か月近く続きました。
時々10時間後にフリーズということもありましたが、圧倒的に8時間がデッドラインだったのです。
いろいろ実験してみた結果、24時間経過すれば概ねプログラムには問題ないだろうという個人的結論に達しました。
今回のポイントは、WiFi UDPはCPU core 0で動かし、M5CameraのDMA ( Direct Memory Access )はCPU core 1で動かした方が良い結果だったということです。
それに伴い、フリーズを防ぐためにはウォッチドッグタイマ動作を有効にすべきだという結論にも達しました。
ただ、そうすると、M5CameraのDMA処理が間に合わないので、VSYNC(垂直同期)信号検知をポーリング処理から「割り込み」処理に変更するという結論に達しました。
それと、大事な事として、CPUとWiFiをフルパワーで長時間連続稼働させると、CPU温度がとんでもないことになってフリーズしたので、その解決策として、冷却ファンを使うというべきだという結論に達しました。
ということで、まずは以下の動画をご覧ください。
どうですか?
グレー色のM5StackのYahooニュース電光掲示板時計は以前のこちらの記事で作成したものです。
ウォッチドッグタイマ動作を有効にしているので、ループ内にdelay(1)相当が入っていますが、動画がなかなかスムースですよね。
そして、前回記事からブラッシュアップしたのは、WiFi UDP のパケットロスがあった場合、画像表示を一時ストップさせたことです。
それによって1フレーム画像は崩さずに変なノイズ画像が無くなったので、格段に見やすくなったと思います。
パケットロスは非力なWiFi機能ではどうしようもないので、パケットロスしながらも、これだけのスムースさで動画表示できれば、私的には充分満足ですね。
簡易的な監視カメラにも使えそうですね。
ほんとはもっと画面を大きくしたいのですが、いかんせんPSRAMを使っていないので、この大きさが限界です。
それについては今後の課題です。
では、これから今回の実験の報告をしてみます。
因みに、何度も言っていますが、私はアマチュア独学です。
誤ったり勘違いしているかもしれませんので、何かお気づきの点がありましたらコメント投稿でご連絡いただけると助かります。
ずーっとWDT有効と思い込んでいました。
大変失礼しました。
(2019/12/18)
- 使ったもの
- 長時間連続稼働させるとフリーズする問題について
- ESP32同士でDMAやWiFi UDP送受信を長時間安定動作させる個人的解決方法
- M5StackとM5Cameraのブラッシュアップした長時間WiFi UDP画像転送スケッチ
- コンパイル書き込み実行
- 編集後記
使ったもの
M5Stack Basic
Espressif SystemsのWiFi BluetoothマイコンESP32を搭載し、micro SDカードスロット、LCDディスプレイ、ボタンスイッチ、Groveコネクタ、スピーカー、バッテリー等を搭載した全部入りモジュールです。
(追記)
M5Stack Basicは、この記事を書いた当時より格段にバージョンアップしております。
以下のスイッチサイエンスさんの公式サイトをご参照ください。
https://www.switch-science.com/collections/%E5%85%A8%E5%95%86%E5%93%81/products/9010
M5Camera
これはスイッチサイエンスさんで購入できます。
https://www.switch-science.com/catalog/5207/
なぜかAmazonではまだ売っていませんでした。
M5Cameraについては以下のレビュー記事を参照してください。
M5Camera をレビューしてみた。分解したり、Arduino IDE でスマホに映したりする実験
小型冷却ファン
これについては、後で詳しく説明していますので、参照してみてください。
良質なUSBケーブル
USBケーブルは粗悪で安価な物や、細くて長いものを使ってしまうと、大電流による電圧降下でM5StackやM5CameraのCPUが誤動作しますので、出来るだけ良質で太くて短いものを使うことをお勧めします。
私は以下の物を使っています。
ただし、ケーブルが硬いので取り回しづらいです。
micro SDHCカード
M5StackのLCDに日本語表示させるためのフォントファイルを保存しておくために使います。
私は以下の物で問題無く動きました。
信頼ある大手メーカー製の使用をお勧めします。
良質なUSB電源(4ポート以上)
十分余裕のある出力(1.0A以上)で4ポート以上あるUSB電源があれば良いと思います。
M5CameraとM5Stackと冷却ファン2つを動かします。
パソコンで4ポート無ければ、別途外付けのUSB電源が必要です。
コメント
お久しぶりです。いつも拝見させていただいています。
>小型冷却ファン
M5Stack用のファンは以下で販売されています。
M5Stack FAN Module:$10.91
https://www.aliexpress.com/item/32907901908.html?spm=a2g0o.productlist.0.0.7ab27a620ccZZN&algo_pvid=9ee4c554-4fad-49d7-af94-4cb24e16b72f&algo_expid=9ee4c554-4fad-49d7-af94-4cb24e16b72f-3&btsid=76999147-e035-4009-9452-d59cc2695eac&ws_ab_test=searchweb0_0,searchweb201602_6,searchweb201603_53
macsbugさん
コメントいただき、ありがとうございます。
そのファンは以前Twitterで情報を頂いたんですが、その時は単体では売っていませんでした。
今はもう単体で売っているんですね。
私はAliexpressは使ったことが無いので、いつかAmazonかスイッチサイエンスさんで販売してほしいなぁ・・・と願って待っています。
いつも有益な情報ありがとうございます。
m(_ _)m