下記の記事を参考に、Armadillo-IoT G4と温湿度センサをRs-485通信させてみました。
Howto:Armadillo-IoT ゲートウェイ G4 で RS-485 通信する方法
機器構成
-
Armadillo-IoT G4 LANモデル
LTEモデルでは拡張インタフェースがCON11が使えず、UART通信の拡張が出来ないのでお気を付け下さい。 -
Modbus通信でデータ読出し可能な機器
今回は市販の温湿度センサを使用しています。
KKmoonRS485温度湿度 トランスミッタ
また、このセンサへの電源供給のためDC12V出力の電源装置を接続しています。
AK20W-DL-B (DC5V/1.6A、DC12V/1.0A) -
UART接続可能なRS-485トランシーバー
TTLレベルのRS-485信号をRS-485信号に変換するシリアル通信モジュール。RS-485トランシーバーとしてMAX485CSAを搭載しています。
LC-Electronics RS-485 TTL to RS-485 converter module -
その他ブレッドボード・ジャンパケーブル
モジュールとArmadillo-IoT G4のCON11ピンヘッダとを接続するのに使用します。
機器配線
Armadillo-IoT G4・モジュール・センサ・電源の接続構成は以下の通りです。
活線挿抜を行うと故障や事故の原因となりますので、必ずすべての機器の電源を落とした状態で接続してください。
Linuxカーネル
UART通信機能を有効にするためにはLinuxカーネルを改造する必要があります。
Linuxカーネルの改造と書きこみ方についてはこの記事を参考にしてください。
Howto:Armadillo-IoT ゲートウェイ G4 で RS-485 通信する方法
改造したLinuxカーネルとDTBを書きこむと、UART通信機能が有効になっています。
UART3を有効にしたので、/devの下にデバイスファイルttymxc2があるかを確認します。
armadillo:~# ls /dev/ttymxc2 /dev/ttymxc2
アプリケーション構築
改造したカーネルとDTBをArmadillo-IoT G4に反映したら、センサとModbusで通信してデータを収集するアプリケーションをコンテナ上で構築します。
先日Node-REDを使って、Armadillo-640とこのセンサーとの通信プログラムを作ったのでそれを流用します。
Armadillo-640:Node-REDを使ってModbus通信でデータを収集しグラフ化する
この記事で公開している設定ファイルを活用して、最初からNode-REDアプリケーションが動作するようなコンテナを作成します。
まずはコンテナイメージ構築のためのDockerfileを作成します。
Dockerfileを格納するための任意のディレクトリを作成します。 [armadillo ~]# mkdir nodered このディレクトリの中に、スクリプトや設定ファイルを格納しておくディレクトリを作成します。 [armadillo ~]# cd nodered [armadillo ~]# mkdir resources 設定ファイル等をダウンロードします。 スクリプトファイルダウンロード [armadillo ~]# wget https://armadillo.atmark-techno.com/system/files/blog/set_node_red_serial.sh フロー設定ファイルダウンロード [armadillo ~]# wget https://armadillo.atmark-techno.com/system/files/blog/flows.zip スクリプトファイルを編集します。(node-redの自動起動に関する部分を削除しておきます) [armadillo ~]# vi set_node_red_serial.sh #/bin/bash apt-get update --allow-releaseinfo-change apt-get -y upgrade apt-get install -y curl unzip update-ca-certificates --fresh curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - apt-get install -y gcc g++ make curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | tee /etc/apt/sources.list.d/yarn.list apt-get install -y nodejs apt-get update && apt-get install -y yarn npm install -g --unsafe-perm node-red npm install -g --unsafe-perm node-red-contrib-modbus npm install -g --unsafe-perm node-red-dashboard npm install -g --unsafe-perm pm2 unzip flows.zip mkdir /root/.node-red/ cp flows.json /root/.node-red/ Dockerfileを作成します。 [armadillo ~]# cd .. [armadillo ~]# vi Dockerfile FROM docker.io/debian:latest LABEL version="1.0.0" COPY resources / ARG USERNAME=atmark ARG UID=1000 RUN apt-get update && apt-get upgrade -y \ && /set_node_red_serial.sh \ && apt-get clean \ && useradd -m -u ${UID} ${USERNAME} \ && rm /set_node_red_serial.sh \ && rm /flows.zip パーミッションを設定しておきます [armadillo ~]# chmod +x resources/set_node_red_serial.sh コンテナイメージをビルドします [armadillo ~]# podman build -t noderedtest . ビルドしたイメージからコンテナを作成します。 [armadillo ~]# podman run -it --name=noderedtest --publish=1880:1880 --device=/dev/ttymxc2 localhost/noderedtest:latest node-red
設定変更
コンテナが起動してNode-REDが自動実行されますが、シリアルポートの設定がUSBデバイスのままになっているので、そのままでは通信できません。
フロー画面を表示し、
Modbus Readノードの設定ウインドウを開きます。
Serial portのデバイスファイル名をttymxc2に変更します。
設定を適用すると、通信が開始されてデータがグラフ化されます。
設定変更後、コンテナイメージを更新しておきましょう。
[armadillo ~]# podman commit noderedtest localhost/noderedhost:latest
confファイルを作成して保存しておくと、Armadillo-IoT G4の起動時に自動的にコンテナが起動するようになります。
[armadillo ~]# vi /etc/atmark/containers/noderedtest.conf set_image localhost/noderedtest:latest add_ports 1880:1880 add_devices /dev/ttymxc2 /dev/ttymxc2 set_command node-red confファイル保存 [armadillo ~]# persist_file /etc/atmark/containers/noderedtest.conf
こちらを参考に様々な機器とのシリアル通信をお試しください。