串行端口的Linux VS视窗(Serial Ports Linux vs Windows)

2019-10-29 10:19发布

我有我的pyserial程序在Ubuntu 16.我试图发送一个break命令使用pyserial硬件设备的问题。 我写了一个Python脚本:

  1. 设置端口/波特率/奇偶/ bytesize / ...
  2. 打开端口
  3. 将中断发送命令
  4. 读取来自该装置的返回消息。

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

当我在Ubunutu运行脚本我不得不放弃权限的端口(须藤搭配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))

Answer 1:

首先,你需要有访问串口适当的权限。 它可以通过包括您的用户到组来完成dialout

sudo usermod -aG dialout <user>

您需要重新启动系统才能完成它。

为了避免一些资料留在缓冲区,则可能需要之前串口操作以清除读取和写入缓冲区:

pyserial 3.0:

ser.reset_input_buffer()
ser.reset_output_buffer()

pyserial 2.7或更早版本:

ser.flushInput()
ser.flushOutput()

不要忘了关闭该端口正在做的所有操作后。 希望这可以帮助。



Answer 2:

首先忘记你的应用程序,并专注于端口故障排除,以串行方式使用腻子使用此端口发送的几个终端字符。 使用跳线有关连接DB9销3至引脚2(RX和TX)收到的每条输入的字符的回声的验证。



文章来源: Serial Ports Linux vs Windows