#RS232cで機器を制御する
RS232cで通信して制御したい装置があって、Linuxで簡単にできる方法を調べている。詳しい人ならばLabViewとか使うのかもしれないけど、そこまで大仰なことは必要なくて、簡単なコマンドが使えれば十分なのでなるべく簡単に済ませたい。
##USB-RS232cケーブル
色々あるけど、今回はこれを買ってみた。
UGREEN USB シリアル変換ケーブル
AmazonのページにLinuxのロゴがあったのでこれにしてみた。繋いでみたところ/dev/ttyUSB0
として認識された。
##使えそうなプログラム
WindowsだとTeraTermを使うのが良いが、Linuxだとcu
やscreen
あたりが有名らしい。どちらもまず初めにハマるのは、起動したもののどうやって抜けて良いのかわからないこと。cu
は~.
で、screen
はC-a k
で抜けられる。使い方はそれぞれ
$ cu -s 9600 -l /dev/ttyUSB0
$ screen /dev/ttyUSB0 9600
という感じ。ところがコマンドを打っても、うまく返事が返ってこないので困った。
色々と苦戦したのだが、cu
を-d
オプションをつけて起動したらようやく原因がわかった。改行で\r
が入力されているが、相手側は\r\n
が必要な装置だった。解決方法が見当たらず困ったが、色々とガチャガチャやっていてわかったのは、C-j
で\n
が、C-m
で\r
が入力されるらしい。これでとりあえずは動いた。
GUIならば、cutecom
というものを使えば、改行コードを選べる。GUIは面倒なのでできれば避けたいが、今のところcu
やscreen
のようなCUIでなんとかする方法がわからない。
##pySerialを使う
pythonではpySerial
を使うと比較的簡単にRS232c機器と通信できる。これで装置が動かせるようなGUIのプログラムを作るのはどうしたら良いか、実はかなり悩んだんだけど、結論としてはbottle.py
というのを使ってWebアプリにすることで、一応納得いくようなものができた。詳しくは、そのうち時間があれば書くつもり。