XBeeモジュールの使い方(自作モジュールの組み込み方法)


 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`など)が使えないことが多いため、自作して代替できるのは大きな利点です。