シリアル通信を行うことが可能な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