Pythonでシリアル通信


このエントリーをはてなブックマークに追加

試しに、GPSモジュールを使ってデータを取得してみる
環境はMac OsX 10.9, Python 3.4.3(Anaconda 2.3.0)
使用したものは

Adafruit Ultimate 66チャンネル10Hz GPSモジュール Version 3
(いまだと秋月電子にもっと安いやつ(GPS受信機キット 1PPS出力付き 「みちびき」対応)があるのでそれでも可)

FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)

その他USBケーブル(A - microB)ジャンパーワイヤーやブレッドボードなどひつようなもの

pySerialをインストールする

1
$ pip install pyserial

GPSをMacと接続する

GPSモジュールとUSBシリアル変換アダプターの接続は

GPSモジュール : USBシリアル変換アダプター
Vin : VCC
GND : GND
TX : RX
RX : TX

となるように接続する

Pythonでシリアル通信
シリアル変換アダプターのジャンパーピンは、今回のGPSだと3.3Vでも5Vでもどちらでも動くのでひとまず3.3Vにしている

あとはUSBケーブルでMacと接続して、USBケーブルのポート名を取得しておく
ポート名の取得は、terminal上で下記コマンドを打つと出てくる

1
2
$ ls /dev/tty.usbserial*
/dev/tty.usbserial-AI03CNY6

上記例だと、AI03CNY6の部分を出てきたやつに変えてやると自分のポート名になる

簡単な例(gpsデータからGPRMCのみ取り出す)

gps.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# coding:utf-8
import serial
import types
import re
ser = serial.Serial(
# Macの場合、 /dev/tty.usbserial-* の形で認識される。WindowsならCOM3とかCOM4とかになるはず
# ls /dev/tty.usbserial* で出てきたポート名を入れること
port = "/dev/tty.usbserial-AI03CNY6",
baudrate = 9600,
parity = serial.PARITY_NONE,
bytesize = serial.EIGHTBITS,
stopbits = serial.STOPBITS_ONE,
timeout = None,
xonxoff = 0,
rtscts = 0,
)
while True:
gpsData = ser.readline().decode('utf-8')
if re.search(r'RMC', gpsData):
print(gpsData.strip())

if文のところを取り除いてあげれば出力されるGPSデータ全てが出力される


このエントリーをはてなブックマークに追加