電機屋の日々

にわか電機マンが電気のことやその他気になったことをまとめる不定期更新日記です

LinuxでRS232Cのシリアル通信

Evernoteからコピペ

 

Linuxでシリアル通信を実行しようと思っても,WindowsのTera Termと違って面倒なので備忘録を書いておくことに。

 
今回は,FT232RL系のモジュールを接続する例で考える。

 

まずLinuxにシリアル通信デバイス(今回はFT232RLモジュール)をPCに接続。

Linuxで端末を立ち上げて,
% dmesg
と入力してエンター。
すると,いっぱい表示されるが,その中で
FTDI USB Serial Device converter now attached to ttyUSB0
とかいう行がある。コレは「FTDI USBシリアル変換ICはttyUSB0で接続した」ということを示している。
(このttyUSB0とは,シリアルポート0であり,WindowsではCOM~にあたるもの)
したがって,接続するときは"ttyUSB0"を使用。
 
また,実際に接続する際には cu コマンドを使います(持ってない場合はインストール)。
使い方はこの場合,
% cu -s <baud reat> -l <device name>
となる。<baud reat>は通信速度,<device name>はこの場合,"ttyUSB0"と入力する。
早速これを使って通信を...といきたいところだが,待った,である。
ファイルにはパーミッションWindowsでは「属性」と呼ぶそうな。)がある。
通常,ttyUSB0のような/dev/内のファイルはそのままでは通信できない。
 
なぜか。
ユーザによってファイルの読み書き実行をできる権限が違うからだ。
例えば,
・そのファイルを保持しているユーザは読み書き実行できるが,その他のユーザはできない
・どのユーザでも読み書き実行ができる
などなど...
では,ttyUSB0のパーミッションを見てみよう。
端末で,
% ls -l /dev/ttyUSB0
と入力する。
すると,
crw-rw--- 1 root dialout 188, 0  2月 10 22:05 /dev/ttyUSB0
と出る。
この出力は時と場合,端末によって変わることがあるが,この場合で書く。
重要なのは頭のあたりの
crw-rw----
であるが,この文字列は(1,3,3,3)文字で区切る。
頭1つ目の文字はファイルの種類を表しているが,ここでは触れないこととする(私がわかってないので...)。
さて,次の3つは,ファイル所有者のパーミッションを表している。
rw-となっているが,この場合,ファイルの所有者は読み書き(Read Write)ができる。
実行もできる場合は rwx。
次の3つはファイルを所有するユーザが所属するグループに属している全てのユーザに関するパーミッションだ。
その次は,その他のユーザである。
よく分かってないのだが,cuコマンドで通信する場合はその他のユーザからファイルにアクセスしていることになるらしい。
 
てなわけで,このパーミッション
crw-rw-rw-
にしてやらなければならない。
そこで,chmod コマンドを使う。
% sudo chmod 666 /dev/ttyUSB0
とすればおk。
chmodはスーパユーザでしか実行できない(多分...)ので,sudoで実行する。
すると,通る。
 
そろそろ接続していこう。
     % cu -s 115200 -l /dev/ttyUSB0
と入力する(ボーレートとデバイス名は各自で合わせて欲しい)。
すると,成功の場合,
Connected.
と返してくる。これで通信確立。
もし,
Line in use
とか返してきた場合,パーミッションなどが間違っている可能性があるので,もう一度チェックすること。
 
切断の際は,
~.
と入力すると,数秒後に切断される。