Armadillo-640で、RS232C-パラレルI/O変換器(CNV-I/O TB)を使う方法です。
1. 接続
下記写真のようにArmadillo-640のRS232CコネクタにCNV-I/O TBを接続します。
CNV-I/O TBのパラレルI/O側の接続、設定、制御コマンド等の詳細な説明は、CNV-I/O TBのマニュアルを参照ください。
2. 必要なパッケージのインストール
ここでは、例として、CNV-I/O TBとのシリアル通信をPythonスクリプトで行います。
Armadillo-640をインターネット接続可能なネットワークに接続して、必要なパッケージをインストールします。
パッケージ情報をアップデートします。
root@armadillo:~# apt-get update
補足)上記コマンドでエラーになる場合は、
Armadillo-X1/IoT(G3/G3L)/640/610:apt-get updateでエラーになる場合
の方法でアップデートします。
python3とpyserialをインストールします。
root@armadillo:~# apt-get install python3 root@armadillo:~# apt-get install python3-pip root@armadillo:~# python3 -m pip install pyserial
3. CNV-I/O TBの入力ポートの値を取得する
CNV-I/O TBに「I」「LF(ラインフィード)」を送信することで、入力ポートの値を取得できます。
下記内容でPythonスクリプト(ファイル名をdin.py)を記述します。
din.py
import serial ser = serial.Serial('/dev/ttymxc2', 9600, rtscts=True, timeout=10) cmd = bytearray([0x49,0x0a]) ser.write(cmd) res = ser.readline() print(res)
補足)上記スクリプトの主なパラメータについて
ser = serial.Serial('/dev/ttymxc2', 9600, rtscts=True, timeout=10)
/dev/ttymxc2:Armadillo-640のRS232Cコネクタのシリアルデバイスファイル名
9600:CNV-I/O TBの通信速度を9600bpsに設定した場合
cmd = bytearray([0x49,0x0a])
[0x49,0x0a]:「I」「LF(ラインフィード)」のASCIIコード
din.pyを実行すると、CNV-I/O TBからの応答(入力ポートの値)が下記のように表示されます。
root@armadillo:~# python3 din.py b'I[IN7-4の値][IN3-0の値]\n'
実行例)
root@armadillo:~# python3 din.py b'I35\n'
上記の場合、"35"は下記を意味します。
3:IN5、IN4が入力ショート状態。IN7、IN6が入力オープン状態。
5:IN2、IN0が入力ショート状態。IN3、IN1が入力オープン状態。
4. CNV-I/O TBに出力ポートの値を設定する
CNV-I/O TBに「O」「OUT7-4の出力値」「OUT3-0の出力値」「LF(ラインフィード)」を送信することで、出力ポートの値を設定できます。
下記内容でPythonスクリプト(ファイル名をdout.py)を記述します。
dout.py
import serial import sys args = sys.argv ser = serial.Serial('/dev/ttymxc2', 9600, rtscts=True, timeout=10) cmd = bytearray(4) cmd[0] = ord('O') cmd[1] = ord(args[1]) cmd[2] = ord(args[2]) cmd[3] = ord('\n') ser.write(cmd) res = ser.readline() print(res)
補足)上記スクリプトの主なパラメータについて
ser = serial.Serial('/dev/ttymxc2', 9600, rtscts=True, timeout=10)
/dev/ttymxc2:Armadillo-640のRS232Cコネクタのシリアルデバイスファイル名
9600:CNV-I/O TBの通信速度を9600bpsに設定した場合
cmd = bytearray(4)
4:CNV-I/O TBへのコマンドのバイト数(4バイト固定)
dout.pyは、出力ポートの値([OUT7-4の値]、[OUT3-0の値])を引数に実行します。
CNV-I/O TBからの応答(出力ポートの設定値)が下記のように表示されます。
root@armadillo:~# python3 dout.py [OUT7-4の値] [OUT3-0の値] b'I[OUT7-4の値][OUT3-0の値]\n'
実行例)
dout.pyの引数を"5"、"A"で実行すると、CNV-I/O TBの出力は下記のようになります。
5:OUT6、OUT4をON。OUT7、OUT5をOFF。
A:OUT3、OUT1をON。OUT2、OUT0をOFF。
root@armadillo:~# python3 dout.py 5 A b'O5A\n'