シリアル通信を行うことが可能なscreenコマンドと、
Pythonでシリアル通信を行うことが可能なpython-serialモジュールを
apt-getを利用してRaspberry Piにインストールする
sudo apt-get install screen sudo apt-get install python-serial
次に、Pythonでシリアル通信スクリプトを作成する
vi serial-arduino.py
このときにファイル名をserial.pyとかいう名前にしてしまうと、
Pythonのserialモジュールと名前が重複してしまい、
AttributeError: ‘module’ object has no attribute ‘Serial’
というエラーがでてしまうので、他の名前にするのが良い。
USBでRaspberry PiとArduinoを接続し、
なんというデバイス名称で認識されているか確認する
dmesg lsusb
シリアル通信でArduinoから定期的に送られてくるデータをもとに、
JSONファイルを作成するサンプルは以下の通り。
- カンマ区切りデータの場合
import serial def main(): # デバイス名: /dev/ttyACM0 通信速度: 9600bps con=serial.Serial('/dev/ttyACM0', 9600) # デバイス名を出力する print con.portstr while 1: # 1行ごとにデータを取得する str=con.readline() # ファイルに書き込み f = open('/tmp/data.json', 'w') f.write("[{\"data_1\":" + str + "}]") f.close() if __name__ == '__main__': main()
- JSON形式の場合
import serial import json def main(): # デバイス名: /dev/ttyACM0 通信速度: 9600bps con=serial.Serial('/dev/ttyACM0', 9600) # デバイス名を出力する print con.portstr while 1: try: # strという変数名は使用できない strs=con.readline() dec=json.loads(strs) f = open('/tmp/data.json', 'w') f.write(strs) f.close() except KeyError: print "KeyError" except ValueError: print "ValueError" except NameError: print "NameError" if __name__ == '__main__': main()
実行してJSONが吐き出されるか確認する
python serial-arduino.py