串行端口Linux与Windows

时间:2018-04-21 16:09:34

标签: linux serial-port pyserial

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

  1. 设置端口/波特/奇偶校验/字节大小/...
  2. 打开端口
  3. 发送中断命令
  4. 从设备读取返回消息。
  5. 我在我的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))
    

2 个答案:

答案 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),以验证您收到键入的每个字符的回显。