RAPIROをpythonで動かしてみました

RAPIROと遊ぶ時間がなかなか取れなかったのですが、少し遊んでみました。

先日RAPIROに取り付けたRaspberry Piにログインして、pythonでRAPIROを動かしてみました。

サンプルプログラムを参考にしてテストプログラムを作りました。単純にUARTにコマンドを投げるだけのシンプルなものです。


import sys
import serial
import os
import time
import datetime
com = serial.Serial('/dev/ttyAMA0', 57600, timeout = 10)
sys.stdout.write('write #M0\n')
com.write("#M0")
time.sleep(5)
sys.stdout.write('write #M1\n')
com.write("#M1")
time.sleep(5)
sys.stdout.write('write #M2\n')
com.write("#M2")
time.sleep(5)
sys.stdout.write('write #M7\n')
com.write("#M7")
time.sleep(5)
sys.stdout.write('write #M0\n')
com.write("#M0")

これを実行してみました。

$ sudo python rapiro_test.py
write #M0
write #M1
write #M2
Traceback (most recent call last):
File "rapiro_test.py", line 19, in
com.write("#M2")
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 485, in write
raise SerialException('write failed: %s' % (v,))
serial.serialutil.SerialException: write failed: [Errno 5] Input/output error
$

なぜかエラーがでます。
調べたところUARTはOSのコンソールになっているということがわかりました。
psコマンドで確認すると

$ ps ax | fgrep AMA
2039 ? Ss+ 0:00 /sbin/getty -L ttyAMA0 115200 vt100
2055 pts/0 S+ 0:00 fgrep --color=auto AMA

確かにgettyがttyAMA0を使っています。
とりあえずコンソールから切り離します。まずはcmdline.txtの修正。

$ sudo cp /boot/cmdline.txt /boot/cmdline_backup.txt
$ sudo vi /boot/cmdline.txt

これを

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

こうしました。

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

次にinittabの修正

$ sudo vi /etc/inittab

これを

#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

コメントアウトしました。

#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

rebootして確認

$ ps ax | fgrep AMA
2069 pts/0 S+ 0:00 fgrep --color=auto AMA

これで大丈夫。pythonで正常に動くようになりました。
rapiro_uart.jpg

コメント

タイトルとURLをコピーしました