2017-02-01 4 views
1

J'ai utilisé du code sur mon RPi2 pour communiquer avec un RS485 Shield pour piloter divers relais. J'ai récemment reçu un RPi3, et le code qui a déjà fonctionné sur le RPi2 a une erreur sur le RPi3. Pour commencer, je sais que le uart (/ dev/ttyAMA0) est "volé" sur le RPi3 pour le contrôleur bluetooth. Using this post, j'ai réaffecté le uart à l'en-tête GPIO de sorte que le bouclier RS485 devrait fonctionner comme avant. Je vous donne cette histoire, même si je soupçonne que le problème n'est pas avec le matériel en soi.L'objet 'Serial' n'a pas d'attribut 'is_open'

Voici le problème. Lorsque j'exécute le code ci-dessous sur le RPi3, je reçois une erreur:

Traceback (most recent call last): 
    File "serialtest.py", line 15, in <module> 
    if usart.is_open: 
AttributeError: 'Serial' object has no attribute 'is_open' 

Il est évident que, dans la bibliothèque pyserial, l'objet de série a le attribut « is_open ». Des suggestions sur pourquoi cette erreur est lancée? Je n'ai trouvé aucune référence à cette erreur spécifique dans les recherches sur le Web.

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

Répondre

2

Si vous avez une ancienne version de pyserial sur le Raspberry Pi, pyserial pourrait ne pas avoir le is_open, mais isOpen() méthode à la place. La méthode isOpen() a été supprimée dans la version 3.0 conformément à la documentation. Vous pouvez vérifier la version pyserial avec serial.VERSION.

+0

C'était la bonne réponse. Merci! –

+0

Cool! Pourriez-vous accepter ma réponse :) –