#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アプリにすることで、一応納得いくようなものができた。詳しくは、そのうち時間があれば書くつもり。