首页 > 解决方案 > 从串行输入中读取在 Python3 中不起作用

问题描述

我无法让 Python2.7 中的简单脚本在 Python3 中正常工作。剧本:

enter code here{
#!/usr/bin/env python
# simple test program to test serial I/O data from gps 
# 
# Dec 2019 HRK

import Adafruit_BBIO.UART as UART
import serial

UART.setup("UART2")

ser2 = serial.Serial('/dev/ttyO2', timeout=2)

def parseGPS(gps_data):
    if gps_data[0:6] == "$GNRMC":
        sdata=gps_data.split(",")
        if sdata[2] == 'V':
            print("Sat data not valid")
            return
        print("Parsing GNRMC data")
        time=sdata[1][0:2]+":"+sdata[1][2:4]+":"+sdata[1][4:6]
        lat=decode(sdata[3])
        dirlat=sdata[4]
        lon=decode(sdata[5])
        dirlon=sdata[6]
        print('GMT: {} lat: {}{} long: {}{}'.format(time, lat, dirlat, lon, dirlon))

def decode(coord):
    # converts dddmm.mmmmm > DD deg MM.MMMMM min
    x = coord.split(".")
    head = x[0]
    tail = x[1]
    tail = tail[0:2]
    deg = head[0:-2]
    min = head[-2:]
    return deg + ":" + min + "." + tail

print("receiving GPS data")
while True:
    data = ser2.readline()
    parseGPS(data)    
    }

Python2 给出了预期的响应。Python3 在打印后停止(“接收 GPS 数据”)。我知道两个 Python 版本中的串行差异,但谷歌搜索并没有为我带来解决方案。问题很可能是 ser2.readline() 语句。请指教。
在此先感谢,哈克

标签: pythonpyserial

解决方案


当你初始化'ser2'时,你会让很多东西保持默认。
尝试设置更多参数以确保它们是正确的。
当我回到家时,我将尝试重新创建错误并帮助您获取一些工作代码
示例摘自这篇文章
Python Serial: How to use the read or readline function to read more than 1 character一次

serial.Serial( port='COM5',\
               baudrate=9600,\ 
               parity=serial.PARITY_NONE,\
               stopbits=serial.STOPBITS_ONE,\
               bytesize=serial.EIGHTBITS,\
               timeout=0)

也可以看看这个帖子

pySerial 与 python 2.7 和 3.4 的区别


推荐阅读