
今回は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のファームウェアレイヤはバックグラウンドで動作しています。