python - 从串行输入中读取在 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() 语句。请指教。
在此先感谢,哈克
解决方案
当你初始化'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)
也可以看看这个帖子
推荐阅读
- azure - Azure ADAL - 如何获取刷新令牌/如何刷新 nodejs 后端服务器到服务器连接的访问令牌?
- c# - 在 CollectionView 中的 UITextView 中呈现动态 HTML 代码会产生问题
- python - 如果python变量的id小于-6,为什么它会发生变化
- php - 使用 WHERE 和 ||
- node.js - MongoDB 事务与 firebase 事务
- asp.net - 在使用 devexpress 的 Azure Devops 中构建 asp.net webform 项目时出现问题
- c++ - 如何用 libcurl 定义元数据?
- python - 使用 Python 从 Outlook 读取电子邮件并指定日期范围
- mysql - SQL/MySQL - 跳过或不从选择查询中选择一列
- yocto - 与 Audit daemon 相关的文件不在 rootfs 中