标签: pyserial

无法在 Pyserial 中打开串行连接:“termios.error:(22,'无效参数')”

我在执行以下代码时遇到问题:

import serial

ser = serial.Serial(
    port='/dev/tty.FireFly-16CB-SPP',
    baudrate=115200,
    #parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)

ser.open()
ser.isOpen()
Run Code Online (Sandbox Code Playgroud)

昨天还有效,我不知道我改变了什么。现在我收到以下错误消息:

    Traceback (most recent call last):
  File "main.py", line 32, in <module>
    bytesize=serial.EIGHTBITS
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/serial/serialutil.py", line 260, in __init__
    self.open()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/serial/serialposix.py", line 280, in open
    self._reconfigurePort()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/serial/serialposix.py", line 409, in _reconfigurePort
    termios.tcsetattr(self.fd, TERMIOS.TCSANOW, [iflag, oflag, cflag, lflag, ispeed, ospeed, cc])
termios.error: (22, 'Invalid argument')
Run Code Online (Sandbox Code Playgroud)

我是 Python 的初学者,无法解读上面的错误消息。我尝试重新安装 Pyserial,但这并没有解决错误。怎么了?

python pyserial

5
推荐指数
1
解决办法
1万
查看次数

pyserial 错误 - 无法打开端口

我在 stackoverflow 中看到了在 Python 3.3 的 USB 端口中使用 pyserial 的简单代码,但我无法让它在我新安装的 pyserial 2.7 [在 Windows 7,64 位,带有 3 个 USB 端口] 上工作。pyserial 的安装很顺利,我可以毫无错误地导入,并且 Pyscripter IDE 中可以识别方法,这增强了对良好安装的信心,但是:

代码精简到产生错误的要点是:

import serial
def main():
  ser = serial.Serial(port='COM2')
  ser.close()

if __name__ == '__main__':
   main
Run Code Online (Sandbox Code Playgroud)

由此我收到一个对话框,其中包含错误“SerialException:无法打开端口“COM2”:FileNotFoundError(2,'系统找不到指定的文件。',无,2)”

回溯指出:

*** Remote Interpreter Reinitialized  ***
>>>
Traceback (most recent call last):
  File "<string>", line 420, in run_nodebug
  File "C:\Python33\Lib\site-packages\scanport2.py", line 19, in <module>
main()
  File "C:\Python33\Lib\site-packages\scanport2.py", line 15, in main
ser = serial.Serial(port='COM2')
  File "C:\Python33\Lib\site-packages\serial\serialwin32.py", line 38, in __init__ …
Run Code Online (Sandbox Code Playgroud)

python usb pyserial

5
推荐指数
1
解决办法
5万
查看次数

重新连接 pySerial

我正在尝试编写一个连续读取串行输入的函数。该函数必须能够处理与串行端口的意外断开,并在可能的情况下重新连接。尽管阅读了 stackOverflow 上的几个问题帖子并浏览了 pySerial 文档,但我尚未找到解决方案。

这是我的代码:

def serialRead(serialPort, queue):
    """Adds serial port input to a queue."""

    ser = serial.Serial(serialPort - 1, timeout = 2)

    ser.parity = "O"
    ser.bytesize = 7

    while(True):
        try:
            if(ser == None):
                ser = serial.Serial(serialPort - 1, timeout = 2)

                ser.parity = "O"
                ser.bytesize = 7

                print("Reconnecting")

            queue.put(ser.read(27))
            ser.write(chr(6).encode())

            print("Writing Data...")

        except:
            if(not(ser == None)):
                ser.close()
                ser = None
                print("Disconnecting")

            print("No Connection")
            time.sleep(2)
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

Enter a Serial Port: 7
Writing Data...
Writing Data...
Writing Data...
Writing Data... …
Run Code Online (Sandbox Code Playgroud)

python reconnect pyserial

5
推荐指数
1
解决办法
6459
查看次数

使用Python,如何在Linux上创建虚拟串口?

我有两个 python 程序需要通过 pySerial API 从同一个串口读取数据。

据我了解,不能让两个程序从同一个串口读取数据。所以我计划做的是让一个 python 程序从物理串行端口读取数据,然后让它将从串行端口接收到的确切数据复制到虚拟串行端口,其他 python 程序可以通过 pySerial API 读取它。

在将使用 pySerial 的两个 Python 程序中,只有其中一个会返回任何内容。

有什么想法如何做到这一点?

python linux serial-port virtual-serial-port pyserial

5
推荐指数
1
解决办法
5623
查看次数

python 串行写入超时

我已经使用 pyserial 几天了。然而,今天出现了一个问题。我遇到了串行写入超时。前几天,当我使用开关时,一切正常。但今天我又换了一个开关。然后出现串口写入超时。我没有更改任何代码,但问题实际上相当严重。更严重的是,超时并不总是发生,这意味着有时我可以成功写入串行。

ser = serial.Serial( #Serial COM configuration
    port='COM5',
    baudrate=9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    rtscts=True,
    timeout=2,
    writeTimeout=5
  )
strInput = "show ver"
ser.flushInput()
ser.flushOutput()
ser.write(strInput.encode('utf-8')+b'\n')
Run Code Online (Sandbox Code Playgroud)

我已经确保端口是COM5,交换机的波特率是9600。非常感谢您回答我的问题。

python pyserial

5
推荐指数
1
解决办法
2万
查看次数

pySerial - 仅读取一个字节

我正在尝试使用 pySerial 通过串行读取和写入传感器。我没有软件或硬件流量控制。

我能够向设备发送一串十六进制字符串,但我只收到一个字节,而不是我应该看到的两到十个字节。传感器正在工作——我已经使用 Realterm 验证了这一点。

我尝试过使用 ser.readline() (而不是 inWaiting 循环)和 ser.read(2); 这只会导致程序挂起。我还尝试增加睡眠时间,并尝试不同的波特率(在电脑和传感器上),但似乎没有任何效果。

有人有建议吗?

import time
import serial

# configure the serial connections
ser = serial.Serial(
    port='COM1',
    baudrate=115200,
    parity=serial.PARITY_EVEN,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)

ser.isOpen()

print 'Enter your commands below.\r\nInsert "exit" to leave the application.'

while 1 :
    # get keyboard input
    data_in = raw_input(">> ")

    if data_in == 'exit':
        ser.close()
        exit()
    else:
        # send the character to the device
        ser.write(data_in.decode('hex') + '\r\n')

        out = ''
        time.sleep(1)
        while ser.inWaiting() > 0:
            out …
Run Code Online (Sandbox Code Playgroud)

python serial-port pyserial

5
推荐指数
1
解决办法
2万
查看次数

PySerial 和设备的 ioctl 不合适

我一直在尝试使用 N-UB 转换器(适用于此类扫描仪的 USB 转换器)控制 Keyence BL-1301 条码扫描仪。

我为此使用 pyserial (端口和其他设置正确):

serial.Serial(
    port     = '/dev/bus/usb/001/003',
    baudrate = 9600,
    parity   = serial.PARITY_NONE,
    stopbits = serial.STOPBITS_ONE,
    bytesize = serial.EIGHTBITS,
    writeTimeout = 0,
    timeout = 30,
    rtscts=True )
Run Code Online (Sandbox Code Playgroud)

但。python 给我:无法配置端口:(25,'不适合设备的 ioctl')

另外,我已经尝试过 Windows 的官方驱动程序,它可以工作。我需要 Linux (Ubuntu) 支持该设备。

任何想法??谢谢迈克

python linux barcode-scanner pyserial

5
推荐指数
0
解决办法
9006
查看次数

Python 中的 Pyserial(列出可用的 comports,无需 for 循环)

import serial.tools.list_ports

ports = serial.tools.list_ports.comports()

print(ports)
#[<serial.tools.list_ports_common.ListPortInfo object at 0x000001D48771C9B0>, <serial.tools.list_ports_common.ListPortInfo object at 0x000001D48866FB00>]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,comports 不可读,我可以通过 for 循环使其可读,但我需要将其放在具有可读单词的列表中,例如。[“COM1”,“COM2”,“COM3”]

有人有任何想法来改变它吗?我尝试创建一个新列表并附加到循环中也没有运气。当我打印出来时,结果是一样的。

更新:我认为我上次所做的是将每个对象再次附加在一起。我可以使用下面的代码获取我想要的 COM 特定信息:

import serial.tools.list_ports

ports = serial.tools.list_ports.comports()

available_ports = []

for p in ports:
    available_ports.append(p.device)

print(available_ports)
Run Code Online (Sandbox Code Playgroud)

python port pyserial python-3.5

5
推荐指数
1
解决办法
1万
查看次数

何时刷新 Pyserial 缓冲区?

我正在使用 Pyserial,并且有一个关于刷新输入和输出缓冲区的最佳实践的问题。目前,我在发送命令之前重置输出缓冲区,并在读取回复之前重置输入。看来我偶尔会错过回复的开始,因此我正在考虑修改我的程序以在发送命令之前重置输入缓冲区。我还在考虑链接我的发送和接收函数,以便发送始终调用接收并希望收紧循环。

    def send_cmd(self, cmd_to_send):
        self.ser.reset_output_buffer()
        self.ser.write(cmd_to_send)

    def receive_cmd(self):
        self.ser.reset_input_buffer()
        # Read logic below
Run Code Online (Sandbox Code Playgroud)

考虑过渡到这样的事情

    def send_cmd(self, cmd_to_send):
        self.ser.reset_output_buffer()
        self.ser.reset_input_buffer()
        self.ser.write(cmd_to_send)
        self.receive_cmd()

    def receive_cmd(self):
        # Read logic below
Run Code Online (Sandbox Code Playgroud)

python serial-port pyserial

5
推荐指数
1
解决办法
9591
查看次数

如何使用“serial.tools.list_ports”python 模块获取可用串行端口的列表?

我是 python 新手,我需要一个可用串行端口列表来在程序中选择其中一个。根据This,该serial.tools.list_ports模块可以通过执行方法为我做到这一点serial.tools.list_ports.comports()。因此,我在python解释器中执行了以下代码:

import serial.tools.list_ports
a=serial.tools.list_ports.comports()
print(a)
Run Code Online (Sandbox Code Playgroud)

结果是:

[<serial.tools.list_ports_linux.SysFS object at 0x7f2503d27be0>]
Run Code Online (Sandbox Code Playgroud)

ubuntu当我在终端中使用以下命令时

python3 -m serial.tools.list_ports
Run Code Online (Sandbox Code Playgroud)

它返回我想要的:

/dev/ttyUSB0        
1 ports found
Run Code Online (Sandbox Code Playgroud)

哪里有问题?

python pyserial python-3.x

5
推荐指数
1
解决办法
2万
查看次数