Python 3.x 如何将微控制器连接到gps模块并接收位置信息

Python 3.x 如何将微控制器连接到gps模块并接收位置信息,python-3.x,Python 3.x,我正在尝试用物联网做一个小项目。 该项目包括一个带有微控制器(开源)和显示器的公共汽车站。 此外,一个微控制器(开源),带有GPS模块作为总线 这是我们从toptechboy修改的代码 #!/usr/bin/python import serial import Adafruit_BBIO.UART as UART import Adafruit_BBIO.GPIO as GPIO import time from Adafruit_IO import Client, Feed, Request

我正在尝试用物联网做一个小项目。 该项目包括一个带有微控制器(开源)和显示器的公共汽车站。 此外,一个微控制器(开源),带有GPS模块作为总线

这是我们从toptechboy修改的代码

#!/usr/bin/python
import serial
import Adafruit_BBIO.UART as UART
import Adafruit_BBIO.GPIO as GPIO
import time
from Adafruit_IO import Client, Feed, RequestError
ADAFRUIT_IO_KEY ='*********'
ADAFRUIT_IO_USERNAME ='********'
aio = Client(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY)
digital = aio.feeds('eproject')
GPIO.setup("P8_8", GPIO.OUT)
UART.setup("UART1")
ser=serial.Serial('/dev/ttyO1',9600)
class GPS:
        def __init__(self):
                UPDATE_10_sec=  "$PMTK220,10000*2F\r\n" #Update Every 10 Seconds
                UPDATE_5_sec=  "$PMTK220,5000*1B\r\n"   #Update Every 5 Seconds$
                UPDATE_1_sec=  "$PMTK220,1000*1F\r\n"   #Update Every One Second
                UPDATE_200_msec=  "$PMTK220,200*2C\r\n" #Update Every 200 Milli$
                #This set is used to set the rate the GPS takes measurements
                MEAS_10_sec = "$PMTK300,10000,0,0,0,0*2C\r\n" #Measure every 10$
                MEAS_5_sec = "$PMTK300,5000,0,0,0,0*18\r\n"   #Measure every 5 $
                MEAS_1_sec = "$PMTK300,1000,0,0,0,0*1C\r\n"   #Measure once a s$
                MEAS_200_msec= "$PMTK300,200,0,0,0,0*2F\r\n"  #Meaure 5 times a$
                #Set the Baud Rate of GPS
                BAUD_57600 = "$PMTK251,57600*2C\r\n"          #Set Baud Rate at$
                BAUD_9600 ="$PMTK251,9600*17\r\n"             #Set 9600 Baud Ra$
                #Commands for which NMEA Sentences are sent
                ser.write(BAUD_57600)
                time.sleep(1)
                ser.baudrate=57600
                GPRMC_ONLY= "$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\$
                GPRMC_GPGGA="$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\$
                SEND_ALL ="$PMTK314,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\$
                SEND_NOTHING="$PMTK314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28$
                ser.write(UPDATE_200_msec)
                time.sleep(1)
                ser.write(MEAS_200_msec)
                time.sleep(1)
                ser.write(GPRMC_GPGGA)
                time.sleep(1)
                ser.flushInput()
                ser.flushInput()
                print ("GPS Initialized")
        def read(self):
                ser.flushInput()
                ser.flushInput()
                while ser.inWaiting()==0:
                        pass
                self.NMEA1=ser.readline()
                while ser.inWaiting()==0:
                        pass
                self.NMEA2=ser.readline()
                NMEA1_array=self.NMEA1.split(',')
                NMEA2_array=self.NMEA2.split(',')
                if NMEA1_array[0]=='$GPRMC':
                        self.timeUTC=NMEA1_array[1][:-8]+':'+NMEA1_array[1][-8:$
                        self.latDeg=NMEA1_array[3][:-7]
                        self.latMin=NMEA1_array[3][-7:]
                        self.latHem=NMEA1_array[4]
                        self.lonDeg=NMEA1_array[5][:-7]
                        self.lonMin=NMEA1_array[5][-7:]
                        self.lonHem=NMEA1_array[6]
                        self.knots=NMEA1_array[7]
                if NMEA1_array[0]=='$GPGGA':
                        self.fix=NMEA1_array[6]
                        self.altitude=NMEA1_array[9]
                        self.sats=NMEA1_array[7]
                if NMEA2_array[0]=='$GPRMC':
                        self.timeUTC=NMEA2_array[1][:-8]+':'+NMEA1_array[1][-8:$
                        self.latDeg=NMEA2_array[3][:-7]
                        self.latMin=NMEA2_array[3][-7:]
                        self.latHem=NMEA2_array[4]
                        self.lonDeg=NMEA2_array[5][:-7]
                        self.lonMin=NMEA2_array[5][-7:]
                        self.lonHem=NMEA2_array[6]
                        self.knots=NMEA2_array[7]
             if NMEA2_array[0]=='$GPGGA':
                        self.fix=NMEA2_array[6]
                        self.altitude=NMEA2_array[9]
                        self.sats=NMEA2_array[7]
            myGPS=GPS()

            while True:

         data = aio.receive(digital.key)
         myGPS.read()
         print (m print (myGPS.NMEA2)

         if int(data.value) == 1:
            print('received ON \n')
            GPIO.output("P8_8", GPIO.HIGH)

         if myGPS.fix!=0:
             print ('Universal Time: ',myGPS.timeUTC)
             print ('You are Tracking: ',myGPS.sats,' satellites')
             print ('My Latitude: ',myGPS.latDeg, 'Degrees ', myGPS.latMin,' minutes ', myGPS.latHem)
             print ('My Longitude: ',myGPS.lonDeg, 'Degrees ', myGPS.lonMin,' minutes ', myGPS.lonHem)
             print ('My Speed: ', myGPS.knots)
             print ('My Altitude: ',myGPS.altitude)
         elif int(data.value) == 0:
             print('received OFF \n')
             GPIO.output("P8_8", GPIO.LOW)

这是代码错误信息

Traceback (most recent call last):
  File "m.py", line 83, in <module>
    myGPS=GPS()
  File "m.py", line 29, in __init__
    ser.write(BAUD_57600)
  File "/home/debian/.local/lib/python3.5/site-packages/serial/serialposix.py", line 532, in write
    d = to_bytes(data)
  File "/home/debian/.local/lib/python3.5/site-packages/serial/serialutil.py", line 63, in to_bytes
    raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
TypeError: unicode strings are not supported, please encode to bytes: '$PMTK251,57600*2C\r\n'

回溯(最近一次呼叫最后一次):
文件“m.py”,第83行,在
myGPS=GPS()
文件“m.py”,第29行,在_init中__
序列写入(波特率为57600)
写入文件“/home/debian/.local/lib/python3.5/site packages/serial/serialposix.py”,第532行
d=到字节(数据)
文件“/home/debian/.local/lib/python3.5/site packages/serial/serialutil.py”,第63行,以字节为单位
raise TypeError('不支持unicode字符串,请编码为字节:{!r}'。格式(seq))
TypeError:不支持unicode字符串,请将其编码为字节:'$PMTK25157600*2C\r\n'

我希望微控制器1充当gps并创建变量,然后将它们发送给微控制器2,这样微控制器2将显示总线运行位置的实时地图。

您正在尝试在Python 3.x上运行为Python 2.x编写的代码

您可能知道,这两者之间的关键区别之一是Python3.x对字符串使用Unicode(有关更多详细信息,请参阅)

您有两种选择:使用Python2.x运行或移植代码。如果您选择第二种方式,唯一的变化(乍一看,您可能需要其他次要的东西)是在将命令写入端口之前对其进行编码,例如,使用:

ser.write(BAUD_57600.encode())
而不是您的
ser.write(波特率)