2017-02-01 1 views
1

저는 다양한 릴레이를 구동하기 위해 RS485 Shield과 통신하기 위해 RPi2에서 코드를 사용하고 있습니다. 최근에 RPi3이 있는데 RPi2에서 이전에 작동했던 코드는 RPi3에 오류가 있습니다.'직렬'객체에는 'is_open'속성이 없습니다.

먼저, 블루투스 컨트롤러의 RPi3에서 uart (/ dev/ttyAMA0)가 "도난 당했다"는 것을 알고 있습니다. Using this post, 나는 RS485 방패가 이전처럼 작동해야하므로, GPIO 헤더에 uart를 재 할당했습니다. 문제가 하드웨어 그 자체와 관련이 없다고 생각합니다.

여기에 문제가 있습니다. 나는 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'속성을 가지고있다. 이 오류가 발생하는 이유에 대한 제안 사항은 무엇입니까? 웹 검색에서이 특정 오류에 대한 참조를 찾지 못했습니다. 당신은 라즈베리 파이에 pyserial의 이전 버전이있는 경우

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

답변

2

pyserialis_open 가지고 있지만, 대신 isOpen() 방법하지 않을 수 있습니다. isOpen() 메서드는 설명서에 따라 버전 3.0에서 depricated되었습니다. serial.VERSION으로 pyserial 버전을 확인할 수 있습니다.

+0

정답입니다. 감사! –

+0

쿨! 내 대답을 받아 들일 수 :) –