
XBee3のMicroPython環境では使用できるモジュールが限定されています。そこで、今回は便利な機能の自作モジュールを作成して組み込む方法について解説します。
センサからのデータ取得や省電力制御など、XBee3に合った実用的な自作モジュール例として今回は以下の2つのモジュールを組み込むことにします。
モジュール名 | 機能 | 活用例 |
wait.py | プロセスをブロックしないウェイト処理 | 周波数解析やI2C制御中の簡易ディレイ処理等に利用可能 |
random.py | ランダムな整数や1.0未満の浮動小数点数を返す | センサデータの模擬、無線通信のタイミング分散及びスリープ時間の分散に利用可能 |
以下のコードをそれぞれwait.pyとrandom.pyとして保存します。
(1)wait.py(プロセスをブロックしないwait)
import utime
def wait_ms(ms):
start = utime.ticks_ms()
while utime.ticks_diff(utime.ticks_ms(), start) < ms:
pass # ブロックせずにウェイト
(2)random.py(XBee3用の擬似乱数生成モジュール)
_seed = 1 # デフォルトのシード値
def seed(s):
global _seed
_seed = s
def random():
global _seed
# 線形合同法の式: X_{n+1} = (a * X_n + c) % m
_seed = (_seed * 1103515245 + 12345) & 0x7FFFFFFF
return _seed / 2147483648.0
def randint(a, b):
return a + int(random() * (b - a + 1))
線形合同法は軽量で簡便な乱数発生方法であり、強い乱数性は期待できないため高精度な用途には不向きです。線形合同法)は決定論的(deterministic)なアルゴリズムであり、同じシード値からは常に同じ乱数列が生成されます。実用的な意味としては、シードを固定した場合は毎回同じ乱数列が得られるため、デバッグや再現性が必要なテストに便利です。一方、例えばADCノイズや時刻などを利用してシードを毎回変えることにより、ランダム性を高めると、センサデータの初期化や通信間隔のばらつき生成などに便利です。多くの線形合同法の実装では、0をシードにするとすぐ0になる等の問題があるため、シードのデフォルト値は1などの非ゼロ値が使われます。 以下に示すように、File System Manager でwait.pyとrandom.pyを/flashにドラッグ&リリースで書き込みます。

(3) wait.pyの動作確認
>>> import wait
>>> wait.wait_ms(5000) # 5000ミリ秒待機
(4) random.pyの動作確認
>>> import random
>>> random.seed(123) # シードを設定(任意)
>>> print(random.random()) # 0.0〜1.0未満の浮動小数点数
>>> print(random.randint(1, 10)) # 1〜10の整数
自作の組み込みモジュールをMicroPython Terminalで動作確認した結果を以下に示します。

XBee3のMicroPythonにおいて自作モジュールを組み込むことには、以下のような実用的かつ戦略的なメリットがあります。特にリソースが限られた組込み環境では、モジュール化は非常に重要です。
1. コードの再利用性が向上する
自作モジュールにしておけば、同じ処理(例:乱数生成、センサデータ変換、送信処理)を複数のスクリプトやプロジェクトで再利用できます。
2. プログラムの見通しが良くなる(保守性の向上)
処理を分割してモジュールにすることで、メインスクリプトが読みやすくなり、構造が明確になります。バグの特定や機能追加も容易です。
3. コードサイズを節約できる
同じコードを何度も書くより、1つの関数をモジュールにすることで、スクリプトのサイズと複雑さを減らせます。XBee3のMicroPythonはメモリが限られているため、これは大きな利点です。
4. 他のXBeeにコピーして使える(拡張性)
モジュールを 「.py」 ファイルとして一度作成しておけば、他のXBee3デバイスにも同じように転送して機能の共通化が可能です。ファームウェアとは無関係に機能を展開できます。
5. 組み込み向けに最適化した機能を作れる
内蔵モジュールが制限されているXBee3では、標準のPythonモジュール(例:`math`, `random`, `statistics`など)が使えないことが多いため、自作して代替できるのは大きな利点です。