〔マイコンのトップに戻る〕
[Xbeeの実験]
[FileSystem]
[REPL 1]
[PyCharm導入]
[PyCharmの操作]
[PyCharmで開発]
-------------------------------------------------------------------------------- import xbee, time # XBee3 受信したメッセージの操作を実行する為のユーティリティ関数 def format_eui64(addr): return ':'.join('%02x' % b for b in addr) def format_packet(p): type = 'Broadcast' if p['broadcast'] else 'Unicast' print("%s message from EUI-64 %s (network 0x%04X)" % (type, format_eui64(p['sender_eui64']), p['sender_nwk'])) # print("from EP 0x%02X to EP 0x%02X, Cluster 0x%04X, Profile 0x%04X:" % # (p['source_ep'], p['dest_ep'], p['cluster'], p['profile'])) print(p['payload'],"\n") print("Forming a new Zigbee network as a coordinator...") xbee.atcmd("NI", "Coordinator") network_settings = {"CE": 1, "ID": 0x777, "EE": 0, "NJ": 0xFF} for command, value in network_settings.items(): xbee.atcmd(command, value) xbee.atcmd("AC") # 変更を適用する time.sleep(1) # 1秒待つ # ネットワーク接続が成功するまで待つ while xbee.atcmd("AI") != 0: time.sleep(0.1) # 0.1秒待つ print("Network Established\n") print("Waiting for a remote node to join...") node_list = [] while len(node_list) == 0: # ルータが参加するまでネットワーク検出を実行する node_list = list(xbee.discover()) print("Remote node found, transmitting data") for node in node_list: dest_addr = node['sender_nwk'] # using 16 bit addressing dest_node_id = node['node_id'] payload_data = "Hello, " + dest_node_id + "!" print("Sending \"{}\" to {}".format(payload_data, hex(dest_addr))) xbee.transmit(dest_addr, payload_data) # 参加ルータにメッセージを送る # 受信ループを開始する print("Receiving data...") print("Hit CTRL+C to cancel") while True: p = xbee.receive() if p: # 何か受信したら表示を行う format_packet(p) else: time.sleep(0.25) # 0.25秒待つ --------------------------------------------------------------------------------4.[Ctrl + D]を押して起動させて置きます。
下記の様に表示されリモートノードの接続待ちを行います。
-------------------------------------------------------------------------------- Forming a new Zigbee network as a coordinator... Network Established Waiting for a remote node to join... -------------------------------------------------------------------------------- リモートノードが起動(接続)状態であれば、リモートノードに"Hello, Router!"を送信し、 リモートノードからのデータ受信待ちにはいります。 "Router"文字はルータ側で設定されている"NI"ノード名になります。 -------------------------------------------------------------------------------- Forming a new Zigbee network as a coordinator... Network Established Waiting for a remote node to join... Remote node found, transmitting data Sending "Hello, Router!" to 0x375e Receiving data... Hit CTRL+C to cancel --------------------------------------------------------------------------------
-------------------------------------------------------------------------------- import xbee, time # XBee3 受信したメッセージの操作を実行する為のユーティリティ関数 def format_eui64(addr): return ':'.join('%02x' % b for b in addr) def format_packet(p): type = 'Broadcast' if p['broadcast'] else 'Unicast' print("%s message from EUI-64 %s (network 0x%04X)" % (type, format_eui64(p['sender_eui64']), p['sender_nwk'])) # print("from EP 0x%02X to EP 0x%02X, Cluster 0x%04X, Profile 0x%04X:" % # (p['source_ep'], p['dest_ep'], p['cluster'], p['profile'])) print(p['payload'],"\n") print("Joining network as a router...") xbee.atcmd("NI", "Router") network_settings = {"CE": 0, "ID": 0x777, "EE": 0} for command, value in network_settings.items(): xbee.atcmd(command, value) xbee.atcmd("AC") # 変更を適用する time.sleep(1) # 1秒待つ # ネットワーク接続成功を報告するまでAIに問い合わせる while xbee.atcmd("AI") != 0: time.sleep(0.1) print("Connected to Network\n") last_sent = time.ticks_ms() interval = 5000 # メッセージを送信する頻度 # 送受信ループを開始する print("Sending temp data every {} seconds".format(interval/1000)) while True: p = xbee.receive() if p: # 何か受信したら表示を行う format_packet(p) else: # 準備ができたら温度を送信 if time.ticks_diff(time.ticks_ms(), last_sent) > interval: temp = "Temperature: {}C".format(xbee.atcmd("TP")) print("\tsending " + temp) try: xbee.transmit(xbee.ADDR_COORDINATOR, temp) except Exception as err: print(err) last_sent = time.ticks_ms() time.sleep(0.25) # 0.25秒待つ --------------------------------------------------------------------------------4.[Ctrl + D]を押して起動させます。
下記の様に表示されます。 コーディネーターからのメッセージ"Hello, Router!"を受信し、 5秒枚に温度データ"sending Temperature: 36Cを送信しています。" "Router"文字はルータ側で設定されている"NI"ノード名になります。 -------------------------------------------------------------------------------- Joining network as a router... Connected to Network Sending temp data every 5.0 seconds Unicast message from EUI-64 00:13:a2:00:41:93:f3:5e (network 0x0000) b'Hello, Router!' sending Temperature: 36C sending Temperature: 36C sending Temperature: 36C Traceback (most recent call last): File "<stdin>", line 50, in <module> KeyboardInterrupt: >>> -------------------------------------------------------------------------------- コーディネーター側の表示は、 -------------------------------------------------------------------------------- Forming a new Zigbee network as a coordinator... Network Established Waiting for a remote node to join... Remote node found, transmitting data Sending "Hello, Router!" to 0x375e Receiving data... Hit CTRL+C to cancel Unicast message from EUI-64 00:13:a2:00:41:98:20:a7 (network 0x375E) b'Temperature: 36C' Unicast message from EUI-64 00:13:a2:00:41:98:20:a7 (network 0x375E) b'Temperature: 36C' Unicast message from EUI-64 00:13:a2:00:41:98:20:a7 (network 0x375E) b'Temperature: 36C' Traceback (most recent call last): File "<stdin>", line 52, in <module> KeyboardInterrupt: >>> --------------------------------------------------------------------------------※ XBee3の15番ピン(DIO5/ASSC)にLEDを配線すればネットワークに参加すると点滅するので
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2019 Shigehiro Kimura All Rights Reserved.