python pyserial readline 不工作,但 screen 有点工作,在 ubuntu 16 中工作
Posted
技术标签:
【中文标题】python pyserial readline 不工作,但 screen 有点工作,在 ubuntu 16 中工作【英文标题】:python pyserial readline not working, but screen kinda does, worked in ubuntu 16 【发布时间】:2018-11-26 10:51:22 【问题描述】:我有一个监控串口的脚本:
纳米spo.py:
#!/usr/bin/env python3
import serial, time
ser = serial.Serial('/dev/ttyS0', 9600)
while 1:
serial_line = ser.readline()
print(serial_line)
time.sleep(60)
ser.close()
ctrl+x 保存退出
chmod +x spo.py
./spo.py
此脚本在 Ubuntu 16 下运行,该系统也可能是较旧版本的 python。
在 Ubuntu 18.04 下,我现在没有得到串行输出,假设是因为较新的 Ubuntu 或它附带的较新版本的 python。
编辑,我找到了一种在运行脚本时获得一些输出的方法(在脚本运行时,我关闭和打开设备几次):
b'NONIN AVANT 9600\r\n'
b'NONIN AVANT 9600\r\n'
b'NONIN AVANT 9600\r\n'
上面的格式与以前不同:
NONIN AVANT 9600
如果我使用屏幕,我会得到更多但只有当我按下回车时
screen /dev/ttyS0 9600
然后每次我按回车键都会得到初始数据:
NONIN AVANT 9600
Patient:
Clinician:
09/01/04 12:52:32
SpO2= 96 HR= 62 F
如果我再次按回车键,我会得到更多,但它会重新开始,而不是显示下一行:
NONIN AVANT 9600
Patient:
Clinician:
09/01/04 12:53:55
SpO2= 97 HR= 65 F
在多年前我的旧安装的 Ubuntu 16 下,输出将是这样的,初始化一次,然后每秒获取一个新的统计数据行:
NONIN AVANT 9600
Patient:
Clinician:
09/01/04 12:53:55
SpO2= 97 HR= 65 F
SpO2= 98 HR= 69 F
SpO2= 96 HR= 70 F
SpO2= 98 HR= 74 F
SpO2= 97 HR= 63 F
SpO2= 96 HR= 62 F
SpO2= 95 HR= 64 F
如果我按下回车键,我只会在屏幕上得到重新初始化的输出。
我希望有人能帮我解决这个问题,我觉得我在兜圈子追逐死胡同。
该设备是 Nonin Avant 9600:ASCII 串行 9600 波特,具有 8 个数据位、1 个起始位和 2 个停止位。每行以 CR/LF 结束
【问题讨论】:
【参考方案1】:对于找到此线程的任何人。我尝试了几种从串行端口获取输出的不同方法,但没有任何效果。我正在使用我们的备用血氧仪进行测试。我将血氧仪换成了我们通常使用的那个,现在串行通信工作正常。坏血氧仪似乎工作正常,并在其屏幕上正确显示,所以我不会猜到它可能是导致串行通信问题的设备。
同样奇怪的是,关闭再打开设备可以让我从串行端口中获取一些数据,但只是在最初,我并没有继续获取数据。我几乎想知道它是否只是设备的设置或奇怪的东西,但我查看了手册并没有看到任何东西。希望我对电子学有更多了解,如果能修好另一个就好了,但没有任何明显烧毁或鼓胀的组件,所以我不知道下一步该找什么。
【讨论】:
以上是关于python pyserial readline 不工作,但 screen 有点工作,在 ubuntu 16 中工作的主要内容,如果未能解决你的问题,请参考以下文章
python pyserial readline 不工作,但 screen 有点工作,在 ubuntu 16 中工作
Pyserial:readline() 是阻塞的,虽然定义了超时