〔マイコンのトップに戻る〕
[Xbeeの実験]
[FileSystem]
[REPL 2]
[PyCharm導入]
[PyCharmの操作]
[PyCharmで開発]



これで、端末にMicroPythonのコードを入力又は貼り付ける事ができます。


[OK]ボタンを押しましょう。

"フロー制御(F):"はHardwareを選択、"ボーレート(B):"を9600bpsから115200bpsに切り替え、
[OK]ボタンを押しましょう。
(勿論、XBee3側は”BDフィールドで115200 [7]”を選択していますよね)

"ローカルエコー(L):"ボックスがチェックされていない事を確認して下さい。
"改行コード"エリアで、"受信(M):"ドロップダウンメニューをクリックし、[AUTO]を選択します。
[OK]ボタンを押しましょう。


------------------------------------------------------------------------------ >>> import machine >>> machine.soft_reset() ------------------------------------------------------------------------------
------------------------------------------------------------------------------
>>> help()
Welcome to MicroPython!
For online docs please visit http://docs.micropython.org/.
Control commands:
CTRL-A -- on a blank line, enter raw REPL mode
CTRL-B -- on a blank line, enter normal REPL mode
CTRL-C -- interrupt a running program
CTRL-D -- on a blank line, reset the REPL
CTRL-E -- on a blank line, enter paste mode
CTRL-F -- on a blank line, enter flash upload mode
For further help on a specific object, type help(obj)
For a list of available modules, type help('modules')
------------------------------------------------------------------------------
制御コマンド:
CTRL-A - rawのREPLモードに入る。(貼り付けモードに似ていますが、文字がエコーバックされない点が異なります)
CTRL-B - 通常のREPLモードに入る、またはMicroPythonのバナーを表示します。
CTRL-C - 現在実行中のプログラムの中断を行います。
CTRL-D - REPLをリセット(再起動)し、ヒープをクリアします。
CTRL-E - 貼り付けモードに入ります。
CTRL-F - コードをフラッシュにアップロードします。
特定のオブジェクトについてさらにヘルプが必要な場合は、help(obj)と入力してください。
利用可能なモジュールの一覧を表示するには、help('modules')と入力してください。
------------------------------------------------------------------------------
プロンプトでhelp('modules')と入力すると、利用可能な全てのMicropythonモジュールが表示されます。
------------------------------------------------------------------------------
>>> help('modules')
__main__ io time uos
array json ubinascii ustruct
binascii machine uerrno utime
builtins micropython uhashlib xbee
errno os uio
gc struct ujson
hashlib sys umachine
Plus any modules on the filesystem
(ファイルシステム上の任意のモジュール)
------------------------------------------------------------------------------
Micropythonのモジュール説明は、"MicroPython ライブラリ"のHPページを参照しましょう。
------------------------------------------------------------------------------
>>> import sys
>>> help(sys)
object <module 'sys'>is of type module
(オブジェクト <module 'sys'> はmodule型です)
__name__ -- sys
path -- ['', '/flash', '/flash/lib']
argv -- ['']
version -- 3.4.0
version_info -- (3, 4, 0)
implementation -- ('micropython', (1, 10, 0))
platform -- xbee3-Zigbee
byteorder -- little
maxsize -- 2147483647
exit -- <function>
stdin -- <io.FileIO 0>
stdout -- <io.FileIO 1>
stderr -- <io.FileIO 2>
modules -- {}
print_exception -- <function>
------------------------------------------------------------------------------
------------------------------------------------------------------------------
for i in range(10):
if i > 5:
break
print(i)
------------------------------------------------------------------------------
A 端末のMicroPython >>>プロンプトの所で[Ctrl + E] を押して貼り付けモードに入ります。------------------------------------------------------------------------------ >>> paste mode; Ctrl-C to cancel, Ctrl-D to finish 1=== ------------------------------------------------------------------------------B MicroPython端末ウィンドウを右クリックしてサブメニューから[貼り付け]をクリックするか、
------------------------------------------------------------------------------ >>> paste mode; Ctrl-C to cancel, Ctrl-D to finish 1=== for i in range(10): 2=== if i > 5: 3=== break 4=== print(i) ------------------------------------------------------------------------------C [Ctrl + D]を押して終了します。

