linux - 串行端口 Linux 与 Windows

标签 linux serial-port pyserial

我在 Ubuntu 16 上的 pyserial 程序有问题。 我正在尝试使用 pyserial 向硬件设备发送中断命令。我写了一个 python 脚本:

  1. 设置端口/波特率/奇偶校验/字节大小/...
  2. 打开端口
  3. 发送中断命令
  4. 读取设备返回的消息。

我在我的 Ubuntu 16.04 机器上运行脚本,但得到零响应,它只是挂起或最终超时。我将相同的脚本复制到我的 Windows 机器上,更改端口(从/dev/ttyUSB0 到 COM#)并且我的脚本完美运行,立即从设备获得响应。

当我在 Ubunutu 上运行脚本时,我必须授予端口权限 (sudo chmod 666/dev/ttyUSB),否则在打开端口时会出现权限被拒绝的错误。不确定这是否重要。

有没有人知道可能发生的事情?我知道 Windows 和 Linux 处理串口/com 端口的方式不同,但我是 Linux 和串口的新手,所以不确定我是否遗漏了什么。

我正在使用 USB 转串行电缆 ( http://www.ugreen.com.cn/product-681-en.html ),我必须安装一些驱动程序。我连接了串行读/写引脚并进行了测试以确保数据正在通过(确实如此),所以我知道这是有效的。

import serial
ser = serial.Serial()
ser.port = '/dev/ttyUSB0' # or COM12 on windows
ser.baudrate = 9600
ser.parity = serial.PARITY_NONE
ser.bytesize = serial.EIGHTBITS
ser.stopbits = serial.STOPBITS_ONE
ser.open()
ser.send_break(duration=0.9)
print(ser.read(10))

最佳答案

首先,您需要具有访问串行端口的适当权限。可以通过将您的用户加入组 dialout 来完成:

sudo usermod -aG dialout <user>

需要重启系统才能完成。

为避免某些信息保留在缓冲区中,您可能需要在串口操作之前清除读写缓冲区:

pyserial 3.0:

ser.reset_input_buffer()
ser.reset_output_buffer()

pyserial 2.7 或更早版本:

ser.flushInput()
ser.flushOutput()

不要忘记在完成所有操作后关闭端口。希望这会有所帮助。

关于linux - 串行端口 Linux 与 Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49957705/

相关文章:

python - PyQt5 - 自动化串行模块

python - 有没有办法将 "compile"Python 代码放到 Arduino(Uno)上?

python - 为什么serial.tools在os.system中可用而不是在os.system中可用?

C# 如何在 C# 中刷新串口

jar - 将 Java JAR 文件移动到新机器

linux - 将整数添加到缓冲区 nasm 的语法

linux - Bash shell 脚本在脚本中获取用户的输入

php - websocket服务器停止或服务器长时间重启后如何自动启动

linux - 将变量列表传递给简单的 bash 命令

c++ - QByteArray 的外部与内部声明