iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
1
IoT

homekit+pixhawk系列 第 9

做一個抓猴神器吧!

一個合理的抓猴神器原型機,需要一個有用的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出來了

GPRMC內容定義

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

所以在這裡面包含著日期時間以及位置,因此對抓猴是有用的

透過MQTT回傳吧

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網卡來回傳數據,敬請期待


上一篇
用raspberry pi 來當NFC 讀卡機吧
下一篇
arduino NFC讀卡機
系列文
homekit+pixhawk30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言