我将XBee插入Raspberry PI。这是我正在使用的Python 3.4代码:
f = os.open("/dev/ttyUSB0", os.O_RDWR | os.O_NONBLOCK)
print("Writing...")
b = bytes("hello","utf-8")
os.write(f,b)
print("Press return to start read")
cmd = input()
print("Reading...")
ret = os.read(f,10)
if ret == None:
print("ret = None")
else:
print("ret = {}".format(ret))
os.close(f)
昨天,这一切都按照我的预期运作。如果没有要读取的内容,则立即返回读取命令,零字节。
今天我将代码添加到项目的另一部分,该部分写入文本文件并包含一个线程RLock。现在上面的代码做了不同的事情。如果没有等待读取的字节,或者有等待读取的字节但它们没有以0x0D结尾,则会出现错误:
BlockingIOError: [Errno 11] Resource temporarily unavailable
但是有些字节等待读取以0x0D结尾,读取函数返回包含0x0D的字节。
更新:我已经重新格式化了系统,故障并没有消失,这表明不是文件和线程锁定代码的添加导致了这个问题。
我运行minicom并且问题已经消失,所以在我将其作为文件打开之前,我应该在设备上进行串行配置吗?
这是将os.read返回其原始行为的行:
minicom -b 9600 -o -D / dev / ttyUSB0
答案 0 :(得分:0)
我强烈怀疑这两种不同的行为与串口上的CTS / RTS流量控制设置有关。尝试打开或关闭CTS / RTS以获得所需的行为。