⑥ESP-WROOM-02にRS485ボードを追加する
さてESP-WROOM-02にRS-485インターフェースを取付け、ライブラリを使い、山洋さんのパワコンと通信するお話です。
取りかかる前の状況は、9台のパワコンがSLAVEで1台のLCD パネルがMASTERとなっていました。このLCDパネルを私が作るマイコンで置き換えるのが目標です。
参考にさせていただいたのは、「https://javatea.adiary.jp/0116」です。
amazonで購入した「EasyWordMall MAX485 RS-485 TTL-RS-485モジュールコンバータ 」が同じような配線で使えました。
このとき私の手元にあったのは、Arduino UNO,電子太郎ESP-WROOM-02開発ボードでした。
このページに書かれているとおり、
・DI (data in) to pin 11
・RO (receive out) to pin 10
・DE (data enable) and RE (receive enable) jumpered together and to pin 3
・Vcc and Gnd connected
の様に接続しました。ここで忘れてはいけないことが…。RS485の終端抵抗です。
この装置はRS485の終端に位置することになりますから、100~120Ωの抵抗を信号線AB間に入れておきます。
Arduinoのライブラリで「MODBUS」を検索すると、5つものライブラリがヒットします。
私が使うのはMODBUS RTU MASTERですから、上から3つが候補になりました。
いろいろ試行錯誤の結果、ModbusMaster by Doc Walkerのものを使いました。
(https://www.arduinolibraries.info/libraries/modbus-master)
⑦ESP-WROOM-02プログラミング
Modbus通信では、
・マスタがスレイブにコマンドを発行
・スレイブがマスタにコマンドに対する回答を返す
を繰り返します。今回はスレーブが1~9まであるので、さらにコマンドの
パターンが3通りあります。
下の表は山洋パワコンのレジスタ情報です。
1回目の通信はレジスタC000~C002
2回目の通信はレジスタC100~C10F
3回目の通信はレジスタC020~C03F
(この表は私が予想した物です、参考までにお使い下さい)
グラフに欲しいのは、その時間における発電量Wと累積の発電量Whですから、ここまでたくさんのデータは必要ないのですが、取れるデータはすべて記録したくなり、なかなか膨大なデータが蓄積されてしまいました。
グラフを記録する時間幅は10分程度あれば一日の発電量の変化をきれいに表示出来ると考えたので、パワコンとの通信間隔を10分としたところ、多少遅れが出てしまい、11分後に記録されてしまったりして困ることになりました。
そもそもデータの取得時間はマイコン側のタイマではなく、サーバでデータがINSERTされたときにしてしまったので、1~9のデータの登録時間がそれぞれずれてしまっていて、グラフにするときに上手くないのです。さらに先ほどの10分間隔
に上手く載らないデータが発生すると10分間データが存在しないところが生じて
しまいます。これは今後の改良点として、マイコンの方で10分分のデータを蓄積し、10分毎にサーバにPOSTするようにしようかと考えています。
このあとは田渕さん、デルタさんのパワコンについて、グラフのかきかたについて、辺りを説明できたらと思います。