Windowsでpyserial
2.5のインストーラーを落とす。
http://www.python.jp/pub/ftp.python.org/python/2.5/python-2.5.msi
msi形式なので、普通にインストールする。C\python25に入った。
んで、これはどうやって使うのかな?
だいぶ前に使ったけど、すっかり忘却。
アプリケーションメニューからIDLEを起動してみる。
IDLE1.2が起動した。
ふーん、普通にpythonのシェル環境だ。
https://sourceforge.net/projects/pywin32/
http://jaist.dl.sourceforge.net/sourceforge/pywin32/pywin32-210.win32-py2.5.exe
2.5対応のものを落とす。
これもWinインストーラーで楽。
http://pyserial.sourceforge.net/
http://sourceforge.net/project/showfiles.php?group_id=46487
http://downloads.sourceforge.net/pyserial/pyserial-2.2.win32.exe?use_mirror=jaist
http://jaist.dl.sourceforge.net/sourceforge/pyserial/pyserial-2.2.win32.exe
こいつもWinインストーラーがあるから楽。
ターゲットデバイスを挿す。
デバイスマネージャで見ると、COM12とかになっている。
COM9までしかアクセスできない制限とかなかったっけ?
これはCOMで指定するデバイス名指定の制限で、デバイス番号でなら問題ないらしい。
IDLEで試す。
IDLE 1.2 >>> import serial >>> com = serial.Serial( port=11, baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0, writeTimeout=None, dsrdtr=None) >>> print com.portstr \\.\COM12
ハンドリングできているようだ。
>>> com.write("@HELLO")
では、どうも送信されていない風だ。応答が返らない。何が悪いのかな?
>>> print >>com, '@HELLO'
こっちなら大丈夫。
readlineするときには、timeoutがないと応答が返らない。
>>> com.timeout=0.5 >>> print >>com, '@HELLO' >>> print com.readline() @ACK□ >>> print >>com, '%\ 00000000000000000000000000F8F898\ 98F8F00000E0F838F8E00000F8F800F8\ F81818F8F000F8F80000F8F800F8F860\ 606C600C00E0E000F8F8000000000000\ 000000000000000000001F1F01031F1D\ 001E1F0706071F1E001F1F001F1F1818\ 1F0F00000010180F07000F1F18181818\ 00080F07001F1F080600000000000000\ 0000000000FFFEFEFEFEFEFEFEFEFEFF\ FEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFE\ FEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFE\ FEFEFEFEFEFEFE000000000000000000\ 00001F1F1F1F1F1F1F1F1F1F1F1F1F1F\ 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F\ 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F\ 1F1F1F1FF8F8C08C000C00383848484C\ 4C4868381800080848C8A83818000000\ F8F80000000000000000000000000000\ 00000000000000000000000000000000\ 001F1F000103020011190F07010F1F11\ 11090008181010111F0E0000001B1B00\ 00000000000000000000000000000000\ 0000000000000000000000000000FFFE\ FEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFE\ FEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFE\ FEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFE\ FF000000000000000000001F1F1F1F1F\ 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F\ 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F\ 1F1F1F1F1F1F1F1F1F1F1F1F1F1F0000\ 0000000000000000' >>> print com.readline() @ACK□
画像の送信も問題なし。
>>> print >>com, '@LED,1,BLINK' >>> print com.readline() @ACK□ >>> print >>com, '@LED,1,FAST' >>> print com.readline() @ACK□ >>> print >>com, '@LED,1,OFF' >>> print com.readline() @ACK□ >>> print >>com, '@LED,1,ON' >>> print com.readline() @ACK□
LEDの制御もできる。
>>> print com.readline() @SW,1□ >>> print com.readline() @SW,2□
ボタンの結果も取れている。
>>> com.close()
閉じて終わり。
当たり前だけど、普通に使えるな。
書く前に念のためにcom.flush()しといたほうがいいかな。
サービスにする場合には、デバイスが接続されたCOMポート番号が取れないのがめんどくさいな。
tryで順番に開いて見て、開けたのはHELLOして返信チェックするのは乱暴かな?