以下は、"time"モジュールの関数一覧です。 ------------------------------------------------------------------------------ >>> import time >>> help(time) object <module 'utime'> is of type module __name__ -- utime sleep -- <function> sleep_ms -- <function> sleep_us -- <function> ticks_ms -- <function> ticks_us -- <function> ticks_cpu -- <function> ticks_add -- <function> ticks_diff -- <function> >>> ------------------------------------------------------------------------------・ sleep() :設定された秒数だけ操作を遅らせます、sleep(0.5)とすれば500ms遅延します。
--------------------------------------------------------------------------------
import time
start = time.ticks_ms() # ミリ秒カウンタから値を取得する
time.sleep(1) # 1秒間スリープ
time.sleep_ms(500) # 500ミリ秒間スリープ
time.sleep_us(1000) # 1000マイクロ秒間スリープ
delta = time.ticks_diff(time.ticks_ms(), start)
print("Operation took {} ms to execute".format(delta))
--------------------------------------------------------------------------------
実行結果
日本語は表示できないので"??????"となっているが、コメントなのでOKでしょう。
--------------------------------------------------------------------------------
>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
1=== import time
2===
3=== start = time.ticks_ms() # ???????????????
4===
5=== time.sleep(1) # 1??????
6=== time.sleep_ms(500) # 500????????
7=== time.sleep_us(1000) # 1000??????????
8===
9=== delta = time.ticks_diff(time.ticks_ms(), start)
10===
11=== print("Operation took {} ms to execute".format(delta))
Operation took 1501 ms to execute
>>>
--------------------------------------------------------------------------------
次の例では、現在の稼働時間の100ms前と100ms後の時間を表示させてみました。-------------------------------------------------------------------------------- paste mode; Ctrl-C to cancel, Ctrl-D to finish 1=== print(time.ticks_ms()) 2=== print(time.ticks_add(time.ticks_ms(), -100)) 3=== print(time.ticks_ms()) 4=== print(time.ticks_add(time.ticks_ms(), 100)) 4045771 4045671 4045771 4045871 --------------------------------------------------------------------------------
以下は、"xbee"モジュールの関数一覧です。 -------------------------------------------------------------------------------- >>> import xbee >>> help(xbee) object <module 'xbee'> is of type module __name__ -- xbee XBee -- <class 'XBee'> atcmd -- <function> relay -- <module 'relay'> discover -- <function> receive -- <function> transmit -- <function> ADDR_BROADCAST -- b'\x00\x00\x00\x00\x00\x00\xff\xff' ENDPOINT_DIGI_DATA -- 232 CLUSTER_DIGI_SERIAL_DATA -- 17 PROFILE_DIGI_XBEE -- 49413 ADDR_COORDINATOR -- b'\x00\x00\x00\x00\x00\x00\x00\x00' PIN_WAKE -- 1 RTC_WAKE -- 2 >>> --------------------------------------------------------------------------------以下は、xbee.atcmd()を使用してさまざまなATコマンドを照会および設定するコード例です。
--------------------------------------------------------------------------------
import xbee
# NI文字列(ノード識別子)を設定します
xbee.atcmd("NI", "XBee3 module")
# ATコマンドをいくつか読み、値とデータ型を表示します
print("\nAT command parameter values:")
commands =["SH", "SL", "NI", "CK"]
for cmd in commands:
val = xbee.atcmd(cmd)
print("{}: {:20} of type {}".format(cmd, repr(val), type(val)))
--------------------------------------------------------------------------------
実行結果
--------------------------------------------------------------------------------
>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
1=== import xbee
2===
3=== # NI???(??????)??????
4=== xbee.atcmd("NI", "XBee3 module")
5===
6=== # AT????????????????????????
7=== print("\nAT command parameter values:")
8=== commands =["SH", "SL", "NI", "CK"]
9===
10=== for cmd in commands:
11=== val = xbee.atcmd(cmd)
12=== print("{}: {:20} of type {}".format(cmd, repr(val), type(val)))
AT command parameter values:
SH: b'\x00\x13\xa2\x00' of type <class 'bytes'>
SL: b'A\x93\xf3^' of type <class 'bytes'>
NI: 'XBee3 module' of type <class 'str'>
CK: 255 of type <class 'int'>
--------------------------------------------------------------------------------
(注)長さが16ビットを超える値を格納するパラメーターは、バイトとして表されます。
--------------------------------------------------------------------------------
>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
1=== sl_value = xbee.atcmd("SL")
2=== print(hex(int.from_bytes(sl_value, 'big')))
0x4193f35e
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
import xbee, time
# ネットワーク探索オプションを設定する、自分も含める
xbee.atcmd("NO", 2)
xbee.atcmd("AC") # 変更を適用する
time.sleep(.5) # 0.5秒待つ
# ネットワーク探索を実行して結果を出力する
print ("Network Discovery in process...")
nodes = list(xbee.discover())
if nodes:
for node in nodes:
print("\nRadio discovered:")
for key, value in node.items():
print("\t{:< 12} : {}".format(key, value))
# NOをデフォルト値に戻す
xbee.atcmd("NO", 0)
xbee.atcmd("AC") # 変更を適用する
--------------------------------------------------------------------------------
実行結果
2個のデバイスリストが表示されています。
検索には少し時間が掛かります。
--------------------------------------------------------------------------------
>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
1=== import xbee, time
2===
3=== # ?????????????????????????
4=== xbee.atcmd("NO", 2)
5=== xbee.atcmd("AC") # ???????
6=== time.sleep(.5) # 0.5???
7===
8=== # ????????????????????
9=== print ("Network Discovery in process...")
10=== nodes = list(xbee.discover())
11=== if nodes:
12=== for node in nodes:
13=== print("\nRadio discovered:")
14=== for key, value in node.items():
15=== print("\t{:< 12} : {}".format(key, value))
16===
17=== # NO??????????
18=== xbee.atcmd("NO", 0)
19=== xbee.atcmd("AC") # ???????
Network Discovery in process...
Radio discovered:
rssi : -50
node_id :
device_type : 1179648
parent_nwk : 65534
sender_nwk : 3244
sender_eui64 : b'\x00\x13\xa2\x00A\x93\xf3^'
node_type : 1
Radio discovered:
rssi : -61
node_id : S2C Coordinator
device_type : 655360
parent_nwk : 65534
sender_nwk : 0
sender_eui64 : b'\x00\x13\xa2\x00AQ\x04k'
node_type : 0
--------------------------------------------------------------------------------
※ XBee3をコーディネーターとして上のコードを実行させた、S2/S2Cルーターが表示されない。
--------------------------------------------------------------------------------
import xbee, time
# 無線機の識別文字列を設定します
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に問い合わせる
print("Connecting to network, please wait...")
while xbee.atcmd("AI") != 0:
time.sleep(0.1) # 0.1秒待つ
print("Connected to Network")
# 接続したら、PAN ID、拡張PAN ID、チャンネル番号を表示する
operating_network = ["OI", "OP", "CH"]
print("Operating network parameters:")
for cmd in operating_network:
print("{}: {}".format(cmd, xbee.atcmd(cmd)))
--------------------------------------------------------------------------------
実行結果
"OP"の表示は崩れていますね、MicroPythonのhex()メソッドを使用して、整数を16進数で表示できます。
--------------------------------------------------------------------------------
>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
1=== import xbee, time
2===
3=== # ???????????????
4=== xbee.atcmd("NI", "Router")
5===
6=== # ???????????????(????)???????
7=== network_settings = {"CE": 0, "ID": 0x777, "EE": 0}
8===
9=== for command, value in network_settings.items():
10=== xbee.atcmd(command, value)
11=== xbee.atcmd("AC") # ???????
12=== time.sleep(1) # 1???
13===
14=== # ?????????????????AI???????
15=== print("Connecting to network, please wait...")
16=== while xbee.atcmd("AI") != 0:
17=== time.sleep(0.1) # 0.1???
18=== print("Connected to Network")
19===
20=== # ??????PAN ID???PAN ID?????????????
21=== operating_network = ["OI", "OP", "CH"]
22=== print("Operating network parameters:")
23=== for cmd in operating_network:
24=== print("{}: {}".format(cmd, xbee.atcmd(cmd)))
25===
Connecting to network, please wait...
Connected to Network
Operating network parameters:
OI: 26578
OP: b'\x00\x00\x00\x00\x00\x00\x07w'
CH: 22
--------------------------------------------------------------------------------
以下の例は、”コーディネーター”側のコードです。
--------------------------------------------------------------------------------
import xbee, time
# 無線機の識別文字列を設定します
xbee.atcmd("NI", "Coordinator")
# いくつかの基本的なネットワーク設定を行います(NJ=FFは常に参加ウインドウを開いて置く)
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")
# 接続したら、PAN ID、拡張PAN ID、チャンネル番号を表示する
operating_network = ["OI", "OP", "CH"]
print("Operating network parameters:")
for cmd in operating_network:
print("{}: {}".format(cmd, xbee.atcmd(cmd)))
--------------------------------------------------------------------------------
実行結果
"OP"の表示は崩れていますね、MicroPythonのhex()メソッドを使用して、整数を16進数で表示できます。
このコード実行でルーターが参加できる状態となります。
--------------------------------------------------------------------------------
>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
1=== import xbee, time
2===
3=== # ???????????????
4=== xbee.atcmd("NI", "Coordinator")
5===
6=== # ??????????????????????(NJ=FF????????????????)
7=== network_settings = {"CE": 1, "ID": 0x777, "EE": 0, "NJ": 0xFF}
8===
9=== for command, value in network_settings.items():
10=== xbee.atcmd(command, value)
11=== xbee.atcmd("AC") # ???????
12=== time.sleep(1) # 1???
13===
14=== # ?????????????????
15=== while xbee.atcmd("AI") != 0:
16=== time.sleep(0.1) # 0.1???
17=== print("Network Established")
18===
19=== # ??????PAN ID???PAN ID?????????????
20=== operating_network = ["OI", "OP", "CH"]
21=== print("Operating network parameters:")
22=== for cmd in operating_network:
23=== print("{}: {}".format(cmd, xbee.atcmd(cmd)))
24===
Network Established
Operating network parameters:
OI: 13752
OP: b'\x00\x00\x00\x00\x00\x00\x07w'
CH: 19
--------------------------------------------------------------------------------
-------------------------------------------------------------------------------- >>> >>> import xbee >>> xbee.transmit(xbee.ADDR_COORDINATOR,"Hello Coordinator!") >>> --------------------------------------------------------------------------------親機(S2Cコーディネータ)側XCTUの[コンソール画面]を見てみましょう、

