我在 Ubuntu 16 上的 pyserial 程序有问题。 我正在尝试使用 pyserial 向硬件设备发送中断命令。我写了一个 python 脚本:
- 设置端口/波特率/奇偶校验/字节大小/...
- 打开端口
- 发送中断命令
- 读取设备返回的消息。
我在我的 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/