linux - 使用 Python 通过 Serial 读取不固定数量的字节
问题描述
我正在尝试从串行端口读取不固定数量的字节。我可以使用 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 = '9{solenoid0}{solenoid1}{solenoid2}{solenoid3}' \
.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()
解决方案
您可以使用:
import serial
import time
ser = serial.Serial(port='/dev/ttyUSB0', baudrate=115200, timeout=1)
while True:
val = ser.readline().strip()
if(val):
print (val)
推荐阅读
- html - 如何使 Bootstrap 图像四舍五入?
- javascript - 'position:absolute' 是否总是 'display:block'
- html - 右侧的主按钮首先获得焦点是不是很烦人?
- azure-devops - Azure DevOps 服务器导入管道功能忽略审批者定义
- python - Azure Python SDK 是否没有用于预配存储帐户的 create_or_update?
- python - 带有 zeep 的 xsd:string[] 的 SOAP 字符串列表
- php - 如何在这个 css 字符串中生成随机数(laravel)
- asp.net-core - Asp.Net Core cookie 身份验证选项登录路径通过 HTTP 路由
- ssh - 使用 SSH 将文件发送到 SFTP 服务器的 WSO2 代理服务无法进行身份验证
- java - 如果在springboot的结果中合并/组合,缓存方法(使用咖啡因)是否可能返回部分响应?