如何使用 PySerial 从 COM 端口读写?

Posted

技术标签:

【中文标题】如何使用 PySerial 从 COM 端口读写?【英文标题】:How to read and write from a COM Port using PySerial? 【发布时间】:2017-05-18 20:02:06 【问题描述】:

我安装了 Python 3.6.1 和 PySerial。我正在尝试

我可以得到连接的通讯器列表。我现在希望能够将数据发送到 COM 端口并接收回复。我怎样才能做到这一点?我不确定接下来要尝试的命令。

代码:

import serial.tools.list_ports as port_list
ports = list(port_list.comports())
for p in ports:
    print (p)

输出

COM7 - 多产的 USB 转串行通信端口 (COM7)

COM1 - 通讯端口 (COM1)

我从PySerial Documentation看到打开COM端口的方法如下:

导入序列

>>> ser = serial.Serial('/dev/ttyUSB0')  # open serial port

>>> print(ser.name)         # check which port was really used

>>> ser.write(b'hello')     # write a string

>>> ser.close()             # close port

我在 Windows 上运行,我收到以下行的错误:

ser = serial.Serial('/dev/ttyUSB0')

这是因为 '/dev/ttyUSB0' 在 Windows 中没有意义。我可以在 Windows 中做什么?

【问题讨论】:

是的,我很傻。应该研究了一下。如果您回答,我可以将您的答案标记为答案。 当您至少像以前那样尝试过时,可以寻求这样的帮助 :) 能否请您保留之前共享的链接? 在我的回答中 【参考方案1】:

This 可能是你想要的。我会看看关于写作的文档。 在 Windows 中使用没有 /dev/tty/ 的 COM1 和 COM2 等,因为这是基于 unix 的系统。读取使用 s.read() 等待数据,写入使用 s.write()。

import serial

s = serial.Serial('COM7')
res = s.read()
print(res)

如果发送的是什么,您可能需要解码以获取整数值。

【讨论】:

【参考方案2】:

在Windows上,你需要通过运行来安装pyserial

pip install pyserial

那么你的代码就是

import serial
import time

serialPort = serial.Serial(
    port="COM4", baudrate=9600, bytesize=8, timeout=2, stopbits=serial.STOPBITS_ONE
)
serialString = ""  # Used to hold data coming over UART
while 1:
    # Wait until there is data waiting in the serial buffer
    if serialPort.in_waiting > 0:

        # Read data out of the buffer until a carraige return / new line is found
        serialString = serialPort.readline()

        # Print the contents of the serial data
        try:
            print(serialString.decode("Ascii"))
        except:
            pass

将数据写入端口使用以下方法

serialPort.write(b"Hi How are you \r\n")

注意:b"" 表示你正在发送字节

【讨论】:

以上是关于如何使用 PySerial 从 COM 端口读写?的主要内容,如果未能解决你的问题,请参考以下文章

pySerial 运行命令列出端口

pyqt4 和 pyserial

仅当终端应用程序在后台打开时,使用 pyserial 从串行端口读取才有效

如何使用 pyserial 将文件逐行写入 com0com?

如何检查设备是不是已连接 Pyserial

Pyserial 不能很好地使用虚拟端口