- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对使用 pyserial 相当陌生,目前在阅读量表时遇到困难。我相信这与我在 python 上没有正确执行的一些初始化有关。我一直在使用 LabVIEW 来运行秤,但我试图摆脱它,因为我对它的了解非常有限。当我执行以下代码时,我得到 b ' ' 打印。如果没有超时,代码将永远持续下去,除非我拔掉设备(我也使用了 ser.readline())。我已经附上了labview中使用的初始化代码(如果有帮助的话)(我知道框图上的设置与代码不同,但您可以在前面板上手动更改它们以匹配比例设置)。我非常感谢您提前提供的任何帮助!
ser = serial.Serial("COM3",
9600,
timeout = 2,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_ODD)
print('Connected')
ser.read(5)
最佳答案
您的电缆应该没问题,因为您可以连接 Scale UART。然后,您必须正确设置连接。根据你的图和一些documentation (第 55 页,也 see )应该是:
import serial
ser = serial.Serial("COM3",
1200,
timeout = 2,
bytesize=serial.SEVENBITS,
parity=serial.PARITY_ODD,
stopbits=serial.STOPBITS_ONE)
如果您在通信过程中遇到乱序字符,则很可能需要修复上述设置以匹配比例设置。
由于没有从 UART 读取字符而发生超时。设备很可能在轮询模式下工作,或者在读取
调用期间未满足的特定条件下以流字符方式工作。
手册说(第 65 页):
The print command can be transmitted by a software command or by pressing .
在第一种情况(轮询模式)中,您必须在读回任何信息之前发送命令(由协议(protocol)定义)。这个manual (第 53-63 页)对用于交换信息的协议(protocol)进行了一些说明。例如。如果我们想轮询比例模型:
ser.write(b"\x1bx1_\r\n") # Send data, stands for: ESC x 1 _ CR LF (p. 62)
rep = ser.read(64) # Try to read up to 64 bytes
要从 Scale 读取数据,请使用:
ser.write(b"\x1bP\r\n") # Equivalent to press button
# (block auto print, see p. 61)
rep = ser.read(ser.in_waiting) # Read pending bytes, should returns 16 bytes
# eg.: b"+****72.55*g**\r\n" (p. 57)
您可以查看this行为使用:
rep = ser.read_until()
它将在返回之前等待 \n
(换行),启动脚本并按下按钮。您应该会收到来自体重秤的数据。
如果秤在特定事件上传输数据(例如:按下按钮),那么您需要解决完全不同的问题。您需要实现一个监听器,因为您需要连续监听 UART。它通常使用队列来完成,主要思想是(为了简单起见,使用 bytearray
进行模拟):
q = bytearray()
while True:
# Read until Line Feed:
d = ser.read_until()
# Update queue:
q.extend(d)
# Logic here to consume queue:
# ...
不要在生产中使用最后一个片段,它只是一个用于修复想法的虚拟示例。如果您使用此解决方案,您最好实现监听器服务来解决 Producer-Consumer Problem .
在轮询和流之间进行选择取决于设备功能和您的应用程序要求。
关于python - 使用pyserial读取Scale显示b'',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60462391/
我正在尝试使用 python 和 PySerial 编写一个在 Linux PC 中使用串行端口的应用程序。但是在这台 PC 中还有其他使用串行端口的应用程序。 在尝试使用某个端口之前,如何知道其他应
我这辈子都不知道如何使用我的 Raspberry Pi 在 Python 3 中进行非阻塞串行读取。 这是我的代码: import serial #for pySerial ser = serial.
我正在尝试从 PySerial 文档运行此示例程序以打开串行端口。来源:http://pyserial.sourceforge.net/shortintro.html我尝试在 python 版本 2.
我正在尝试从通过 USB 连接到运行 ubuntu 的 Linux 计算机的硬件设备中捕获数据。这是我目前拥有的非常简单的脚本: import serial ser = serial.Serial('
我正在尝试使用 PySerial 来接受来自 RFID 阅读器的输入。根据 here: 的答案,我尝试使用 WinObj 并发现一些奇怪的东西:COM3 文件夹中没有 GLOBAL??? 端口指向“更
我有一个函数,它接受一组值并将其转换为字节字符串。例如,我需要: input_array = ['E9', '01','06','57','4A','01','F4','01','01','EF']
我有一个函数,它接受一组值并将其转换为字节字符串。例如,我需要: input_array = ['E9', '01','06','57','4A','01','F4','01','01','EF']
大家好,我正在编写一个脚本,该脚本将使用数据通信标准从主机获取数据(开发者:视觉委员会数据通信标准委员会镜头处理部门),通过串行端口并将数据传递到 ModBus 协议(protocol)中,以便设备执
目前我有一个树莓派端口连接到两个串行设备。这些设备是 USB 到 RS485/RS422 转换器。两者都用电线连接到适当的端子(设备A的端子1到设备B的端子2,设备A的端子2到设备B的端子1)。 我能
我正在尝试编写一个 pyserial (v2.6) 代码,该代码应该无限期地等待来自使用 inWaiting() 指定的端口的任何输入,然后使用 read() 读取它 但没有运气,根本没有输出。我究竟
如果 COM 端口未连接,我试图让 python 失败: import serial ser = serial print("ermrmrmrr") try: ser = serial.Ser
通过 pySerial 打开串行/控制台端口时遇到一个小问题。我的程序旨在获取事件的 com 端口,打开控制台连接,然后发送数据。当程序运行并插入 RS232 USB 时,我收到 SerialExce
我对 Python 和一般编程很陌生。我正在使用 Arduino 和 python 为 Spotify 制作 Remote 。每当按下 Arduino 上的按钮时,就会通过串行发送一个字符。有一个 p
我正在尝试编写一个 python 程序,它可以使用 PySerial 模块通过串行接口(interface)进行通信,如下所示: import serial if __name__ == '__mai
有什么方法可以检测 Pyserial 中的 RS232 BREAK 条件吗?我可以看到发送中断的选项,但没有接收选项。 谢谢 最佳答案 我不知道有什么简单的方法可以做到这一点,尤其是在 python
我正在尝试通过 OS X 上的 Pyserial 与我的 Arduino 进行交互。我正在通过发送 0 到 9 之间的数字来控制 LED。代码如 import serial arduino = ser
我正在尝试编写一个连续读取串行输入的函数。该函数必须能够处理与串行端口的意外断开连接并在可能时重新连接。尽管阅读了 stackOverflow 上的几个问题帖子并查看了 pySerial 文档,但我还
我正在尝试以 Python 允许我通过串行端口的速度进行写入和读取。问题是我正在快速写入并且它不起作用。我相信问题出在串行缓冲区上,而且我可能过度写入了输入缓冲区。我可以增加输入和输出缓冲区吗?它们是
在没有任何波特率的情况下使用 python pyserial 初始化串行连接时,它会进入默认的 9600 波特配置 ser = serial.Serial('/dev/ttyUSB0') 这个 pys
我正在使用 Pyserial(一个 Python 串行库)从树莓派上的串行端口读取十六进制数据,操作系统是 raspbian。 我需要每次从串口读取一个字节,并立即处理数据,没有任何时间延迟。我现在这
我是一名优秀的程序员,十分优秀!