2014-09-04 4 views
3

USB를 통해 Telegesis ZigBee 모듈 (ETRX3 USB 스틱)이 연결된 라즈베리 PI B +가 있습니다. 사용 명령 :파이썬에서 직렬 포트에 쓰는 방법 ttyUSB0는 해석 된 명령일까요?

debian:~# stty -F /dev/ttyUSB0 -raw ispeed 19200 ospeed 19200 
    debian:~# cat < /dev/ttyUSB0 & 
    debian:~# echo "ATI" > /dev/ttyUSB0 

지그비 모듈은 ATI 명령을 실행하고 나는 올바른 출력을 볼 수 있습니다

Telegesis ETRX357 

    R308C 

    OK 

내가 파이썬 스크립트와 함께하고 싶은 같은 일을. 화면

ATI 

에 같은

#!/usr/bin/env python 

    # based on tutorials: 
    # http://www.roman10.net/serial-port-communication-in-python/ 
    # http://www.brettdangerfield.com/post/raspberrypi_tempature_monitor_project/ 

    import serial, time 

    SERIALPORT = "/dev/ttyUSB0" 
    BAUDRATE = 19200 

    ser = serial.Serial(SERIALPORT, BAUDRATE) 

    ser.bytesize = serial.EIGHTBITS #number of bits per bytes 

    ser.parity = serial.PARITY_NONE #set parity check: no parity 

    ser.stopbits = serial.STOPBITS_ONE #number of stop bits 

    #ser.timeout = None   #block read 

    #ser.timeout = 0    #non-block read 

    ser.timeout = 2    #timeout block read 

    ser.xonxoff = False  #disable software flow control 

    ser.rtscts = False  #disable hardware (RTS/CTS) flow control 

    ser.dsrdtr = False  #disable hardware (DSR/DTR) flow control 

    ser.writeTimeout = 0  #timeout for write 

    print 'Starting Up Serial Monitor' 

    try: 
     ser.open() 

    except Exception, e: 
     print "error open serial port: " + str(e) 
     exit() 

    if ser.isOpen(): 

     try: 
      ser.flushInput() #flush input buffer, discarding all its contents 
      ser.flushOutput()#flush output buffer, aborting current output 

      ser.write("ATI") 
      print("write data: ATI") 
      time.sleep(0.5) 
      numberOfLine = 0 

      while True: 

       response = ser.readline() 
       print("read data: " + response) 

       numberOfLine = numberOfLine + 1 
       if (numberOfLine >= 5): 
        break 

      ser.close() 

     except Exception, e: 
      print "error communicating...: " + str(e) 

    else: 
     print "cannot open serial port " 

얻을 결과를하지만 난 쉘 명령의 등, 지그비 (ZigBee) 모듈에 의해 실행되는 명령을 할 : 나는 코드를 파이썬 스크립트를 작성되었습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

ser.timeout = None

:

답변

1
  1. write on ttyUSB0

    당신은 당신이 타임 아웃 시간을 변경해야합니다

    ser.write("ATI\r\n")

  2. 당신의 쓰기()로 끝 (end-of-line)을 추가 할 필요가

그렇지 않으면 아무것도 읽지 않아도 readline()이 2 초 후에 반환됩니다.