一個合理的抓猴神器原型機,需要一個有用的GNSS模組,一個把資料回傳的模組,最後則是提供所有模組電源的電池,或者厲害的話可以直接拉車子內的供電,但本文為實驗性質,並不建議各位這樣做。
以一個能夠合理輸出NMEA格式的GPS模組來說,可以用UART的方式與GPS模組連結,其GPS模組就會不停的將NMEA格式的資料回傳出來,這樣就可以記錄到時候需要用到什麼樣的東西了。
這個問題不難,首先要使用python送MQTT的功能,並在自己的主機上面架設MQTT的Broker
以及Subscriber
即可,再車機部分,需要將raspberry pi的電源處理好,可以使用鋰電池搭上UPS shield
之類的東西,將raspberry pi接上電源,請記得電池容量越大顆,能夠記錄的時間就越久。
需要用到的套件
sudo apt-get install python-serial
以下程式
import serial
ser = serial.Serial('/dev/ttyUSB0',115200,parity=serial.PARITY_NONE)
if ser.isOpen()==0:
ser.open()
ser.write("serial turn on")
try:
while True:
size = ser.inWaiting()
if size !=0:
response = ser.read(size)
if "GPRMC" in response:
print response
ser.flushInput()
time.sleep(0.1)
except keyboardInterrupt:
ser.close()
這樣就可以抓包含GPRMC字串在內的serial出來了
Recommended minimum specific GPS/Transit data
推薦的傳輸資料方式
因此在上面的舉例,只將GPRMC輸出,而不動用其他內容物
根據http://aprs.gids.nl/nmea 的說明
eg2. $GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68
225446 時間 22:54:46 UTC
A 定位狀態 A = OK, V = warning
4916.45,N 緯度 49 deg. 16.45 min 北緯
12311.12,W 經度 123 deg. 11.12 min 西經
000.5 對地速度, Knots
054.7 Course Made Good, True
191194 日期 19 November 1994
020.3,E Magnetic variation 20.3 deg East
*68 mandatory checksum
所以在這裡面包含著日期時間以及位置,因此對抓猴是有用的
import paho.mqtt.client as mqtt
import serial
MQTT_SERVER = "YOUR_IP"
MQTT_PORT = YOUR_PORT
MQTT_ALIVE = 60
MQTT_TOPIC1 = "catchmonkey"
mqtt_client = mqtt.Client()
mqtt_client.connect(MQTT_SERVER, MQTT_PORT, MQTT_ALIVE)
ser = serial.Serial('/dev/ttyUSB0',115200,parity=serial.PARITY_NONE)
if ser.isOpen()==0:
ser.open()
ser.write("serial turn on")
try:
while True:
size = ser.inWaiting()
if size !=0:
response = ser.read(size)
if "GPRMC" in response:
print response
mqtt_client.publish(MQTT_TOPIC1, response, qos=1)
ser.flushInput()
time.sleep(0.1)
except keyboardInterrupt:
ser.close()
這樣就完成抓猴神器的軟體部分囉
下篇文章將講解如何讓抓猴神器使用3G網卡來回傳數據,敬請期待