2017-07-06 8 views
2

私の設定で何が問題なのかを知ることができたら幸いです。ノードRED v0.17.3のRaspberry Pi 3でXBee APIフレームを読み取ることができません。

私は2つのスクリプト、MACからXEEのAPIフレームパケットを送信するものを(書いたラズベリーパイへのTX/RXポートを経由して、私のMacと接続された一方にUSB経由で接続された一方3.

、ジグビーノードに持っています)とパケットを読み取るもの(piへ)。 2つのスクリプトはpython-xbeeライブラリに基づいています。

import serial 
from xbee import XBee, ZigBee 

serial_port = serial.Serial('/dev/serial0', 9600) 
xbee = ZigBee(serial_port, escaped=True) 

while True: 
    try: 

     # Receive AT packet 
     parameter = xbee.wait_read_frame() 
     print 'parameter=' 
     print parameter 

    except KeyboardInterrupt: 
     break 

serial_port.close() 

最初のスクリプトの出力がされ、次の(送信者):パイで

import serial 
from xbee import XBee, ZigBee 

serial_port = serial.Serial('/dev/tty.usbserial-A5025UGJ', 9600) 
xbee = ZigBee(serial_port, escaped=True) 

# coordinator = 00 13 A2 00 40 8B B1 5A 

while True: 
    try: 
     # Send AT packet 
     xbee.send('tx',frame_id='A', dest_addr_long='\x00\x13\xA2\x00\x40\x8B\xB1\x5A', data='test') 
     parameter = xbee.wait_read_frame() 
     print 'parameter=' 
     print parameter 

    except KeyboardInterrupt: 
     break 

serial_port.close() 

Mac上で -

スクリプトは、以下の通りです。 '\ x00'、 'frame_id': 'A'、 'deliver_status': '\ x00'、 'dest_addr': '\ x00 \ x00'、 'd' iscover_status ': '\のX00'、 'ID': 'tx_status'}

2番目のスクリプトの出力は、以下の(受信機)は:= {

パラメータ' source_addr_long ':' '\' x '\ x19 \ x13 \ x13 \ x13 \ x18 \ x18 \ x01 '}

ノードレッド0.17.3を起動し、デバッグ出力モジュールに接続されたシリアル入力モジュールを使用すると、新しい行はchar "\ n"を基にしています。ポートはスクリプト(/ dev/serial0)と同じです。

[ 
    { 
     "id": "e6aa5379.9fd8c", 
     "type": "debug", 
     "z": "35e84ae.5ae88b6", 
     "name": "", 
     "active": true, 
     "console": "false", 
     "complete": "true", 
     "x": 432.5, 
     "y": 213, 
     "wires": [] 
    }, 
    { 
     "id": "63563843.bba178", 
     "type": "serial in", 
     "z": "35e84ae.5ae88b6", 
     "name": "", 
     "serial": "fbf0b4fa.9b2918", 
     "x": 209.5, 
     "y": 201, 
     "wires": [ 
      [ 
       "e6aa5379.9fd8c" 
      ] 
     ] 
    }, 
    { 
     "id": "fbf0b4fa.9b2918", 
     "type": "serial-port", 
     "z": "", 
     "serialport": "/dev/serial0", 
     "serialbaud": "9600", 
     "databits": "8", 
     "parity": "none", 
     "stopbits": "1", 
     "newline": "\\n", 
     "bin": "false", 
     "out": "char", 
     "addchar": false 
    } 
] 

は、私が「5000ミリ秒のtimeour後に」スプリットを設定し、ノード「シリアル」の設定を変更し、「バイナリバッファ」をお届けした場合、これは、デバッグビューでの結果であり、

[126,0,125,49,144,0,125,51,162,0,64,139,177,76,163,25,1,112,114,111,118,97,13]

誰のXBee APIフレームで入力を分割するための正しい方法を見つける方法を知っていますか?

+0

データは、/ r(改行または10)でなく/ r(戻り値または13)で終了するように見えます。 – hardillb

+0

こんにちは@hardillb、ZigBee APIフレームの最後の文字がチェックサム。 Pythonスクリプトのようにエスケープする方法はありますか? 'xbee = ZigBee(シリアルポート、エスケープ= True)' それ以外の場合は、タイムアウト機能を使用する必要があります。 –

+0

OK、おそらくnpmでノードを探してZigbeeフレームを展開し、新しいノード-REDノードを作成します。 – hardillb

答えて

0

node-redについてはわかりませんが、フレームの抽出にはバイトストリームを解析する必要があります。出入りするデータをエスケープするためにはもっと多くの作業が必要になりますが、フレームモードで表示されるときにフレームの先頭(0x7E)がエスケープされるAPIモード2(ATAP = 2)を使用できると思いますそのバイトに。

+0

これは少なくとも2つのフレームを受信した場合には機能しますが、5分ごとに1つのフレームがあるケース –

+0

私の考えは、XBeeがフレーム(モデムステータス、送信ステータス)あなたが期待しているデータ。 APIフレームフォーマットと解析方法については、XBeeのドキュメントを参照してください。フレームを解析するためにhttps://www.npmjs.com/package/xbee-apiを使用できますか? – tomlogic

関連する問題