pyserial で AT コマンド
IoTPython
2019-6-13 3:00 JST

古の cu コマンドなどを使いつつ python で AT コマンドを使う。

cu でシリアル

まずは cu のインストール。実は screen で出来るとか。でもここは強く cu にこだわってみる。すでにインストールしているので --dry-run のログを下に掲げる。本当にインストールするときは --dry-run をはずせばよい。

# apt install --dry-run cu
Reading package lists... Done
Building dependency tree
Reading state information... Done
cu is already the newest version (1.07-23+b1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

# cu -s 115200 -l /dev/ttyPS1

よくわからないが、chmod しないとだめ。たぶんオーナの問題。chown dailout とかすればよいのだろうか?(要確認)chown した方がセキュリティ上安全なはず。

# cu -s 115200 -l /dev/ttyPS1
cu: open (/dev/ttyPS1): Permission denied
cu: /dev/ttyPS1: Line in use
# ls -l /dev/ttyPS1
cr--r----- 1 root dialout 252, 1 Jun 13 14:33 /dev/ttyPS1
# chmod 660 /dev/ttyPS1
# ls -l /dev/ttyPS1
crw-rw---- 1 root dialout 252, 1 Jun 13 14:33 /dev/ttyPS1
# cu -s 115200 -l /dev/ttyPS1
cu: open (/dev/ttyPS1): Permission denied
cu: /dev/ttyPS1: Line in use
# chmod 666 /dev/ttyPS1
# cu -s 115200 -l /dev/ttyPS1
Connected.
AT
OK
~.
~.

Disconnected.
#

知ってるか?~("にょろ"あるいはチルダ).("てん"あるいはドット)で抜けられるんだぜ。ssh とかも ~ + Ctrl-Z でサスペンドできるしね。古の魔術。

python でシリアル

pyserial を使う。普通の open じゃだめ(でした)。その後、Serial で操作する。readline() して応答がなかったら timeout 後、0 byte 返ってくる。

$ pip3 install pyserial
cnum.py
import serial
with serial.Serial('/dev/ttyPS1', baudrate=115200, timeout=1) as sara201:
        sara201.write(b'at+cnumrn')
        sara201.readline()
        b=sara201.readline()
        cnum=b.decode().split(',')[1].split('"')[1]
print(cnum)

リンク集