Python:尝试打开串行导致 IOError:[Errno 6] 设备未配置

问题描述 投票:0回答:2

我尝试使用以下代码在Python中打开两个串口:

for i in range(0, 2):
    if platform.system() == "Darwin":
        pos = 2+i
    else:
        pos = i
    port = serial.Serial(current_ports[pos], BAUD_RATE, timeout=TIMEOUT)
    time.sleep(1.516)
    port.write('#')
    time.sleep(1.516)
    out = ''
    print "Reading MAC Address...."
    while port.inWaiting() > 0:
        out += port.read(1)
        print out
    if out == '04:E9:E5:00:EC:51':
        led_port = port
    elif out == '04:E9:E5:01:0C:E0':
        matrix_port = port   

有时端口会成功打开,有时则不会。如果不这样做,我会收到此错误消息:

Reading MAC Address....
Traceback (most recent call last):
  File "animation.py", line 227, in <module>
    main()
  File "animation.py", line 208, in main
    led_port, matrix_port = get_ports()
  File
"/Users/collinschupman/Documents/FutureCities/MurmurWall/Onsite/Raspi/helper_functions.py", line 41, in get_ports
while port.inWaiting() > 0:
 File "/Library/Python/2.7/site-packages/serial/serialposix.py", line 449, in inWaiting
    s = fcntl.ioctl(self.fd, TIOCINQ, TIOCM_zero_str)
IOError: [Errno 6] Device not configured

如您所见,它到达 inWaiting() 调用,然后抛出此错误。

仅供参考,代码正在向几个 Arduino 发送一条消息,以便可以通过 MAC 地址来识别它们。

我在 Python 端做的事情是否存在明显错误,会导致此设置偶尔失败?我想说这段代码现在有 50% 的时间可以工作。

谢谢,

科林

python serial-port arduino
2个回答
0
投票

Arduino 的串口上是否有运行 getty 进程?或者甚至是在连接到 Arduino 的本地机器的串行端口上?如果是这样,也许它会造成干扰,应该停止。以下是可能相关的参考:http://codeandlife.com/2012/07/29/arduino-and-raspberry-pi-serial-communication/


0
投票

我有类似的问题,我用以下解决方案修复了它

$ sudo nano /etc/inittab

然后转到文件底部,你会看到

T0:23:重生:/sbin/getty -L ttyAMA0 115200 vt100

或类似

只需在开头添加一个 # 字符,现在看起来像:

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

保存文件并重新启动 希望这有效

参考: http://www.hobbytronics.co.uk/raspberry-pi-serial-port

© www.soinside.com 2019 - 2024. All rights reserved.