python+pySerial+XMODEM
python + pySerial + XMODEM でシリアル通信を使ってXMODEMでデータを送信する方法です。
■pySerial, XMODEMをインストールする
pyserial
http://pyserial.sourceforge.net/
XMODEM
http://pypi.python.org/pypi/xmodem
標準のpythonにはシリアル通信モジュール、XMODEMモジュールどちらもついていないので、 ダウンロードしてインストール。
■使い方
import serial from xmodem import XMODEM from time import sleep def getc(size, timeout=1): return comPort.read(size); def putc(data, timeout=1): comPort.write(data) # sleep(0.001) comPort = serial.Serial(port='COM1', parity=serial.PARITY_NONE, bytesize=serial.EIGHTBITS, stopbits=serial.STOPBITS_ONE, timeout=0, baudrate=115200) # ... send_buf = open('sendfile', 'rb') print XMODEM(getc, putc).send(send_buf) send_buf.close()
こんな感じで。
- シリアルポートをオープンします
-
通信相手をXMODEM受信待ちにします(NAKを定期的に送ってくる状態)
- ここは相手によって異なるので、適切に。何かのコマンドを送るとか
- データ送受信のためのputc, getc 関数を定義して、XMODEMのコンストラクタで渡します
- 今回の場合、シリアル通信なので、Serial.write(), Serial.read() をラップしてあげればOK
- XMODEM.send() で送信したいストリームを送ります
- 上の例はバイナリファイルを送ってます
- 送信に成功すると true、失敗すると false が返ってきます
- 通信相手に応じてsleep()を入れてあげると安定したりすることがあるようです