入手しやすいデバイスを使って作業効率アップ

M5StackやM5Paperなどを使って効率アップデバイスを作ります。

M5Stackの日本語表示

M5Paparは標準でTTFをそのまま表示させる事ができますが、M5Stackではライブラリを追加する必要があります。

以前いくつか試したのですが、手間がかかったり表示速度が遅かったりして一旦あきらめていました。

今まではイニシャル表示でも問題は無かったのですが、設備メンテナンスに広く使うようになってイニシャルがかぶるようになり、再度日本語表示を検討することにしました。

 

調べてるうちに見つけたのが「efont_Unicode_Font_Data」です。

これはヘッダファイルに16ビットのビットマップフォントデータを記述しておくという物で、SDカードは不要です。

フォントデータはライブラリ中のヘッダファイルに含まれており、インストール後はサンプルスケッチをすぐにビルドできます。

プログラムサイズが大きくなるので、デフォルトのビルドではプログラムエリア容量が不足します。私の場合はプログラム自体は小さいので「Huge APP」に設定しました。

フォントサイズを一番小さくしても十分読み取れました。

16ドット角のビットマップフォントなので拡大するとギザギザです。

 

フォントデータはBDFファイルのデータ部分そのままではなく、文字型配列に書き換えて記述されています。簡単に入れ替える事はできませんが、試しに1文字だけ「東雲フォント」の太文字に入れ替えてみました。

東雲フォントのデータはJISコードで、eFONTのヘッダファイルはユニコードで管理されています。

JISコードを調べてテキストエディタで書き換えますが、かなり面倒です。よっぽど読みにくい場合以外は意味がないでしょう。

 

昔のメーターの遠隔検針

昔のメーターを現場に行かずに読み取れたら便利です。

今はそういった事の出来るサービスがたくさん出ています。

検索で出てきた物のほとんどがWiFiかLANとACコンセントが必須でしたので、私の業務には使えません。

そこでメーターの画像取得のみ行う物を作ってみようと考えました。

M5TimerCamのサンプルに「CameraWebServer」があるので、M5Paperの「drawJpgUrl」を使えば読み出せます。

作ってはみましたが、外光や映り込みの影響が大きくて実用的ではありませんでした。

 

今のメーター遠隔検針はAIを使うようですが、以前7セグなら簡単な画像処理でも読み取れるという記事を見ました。

点灯か非点灯かが分かればいいのですから、各セグメントの真ん中らへんを決め打ちで読み取るというアイデアでした。

ついつい機械学習を使おうとしてしまう所です。

似たような話で、「円周率を求めるソフト」を作るには計算は不要で、すでに分かっている円周率を何万桁でもメモリーにコピーしておいて、必要に応じて読み出せば良いという話を昔本で読みました。

筆者の方はジョークのつもりだったかもしれませんが、こういった事に気付かないとコストや時間を無駄にしてしまいます。

 

M5Stackで動くBASIC言語

ArduinoやM5Stackで動作するBASIC言語は、検索するとたくさん出てきます。

よく見るのは「豊四季タイニーベーシック」です。

これはC言語で書かれたBASICインタープリタです。

コンパクトなので移植作業も時間がかかりません。

商用不可なので会社では使えません。

 

自宅でLoRa通信を使ったモニタ装置を作れないかと考えています。

WiFiが使える場合はM5Stack上でWEBサーバーを稼働させればいいのですが、そうでない場合はどうすればいいのでしょう。

そこでBASICインタープリタが出てきます。コマンドを拡張すればWEBサーバーの代わりになりそうです。

 

BASICインタープリタに関心を持ったのは私の業務経歴によるものと思います。

かなり昔ですが、8ビットパソコンを使った設備のメンテナンスをやっていたことがあります。フロッピーディスクが標準装備になった頃で、BASICで動いていました。

それが懐かしいのです。

今ではBASICインタープリタマイクロソフトのVBAくらいしかありませんが、デバッグが容易なのでよく使っていました。

ただ、BASICはビギナー向けという事だからでしょうか、職場では「VBAを使うのは沽券(こけん)にかかわる」みたいな空気がありました。

しかしVBAにしておけば、私の代わりの人はいくらでも作れるというメリットがあります。

 

パッケージM5Stack2.0.6で不具合が発生

ArduinoIDEでパッケージの更新をしたら、アップロード後起動しなくなりました。

「アップデートがあります」とポップアップが出たので、ついインストールをクリックしてしまいました。

起動しないのはタッチセンサーのGT911初期化で失敗し、再起動ループしているようです。

