'串行'对象没有属性' is_open'

时间:2017-02-01 18:36:59

标签: python serial-port pyserial uart raspberry-pi3

我一直在使用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库中,串行对象具有&#39; is_open&#39;属性。有关为何抛出此错误的任何建议?我在网络搜索中找不到任何对此特定错误的引用。

#!/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))

1 个答案:

答案 0 :(得分:2)

如果Raspberry Pi上有旧版pyserialpyserial可能不会使用is_open,而是使用isOpen()方法。根据文档,isOpen()方法在3.0版中进行了描述。您可以使用pyserial检查serial.VERSION版本。