上記の方で記述した"ルーター側コード"と合体したコード作成もできますね。
--------------------------------------------------------------------------------
from machine import Pin
import time
dio4 = Pin("D4", Pin.OUT, value=0)
while True:
time.sleep(1)
dio4.toggle() # Flash the LED on DIO4 (D4)
--------------------------------------------------------------------------------
4. MicroPython >>>プロンプトで、[Ctrl + F] を押します。
--------------------------------------------------------------------------------
>>>
flash compile mode; Ctrl-C to cancel, Ctrl-D to finish
1^^^ from machine import Pin
2^^^ import time
3^^^ dio4 = Pin("D4", Pin.OUT, value=0)
4^^^ while True:
5^^^ time.sleep(1)
6^^^ dio4.toggle() # Flash the LED on DIO4 (D4)
--------------------------------------------------------------------------------
7. [Ctrl + D]を押して終了します。-------------------------------------------------------------------------------- Erasing /flash/main.mpy... Compiling 149 bytes of code... Saved compiled code to /flash/main.mpy (127 bytes). Automatically run this code at startup [y/N]? -------------------------------------------------------------------------------- /flash/main.mpyを消去しています... 149バイトのコードをコンパイルしています... コンパイル済みコードを/flash/main.mpy(127バイト)に保存しました。 起動時にこのコードを自動的に実行しますか[y/N]? --------------------------------------------------------------------------------

この様にファイルシステムマネージャーを見てみると、"main.mpy"が登録保存されていますね。
注意は、"main.mpy"はコンパイルされたファイルと言う事です。
-------------------------------------------------------------------------------- Automatically run this code at startup [y/N]? Y Stored code will run at startup. (保存されたコードは起動時に実行されます。) Press CTRL-R in the REPL to run the code at any time. (REPLでCTRL-Rを押すと、いつでもコードを実行できます。) MicroPython v1.11-1227-g52e306b on 2019-07-10; XBee3 Zigbee with EFR32MG Type "help()" for more information. >>> --------------------------------------------------------------------------------

PSフィールド(MicroPython Auto Stat)が"Enabled[1]"になります。
勿論、起動時にこのコードを実行しなければ"Disabled[0]"にすればOKですね。
-------------------------------------------------------------------------------- >>> Loading /flash/main.mpy... Running bytecode... --------------------------------------------------------------------------------11. アップロードしたコードに問題がなければ、XBeeセルラーモデムの電源を切ります。
追記(*2) 2019/08/15
追記(*1) 2019/08/06
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2019 Shigehiro Kimura All Rights Reserved.