我在Ubuntu 16上遇到了pyserial程序的问题。 我正在尝试使用pyserial向硬件设备发送break命令。我写了一个python脚本:
我在我的Ubuntu 16.04机器上运行脚本,我得到零响应,它只是挂起或最终超时。我将相同的脚本复制到我的Windows机器,更改端口(从/ dev / ttyUSB0到COM#),我的脚本工作正常,立即从设备获得响应。
当我在Ubunutu上运行脚本时,我必须授予端口权限(sudo chmod 666 / dev / ttyUSB),或者在打开端口时获得权限被拒绝错误。不确定这是否重要。
有没有人对可能发生的事情有任何见解?我知道Windows和Linux处理串口/通讯端口的方式不同,但我是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))
答案 0 :(得分:0)
首先,您需要具有访问串行端口的适当权限。可以通过将您的用户加入群组dialout
:
sudo usermod -aG dialout <user>
您需要重新启动系统才能完成它。
为避免某些信息留在缓冲区中,您可能需要在串口操作之前清除读写缓冲区:
pyserial 3.0:
ser.reset_input_buffer()
ser.reset_output_buffer()
pyserial 2.7
或更早:
ser.flushInput()
ser.flushOutput()
在完成所有操作后,不要忘记关闭端口。希望这会有所帮助。
答案 1 :(得分:0)
首先忘记您的应用程序,然后专注于端口故障排除,在串行模式下使用腻子通过该端口发送一些终端字符。使用跳线将DB9针3连接到针2(rx和tx),以验证您收到键入的每个字符的回显。