使用 Python 通过 Serial 读取不固定数量的字节

Posted

技术标签:

【中文标题】使用 Python 通过 Serial 读取不固定数量的字节【英文标题】:Using Python to read a nonfixed number of bytes through Serial 【发布时间】:2019-04-11 00:18:49 【问题描述】:

我正在尝试从串行端口读取不固定数量的字节。我可以使用 read 读取固定数量的字节,输入比实际存在的字节数更大的数字,这将导致它永远等待。输入比实际存在的字节数更小的数字会裁剪掉一些字符。使用 read_all,输出似乎是空白的。 Readline() 产生语法错误。我的想法用完了,有什么想法吗?这是我的代码:

import time
import datetime
import serial
import os


# public variables
sensors = []  # list of sensor readings
wait = True
sensor_count = 10 # the zero based count of sensors


def pwr_solenoid(solenoid0=0, solenoid1=0, solenoid2=0, solenoid3=0):
    # Defaults are for low signal values

    # compile output
    output = '9solenoid0solenoid1solenoid2solenoid3' \
        .format(solenoid0=solenoid0, solenoid1=solenoid1, solenoid2=solenoid2, solenoid3=solenoid3).encode()

    with serial.Serial('/dev/ttyACM0', baudrate=9600) as ser:
        print("created connection to '/dev/ttyACM0'\n")
        print("going to send:\t''".format(output))
        ser.write(output)
        ser.reset_output_buffer()

        # for testing to console
        print("Value sent to the uC:\t''".format(output.decode()))

        # ***** READ from UART *****

        #ser.in_waiting >= 12:
        raw = ser.read(16)
        print("printing raw value of ser.read(16)\n")
        print(raw)
        val = str(ser.read_all().decode()) # (3).decode()[2:])
        #printing val
        print("\n printing val using read_all \n")
        print(val)
        val1 = raw.decode()
        #printing val of raw.decode()
        print("\n pringting val of raw.decode() \n")
        print(val1)
        # print("printing value of ser.readline()\n"
        # serreadlin = ser.readline() This line generates an error cannot use readline() 
        # print(serreadlin)
        # print("printing val\n")
        # print(val)
        # exit()

【问题讨论】:

请勿发布文字图片。 【参考方案1】:

你可以使用:

import serial
import time

ser = serial.Serial(port='/dev/ttyUSB0', baudrate=115200, timeout=1)

while True:
    val =  ser.readline().strip()
    if(val):
       print (val)

【讨论】:

这个没有读串口成功,什么都没读 我这样做了,但 readline 产生语法错误,请检查我更新的代码

以上是关于使用 Python 通过 Serial 读取不固定数量的字节的主要内容,如果未能解决你的问题,请参考以下文章

Python Serial:读取端口时遇到问题

在 python 中通过 RS232 到 USB 电缆读取秤数据

使用 RPi2 在 Python 中使用 RC522 和 USB SERIAL 读取标签 UID

python3 Serial 串口助手的接收读取数据

python的pyserial读取串口占用状态?

python serial 模块使用