python pyserial readline 不工作,但屏幕有点工作,在 ubuntu 16 中工作

python pyserial readline not working, but screen kinda does, worked in ubuntu 16

我有一个监控串口的脚本:

纳米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

在我多年前的旧安装中 Ubuntu16 下,输出将是这样的,初始化一次然后每秒获取一个新的统计行:

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

结束

对于找到此线程的任何人。我尝试了几种不同的方式从串行端口获取输出,但没有任何效果。我正在使用我们的备用血氧仪进行测试。我把血氧计换成我们通常使用的,现在串行通信工作正常。坏血氧计似乎运行正常并在其屏幕上正确显示,所以我不会猜到它可能是导致串行通信问题的设备。

同样奇怪的是,关闭和打开设备可以从串行端口获取一些数据,但只是在最初,我不会继续获取数据。我几乎想知道它是否只是一个设置或设备有什么奇怪的地方,但我查看了手册并没有看到任何东西。希望我对电子产品了解得更多一点,修好另一个就好了,但是没有任何明显烧毁或膨胀的组件,所以我不知道接下来要寻找什么。