ようやくラズパイで稼働

 Rover Mini 1.3i の車載コンピュータ(ECU)のモニタ,Haskell プログラムの ラズパイでのコンパイルに手間取っていましたが,ようやく,稼働しました。

車載したラズパイで稼働させた MEMSモニタ

 現在の稼働環境は,ハードウェアとしては Raspberry Pi 3B と自作の USB シリアルケーブル。ソフトウェアは RaspberryPi OS で導入した Haskell Platform 付属の GHC と Cabal。リソースモニタでメモリや CPU の使用率などを見ていますが,10%程度くらいの消費率で終わっています。

コンパイルまでの道のり

 自分のための覚書として書いておくと,ラズパイでの Haskell プログラムのコンパイルは,基本的には動作します。ただし,やはり大物ライブラリのコンパイルに難儀します。今回のMEMSモニタでは Brick という TUI ライブラリなどを使用していますが,例えばそうしたライブラリの中に lens など大型ライブラリに依存しているものがあると,これをコンパイルしなければなりません。

 3B は内部メモリが 1GB 版のものを使っていますが,OS の初期設定で,スワップファイル領域が数百メガとかなり小さいです。スワップファイルが小さいままだと,大きなライブラリを GHC がコンパイルするのにメモリスワップが大量に発生してしまうようです。また,電源にまともなものを用意していない自分がいけないのですが,低電圧警告も頻繁に出ます。スワップファイル領域を2GBに設定しておくことで,無事 lens ライブラリもコンパイルできました(数値に根拠はありません。見ていた範囲では,1GBくらいあればなんとかなりそう)。

 

ラズパイ上で動かした自作の MEMS モニタ

その他

 うちの Mini は 92 年式の初期型インジェクション・マニュアル車なのですが,この時期の車載コンピュータ(MEMS 1.3?)は,後のもの(MEMS 1.6)と仕様がかなり異なるようです。MEMSモニタを制作する上で気づいたのは,吐き出されるデータの数が少ないことと,後続のECUがオートマのニュートラル・パーク識別に使っている信号線をクーラー(エアコン)のオン・オフ識別に使っていることです。世界的にモニタプログラムを制作している人が多くなっているので,英語で情報提供した方がいいかな?

 My Mini is an early injection manual car model of 1992, and the specifications of the in-vehicle computer (MEMS 1.3?) of this type seem to be quite different from the later one (MEMS 1.6). As making a MEMS monitor programme, I noticed that the amount of data was small, and that the signal line used by the latter subsequent ECU to identify the neutral park of the automatic transmission was used to identify the on / off of the cooler (air conditioner). Since many people are making rover mini mems monitor programme all over the world, I provide this information in English.

今後の課題

いくつもあります。

  • 表示画面を現在のスクリーンの大きさに合わせる
  • テキスト表示だと見づらいので,HTML表示にする??
  • スタートアップ時にキーボードから端末を起動してプログラムを起動しているのを電源ONで稼働できるよう自動化
  • プログラムを終了したらシャットダウン

 まぁ趣味活動なのでぼちぼち。そもそも Haskell を使い続けるのかということもあります。IoT だと C++ とか Rust とか Elixr とかがいいのかもしれません。Haskell は関数型言語かつ高級言語,IoT には向いていないです。とはいえ,Rover Mini のMEMSシステムは30年前以上に開発されたもので,動作速度も遅いですから,3B くらいの仕様であれば十分使えそうです。400m秒ごとに数十バイトのデータが出てくる程度のシステムですので,今のところは十分間に合っています。

写真は,後で夜間撮影したものを追加します。これからこれからモデルナのワクチンを打ってもらいに移動するので,その後にでも。