我一直在RPi2上使用代码与RS485 Shield通信以驱动各种继电器。我最近有一个RPi3,以前在RPi2上工作过的代码在RPi3上有错误。
首先,我知道uart(/ dev / ttyAMA0)在蓝牙控制器的RPi3上“被盗”。 Using this post,我将uart重新分配给了GPIO头,因此RS485防护板应该像以前一样工作。即使我怀疑问题不在于硬件本身,我也提供了这一历史记录。
这是问题所在。当我在RPi3上执行以下代码时,出现错误:
Traceback (most recent call last):
File "serialtest.py", line 15, in <module>
if usart.is_open:
AttributeError: 'Serial' object has no attribute 'is_open'
显然,在pySerial库中,串行对象确实具有'is_open'属性。关于为什么会引发此错误的任何建议?在网络搜索中,我没有找到对此特定错误的任何引用。
#!/usr/bin/env python
import serial
import time
import binascii
data = "55AA08060100024D5E77"
usart = serial.Serial ("/dev/ttyAMA0",19200)
usart.timeout = 2
message_bytes = data.decode("hex")
try:
usart.write(message_bytes)
#print usart.is_open # True for opened
if usart.is_open:
time.sleep(0.5)
size = usart.inWaiting()
if size:
data = usart.read(size)
print binascii.hexlify(data)
else:
print('no data')
else:
print('usart not open')
except IOError as e :
print("Failed to write to the port. ({})".format(e))
最佳答案
如果您在Raspberry Pi上使用的是旧版本的pyserial
,则pyserial
可能没有is_open
,而是isOpen()
方法。根据文档,isOpen()
方法在3.0版中已被描述。您可以使用pyserial
检查serial.VERSION
版本。
关于python - “序列”对象没有属性“is_open”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41987168/