〔マイコンのトップに戻る〕
[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.