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() 是阻塞的,虽然定义了超时

Pyserial readline() 永远挂起程序而不读取串行数据

提高 pyserial readline 速度

PySerial 和值拆分错误

python中pyserial模块使用方法