XBeeモジュールの使い方(utimeとtimeモジュールの比較)


 今回はXBee3のMicroPython環境で使用可能なutimeモジュールとtimeモジュールのそれぞれの特徴や用途について以下にまとめます。

(1)utimeモジュール(micro time の略)

 utimeモジュールはMicroPython標準の軽量な時間モジュールです。このモジュールは小型組み込み環境向けに設計されており、XBee3では制限があるもののマイクロ秒精度の処理が可能です。

XBee3で動作するutimeモジュールの主な関数

関数内容
utime.sleep(seconds)秒単位のスリープ(浮動小数点対応)
utime.sleep_ms(ms)ミリ秒単位のスリープ
utime.sleep_us(us)マイクロ秒単位のスリープ
utime.ticks_ms()ミリ秒カウンタ(システム起動からの経過)
utime.ticks_us()マイクロ秒カウンタ
utime.ticks_diff(t1, t0)2つのtick値の差分計算
utime.time()UNIX時間(秒)※ただしRTC設定が必要な場合あり

 ここで、RTCとはリアルタイムクロック(Real-Time Clock)の略で、コンピュータや電子機器で現在時刻を保持するための時計機能を持つハードウェアコンポーネントまたは機能のことを意味します。

(用途)

・精密なタイミング制御が可能(センサの読み取り間隔など)

・イベントの経過時間計測が可能(例えばticks_msで差分を取る)

・リープの待機時間制御可能(短いwait処理など)

(2)timeモジュール(XBee独自の拡張モジュール)

 timeモジュールはDigi社が提供するXBee用MicroPython拡張モジュールです。このモジュールの一部の関数はutimeと似ていますが、RTC(リアルタイムクロック)ベースで時間取得が可能な点が異なります。

XBee3で有効なtimeモジュールの主な関数

関数内容
time.time()現在のUNIX時刻(エポック秒)
time.localtime([secs])現在のローカル時刻(タプル形式)
time.mktime(t)ローカル時間をUNIX時間に変換
time.sleep(seconds)秒単位のスリープ(utimeと同じように動作)

(用途)

・現在時刻の取得や表示が可能

・ログのタイムスタンプ出力が可能(例:YYYY/MM/DD HH:MM:SS 形式)

・人が読むログ記録用の時刻整形が可能

【utimeの使用が推奨される場合】

・センサ測定の時間間隔制御:高精度なticks系関数が使えるため。

・短時間のスリープ(待機):sleep_ms()などで制御可能なため。

・軽量・高速処理 :不要な処理がないので負荷が小さいため。

【timeの使用が推奨される場合】

・ログに日時を記録する:localtime()で見やすい形式に可能であるため。

・タイムスタンプ付きデータ送信:time.time()でUNIX秒が使えるため。

 utime.sleep()とtime.sleep()はMicroPythonスレッドをブロックしますが、XBeeのRF通信機能(Zigbeeスタック)は停止しません。従って、スリープ中でもリモートATコマンドの受信と応答は可能です。但し、MicroPython側ではその応答結果を確認することはできません。スリープ中に何かを検知するロジックを書くことはできないためです。sleep() はCPUを止めますが、XBeeのファームウェアレイヤはバックグラウンドで動作しています。