M5.begin(false, true, true, true, true);

にしたら起動はしました。

パッケージを2.0.4に戻したのですが、今度はアップロードで、

upload.tool.serial undefined

と表示されてアップロードを失敗するようになってしまいました。

これは、boards.txtを編集してArduinoIDEを再起動することで解決しました。

C:\Users\???\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.0.4\boards.txt

の1290行くらいにある、

m5stack-paper.upload.tool=esptool_py

を、

m5stack-paper.upload.tool.serial=esptool_py

に変更します。

2.0.6-1.0にしても同じでした。

 

LoRa無線モジュールの電波は届くかテスト


今日は電波が届くかテストしました。

発信は平地で地面に近い場所で、受信は山道を200mほど入ったところです。

谷川に沿った山道なので、空は見えています。

LoRaモジュールを取り付けた状態

距離は直線で500mくらいでしょうか。

受信場所は発信場所からは見えませんが、電波が届いている事を確認できました。

このモジュールは届いてからアンテナを伸ばすのですが、折れるのではないかと心配でした。

 

M5Stack用LoRa無線モジュールのテスト

サンプルスケッチがあるので、それを修正します。

スイッチサイエンスのページからリンクをたどります。

 

1.M5Stack用LoRa無線モジュール (ES920LR3)のページから、

2.ページ真ん中あたりにある、サポートページをクリック。

3.ページ最後あたりにある、取扱説明の1.Configurationをクリック。

4.config用スケッチをダウンロード。

5.展開してArduinoIDEで開きます。

6.LoRaConfig.cppを編集します。

7.5行目で自ノードをユニットごとに別番号で設定します。

8.8行目で自動送信する文字列、7行目で送信間隔を設定します。

  自動送信をしたくない時は、送信間隔を0にします。

  そうすると、シリアルモニタに打ち込んだ文字がそのまま送信されます。

 

  1. int LoRaConfig(){
  2.   if (command("2"     ) < 0) return(-1); // processor mode
  3.   if (command("c 12"  ) < 0) return(-1); // spread factor
  4.   if (command("d 1"   ) < 0) return(-1); // channel
  5.   if (command("f 0"   ) < 0) return(-1); // Own Node ID
  6.   if (command("g FFFF") < 0) return(-1); // Destination ID
  7.   if (command("B 5"   ) < 0) return(-1); //
  8.   if (command("C ABCD") < 0) return(-1); //
  9.   //if (command("e 1234") < 0) return(-1); // PanID
  10.   if (command("q 2"   ) < 0) return(-1); // operation mode
  11.   if (command("w"     ) < 0) return(-1); // save
  12.   command("z");                          // start
  13.   return(0);
  14. }

 

8.シリアルモニタを表示させておきます

9.スケッチを書き込んで起動したら、AボタンのPRESETを押すと設定できます。

 

シリアルモニタにエラーが出たら、CボタンのRESETを押して再度AボタンのPRESETを押してみてください。

M5Stackに表示が出ない場合は、一度USBケーブルを外してみてください。リセットに失敗しているかもしれません。

 

M5Stack用LoRa無線モジュール

測定器のBLE受信装置は現場で便利に使っていますが、パソコンのエクセルにデータを転送する機能が足りません。

これが無いと本当に便利とは言えないのですが、いいアイデアが無かったので転送機能なしで稼働開始としました。

BLEとかシリアル通信とか手段は考えられますが、手で入力するのとさほど手間も時間も変わらないでしょう。(手入力の方が数値の異常に気付きやすいですし)

若い時は「試してみる価値はある!」とか思ったかもしれませんが...。

まだ老人という年ではありませんが、やはり老いたと感じます。

何かないかと探していたのですが、最近、スイッチサイエンスさんで「M5Stack用LoRa無線モジュール」を見つけました。

まずは個人的な用件でテストしたいので自前で購入しました。送受信で2個必要です。

 

EASEL社のLoRaモジュールは以前試した事があり、ただの920MHz無線モジュールに比べて距離も障害物にも強いのは間違いないようでした。

動作テストはサンプルスケッチがありますが、パラメータや手順が最初に扱う人には少し難しいように感じます。

私はEASEL社のブレークアウト基板で一度試行錯誤してるので、動かすまではスムーズでした。

ブレークアウト基板の時はArduinoとLCDモジュールとバッテリーを付けるので、すごくかさばって実用的とはとても思えませんでしたが、モジュールになって使えそうな気がしてきています。

動作テストまでの手順は次回に書きたいと思います。