2017-06-30 71 views
1

2台のXBee pro S1を使用しています。私のPC上のコーディネーターが受信したパケットを読み込みたいのですが、API_2で有効になっています。 XCTUのパケットを参照してください、私はPythonののXBeeライブラリを使用していますが、それは何も出力を与えない:Python xbeeライブラリに受信フレームの出力がありません

コード:

import serial.tools.list_ports 
from xbee import XBee 
import serial 

ports = list(serial.tools.list_ports.comports()) 

for p in ports: #print the list of ports 
    print p 

def toHex(s): 
    lst = [] 
    for ch in s: 
     hv = hex(ord(ch)).replace('0x', '') 
     if len(hv) == 1: 
      hv = '0'+hv 
     hv = '0x' + hv 
     lst.append(hv) 

def decodeReceivedFrame(data): 
     source_addr_long = toHex(data['source_addr_long']) 
     source_addr = toHex(data['source_addr']) 
     id = data['id'] 
     samples = data['samples'] 
     options = toHex(data['options']) 
     return [source_addr_long, source_addr, id, samples] 

PORT = '/dev/ttyUSB0' 
BAUD_RATE = 9600 

ser = serial.Serial(PORT, BAUD_RATE) 
print "Serial ports initialised...." 

xbee = XBee(ser,escaped=True) 

print "XBee object created" 

while True: 
    try: 
    response = xbee.wait_read_frame() 
    sleep(0.5) 
    decodedData = decodeReceivedFrame(response) 
    print decodedData 
    print "data decoded" 
    except KeyboardInterrupt: 
    break 

ser.close() 

ポート番号とボーレートは、私はすべての適切なポート番号に変更し、接続されています私はコーディネーターを私のPCに再接続します。それは私がRXが点滅主導見ていても、そのようになったままで、何も出力を与えない

Serial ports initialised.... 
XBee object created 

:よう 私の出力が見えます。

import serial 
from time import sleep 

port = '/dev/ttyUSB0' 
baud = 9600 

ser = serial.Serial(port, baud) 

data = "" 

while True: 
try: 
    while ser.in_waiting: 
    sleep(1) 
    data = ser.read() 
    print data 

except KeyboardInterrupt: 
    break 

ser.close() 

それは次のような出力が得られます。 は以下のみpyserialで書かれたコードです。

誰かが親切に助けてもらえます。

答えて

0

シリアルポートとボーレートが正しいですか? xbeeパッケージはAPIモード2をサポートしていますか? APIモード1でのみ機能するかもしれません。

このパッケージには、フレームを読み込もうとするのではなく、生のバイトストリームにアクセスする方法がありますか?解析エラーで例外をスローするように設定できますか?

データを受け取っていることがわかるまで、responseを印刷することから始めます。そのループにsleep()コールを含める理由は何ですか?

私はあなたがtoHex()で達成しようとしているかわからないんだけど、あなたはPythonのメソッドstruct.unpack()見たり'0x%02X' % ord(ch)hvにあなたが行うすべての作業を交換したい場合があります。

+0

pyserialライブラリのみを使用しているため、出力(希望の出力ではありません)が得られていますが、読み込みができません。 –

+0

シリアルポートとボーレートは正しいですか、シリアルポートをコンピュータに接続するたびにチェックします。ボーレートはデフォルトです。私もAPI_1モードで成功しましたが、成功しませんでした。シリアルバッファがいっぱいになってしまいました(私はこれをランダムに試しました)。 –

+0

パケットはXCTUのAPIフレームとして送られますか?つまり、0x7E(〜)、2バイト長、チェックサムなどで始まります。 16進モードのXCTU端末ではどうなっていますか? (そして、私たちがXCTUで「API_1」と言っているときは、ATAP = 1を設定していると仮定します) – tomlogic

関連する問題