我尝试使用以下代码在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% 的时间可以工作。
谢谢,
科林
Arduino 的串口上是否有运行 getty 进程?或者甚至是在连接到 Arduino 的本地机器的串行端口上?如果是这样,也许它会造成干扰,应该停止。以下是可能相关的参考:http://codeandlife.com/2012/07/29/arduino-and-raspberry-pi-serial-communication/
我有类似的问题,我用以下解决方案修复了它
$ sudo nano /etc/inittab
然后转到文件底部,你会看到
T0:23:重生:/sbin/getty -L ttyAMA0 115200 vt100
或类似
只需在开头添加一个 # 字符,现在看起来像:
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
保存文件并重新启动 希望这有效