2022年5月2日

HUD #8: 3代目 HUD制作中、今度は ESP32

見返したら 前回の記事が 2年ちょい前だった。
もっとも、この 2年間 「時々フリーズする」のと「自作のハーフミラーのフィルム剝れてきた」以外には大した問題もなく使えているというのもある。

フィルム剝れたことで 一度メンテナンスしなければとは思っていたのだが、ついでにもう少しコンパクトにまとめたい欲が出てきたので 3代目の構想。

ラズパイはなかなかにパワフルなのだけれど、ちょっとした工作にはオーバースペック気味で、とはいえ 使い慣れた Arduinoはスペック低すぎ・・・ということで ESP32に手を出してみた。

ここに至るまでトラブル多すぎて書ききれないんだけども、覚えているだけでも挙げると

  • CANで直結したい → 無理でした
    • OBD-IIの無線ドングルを解体して 3.3VのCANトランシーバ埋め込んで有線ドングルを作った
    • web見ながら CANのライブラリ使ってアクセスしてみたけどどうにも繋がらない、おまけにエンジンチェックランプまで点灯した・・・調べてみると ウチの車は CANの線を使用しないか、あるいは別のモードでのアクセスらしい。
    • エンジンチェック点灯させたことで相当ビビッてしまい、これ以上深追いはせず ELM327にまかせた方がよさそうと判断して 無線ドングルに変更。
  • いきなり画面が出なくなった
    • ラズパイでは HDMIで 5インチLCDを接続していたが、2.4インチの SPI液晶に変更。グラフィック周りは TFT_eSPI。
    • 見た目にこだわりたいので TrueTypeフォントのレンダラ組み込み。
    • どうにか表示がまとまってきたので 無線ドングルから引っ張ってきたデータを表示。
    • ・・・したら 画面が出なくなった。フォントサイズ変えると 何文字かは表示される。 何かメモリ足りてなくなったっぽい。
    • 同僚のアドバイスで LovyanGFXに変更 → したら 今度はカーネルパニック? が起き始めて重症化。
    • そもそも ESP32はメモリ少ないんだから 画面全域のダブルバッファは無理だと気が付くまで 1週間。表示周りを刷新して メモリサイズと 画面ちらつきとのバランスを取っていくのにさらに 1週間。
  • ELMduinoめ、、、、
    • 表示周りが片付いたので今度こそ、と思ったら OBDからまともにデータが引けてない。ELMduinoのリファレンスには大したこと書いてないし、web漁っても リファレンス以上の情報は出てこないし、で 仕方なくソースコード読んで使い方を解析。さらに 1週間。
  • BluetoothSerialめ、、、、、、
    • 今度こそ、今度こそ、、、、、、、OBDからデータは引けるようにはなったが 1Hz とか遅すぎ、、、、
    • ELMduino のノンブロッキングアクセスの使い方が正しくない可能性も少しはあるものの、もしかして ボーレート 9600bpsなの?? と思っている。
      ちなみに ラズパイの時は 115200bpsだった。
    • web漁っても ボーレート指定する方法がないっぽいので、そうなれば 無線をあきらめて ELM327へ 有線で接続ということになるのかも。そうすると今度は 5V/3.3Vとかあの辺の話が出てきて ああああああああああ! とかなりそうだと今から頭抱えてる。
ま、こんな感じ。表示だけならできているのだけど、ゲロ遅。

ちなみに、ウチの車から遠く離れた場所で コードを書いてるので、動作確認のたびに外に出てエンジンかけて・・・とやるのが激しく面倒。CANのエミュレータとかあれば 捗りそうだとは思うけど、趣味の工作にそんなもの不要だろ、、、、とも思うし、当面は PCと 外とを往復する生活が続きます。