電子機器の使用を するにあたり 装置間の通信はかかせません
装置間の距離が短い I2C等の方法については様々なマイコンでの情報がありましたが
長距離通信が可能な通信方式での事例が少なかった為、
長距離通信が可能で用途の多いRS485通信 Modbusプロトコルを自分用にまとめました。
ハードの選定
Arduinoを使用した通信実装テストであった為 今回マスター、スレーブ共 Arduinoを使う事は確定であった為、保有している Arduino UNOをマスター ArduinoNanoをスレーブにしました。
RS485も安価さと小ささを重視しLTC485にしました。

Arduinoのライブラリー
Arduino IDEのライブラリーを検索するといくつかのライブラリーがみつかりました。
こう言う蓄積がすぐにみつかるのも人気マイコンを選択する理由のひとつですよね!

いくつか試してみましたがマスターとスレーブで以下のライブラリーを選定しました。
マスター側:ModbusMaster
スレーブ側:ModbusRTU_Slave_RS485
通信内容について
通信テストが目的なのでマスター側の入力でスレーブ側の機器が動作し、スレーブ側の入力でマスター側の機器が動作するようにします。

配線
以下の図のような結線をブレッドボード上に行いました。

マスター側スケッチ
マスター側のスケッチは以下のようにしました。

ソフトを作成し転送すると、転送できずタイムアウトエラーが出るとおもいます。
これはRS485で送受信しようとしている入出力ピンとArduino IDEがソフトを変更しようとしている入出力ピンが同じな為におこります。
マスター、スレーブ共にソフト転送時には一旦ArduinoのBit0,1ピンに接続している配線を外して下さい。
スレーブ側スケッチ
スレーブ側は以下のようにしました。

スレーブ側はコンパイルを行うとエラーとなります。
これはModbusRTU_Slave_RS485ライブラリーutilityフォルダー内のファイルが古い?為に起こるものでArduino IDEライブラリー内でLinkedListを検索しダウンロードしたライブラリーデータの中身をutilityフォルダーに上書きしコンパイルすると正常終了するようになります。

※ 記載のソフトは2022/02時点で動作確認をして掲載しておりますが 独学の為、誤解曲解もあると思います。暖かい目で ご指摘頂けると幸いです。

コメント