SmartMeshには、ある特定のイベントが発生した場合だけネットワークに参加するという機能があります。それが、「Blinkモード」です。今回は、通常のMoteとBlinkモードに設定されたMoteの違いを試してみます。
SmartMeshのステートマシン
Blinkモードの説明の前に、SmartMeshのステートマシンを簡単に説明します。SmartMeshのMoteは、内部的にMasterモードとSlaveモードの2つのモードがあります。今回は、Masterモードで動かしています。
SmartMeshの各ステート
SmartMeshは、Masterモードに設定されていると、ネットワークへの接続は自動で行うようにできています。使用する際には、あまり意識する必要はないかもしれないのですが、SmartMeshのMoteがどのような状態であるかを知ることは、実際にノードを設置した時に役に立ちます。ここでは、ネットワークへの接続・切断時におけるMoteの状態について簡単に説明します。
電源投入時
Moteの電源投入時は、「IDLE」という状態にあります。その後、「Search」になり、接続するネットワークを探します。ネットワークを見つけると、下記の3つの状態を遷移しネットワークへ参加します。
- 「Joining」ネットワークへ参加要求。
- 「Connect」ネットワークへ接続する。
- 「Active」ネットワークへ参加する。
ネットワークへ参加すると、「Operational」になり、データ通信を始めることができます(図1)。
電源が切断およびネットワークがリセットされた時
電源が切断された場合や、ネットワークから切り離された場合は、「Lost」になり、「IDLE」に戻ります(図2)。
- 「Lost」「Operational」から「IDLE」へ移行します。
Moteのステート確認方法
Moteのステートを確認する方法は、シリアル接続されたCLI(Command Line Interface)を使用します。図3はネットワークに接続する前の状態です。この時点では、まだネットワークへの接続をしている段階です。Moteの状態を見るには、minfo
コマンドで確認することができます。
ネットワークに参加すると、Moteは「Operational」になります。minfoコマンドでは、「Oper」となっています(図4)。
「Operational」は、インフラストラクチャーモードとも呼ばれており、Meshネットワークでは常にオンラインのMoteとして動作します。
アプリケーション上のヒント
実際のIoTノードとして運用するには、比較的頻度の高いネットワーク監視が必要なノードとして利用するのに向いています。
Blinkモードとは?
では、Blinkモードについて説明します。Blinkモードは、インフラストラクチャーモードとは違い、ネットワークには参加しているが、必要な場合のみ参加するMoteです。
Blinkモードの特徴
Blinkモードの特徴は4つあります。
- 低消費電力での運用
- 極めて低いレイテンシー
- 最大500,000ノードを設置可能
- MoteからManagerにのみの片方向通信
そのため、IoTのセンサーアプリケーションでは、突発的な変化を通知するアラーム的な装置や、通信頻度の低い運用に向いています。データ送信量は、通常のMoteと同じです。
Blinkモードのステート
SmartMeshのネットワークにおいて、Blinkモードに設定されたMoteの状態をみてみましょう。電源ON時の初期動作は、Masterモードに設定されています。
「Blink」モードでは、「IDLE」や「Operational」のような状態が変化することはありません。常に「Blink」状態です(図5)。
Blinkモードでは、JoiningやConnectなどの接続プロセスが不要なので、極めて低いレイテンシーを実現できるようになっています。
Blinkモードを活用する
今回もVManagerの環境で、BlinkモードのMoteがどのようなデータを送信しているのかを、ログ出力で確認してみます。
Blinkモードの状態を確かめてみる
前回同様、VManagerへはSSH
でログインして、console
から確認します。
参加しているMoteを確認するために、sm
コマンドを入れてみます(図6)。
このログからは、AP Mote(Manager)は1台で、Motesも1台となっています。ですが、有効なMotesがあることを示すLive
が2となっていることが確認できます。そのうちの1台がBlink
に設定されているということが読み取ることができます。
ちなみにもう1台Moteを追加してみた場合のログです(図7)。
Blinkモードのデータ
Blinkモードのデータを確認するには、コンソールのコマンドにtrace data on
と入力します。
赤い枠で囲ったところが、Blinkモードからのデータです。緑色の枠で囲ったところにlatency
が記載されています。ここでは、latency: 0ms
になっていることがわかります。通常のMoteに比べると極めて早い接続でデータを送出していることが読み取れます。
低レイテンシーのしくみ
低いレイテンシーは、Blinkモードは「コネクションプロセスがない」ということが大きな特徴です。その代わりに、ManagerからBlinkモードになっているMoteへのデータはできないプロトコルになっています。
BlinkモードのMoteをビルドする
ここまでは、BlinkモードにしたMoteの動きについて解説してきました。ここからは、Blinkモードにするためのビルド方法について解説します。
ocsdkをダウンロードしよう
MoteをBlinkモードにするためには、ファームウェア(実際には、アプリケーション部分)を書き換える必要があります。まずは、2つのファイルをダウンロードします。
1)ocsdkをダウンロード(@GitHub)
2)SmartMeshのバイナリ SmartMesh_IP.zip
ocsdkを展開すると、図9のような構成になっています。
開発環境は、EWARM
開発環境は、IAR Systems社の「Embedded Workbench for 」を使用します。ocsdkのコードサイズが大きいので、実験するのであれば30日限定バージョンがオススメです。
IAR Systems Embedded Workbench for
SmartMeshのライブラリをコピーする
SmartMesh IP
のファイルには、ocsdkで必要となるinc
とlib
が含まれています。このファイルをocsdkのsrcフォルダにコピーする必要があります(図10)。
SmartMeshのblinkサンプルコードを読み込む
ocsdkのファイルには、30種類を超えるサンプルが用意されています。その中で、all_projects.eww
というファイルを選択します。プロジェクトサンプルを選択します。
IAR Embedded Workbench for 上に、SmartMeshの全プロジェクトサンプルが読み込まれたところ。
一覧
のタブから01-blink
のタブをクリックすると、Blinkプロジェクトファイルにフォーカスされます。
ファイルをちょっと改造してみる
図13にBlinkプロジェクトのファイル中にあるpayload
部分は、少し手を入れた箇所になります(図14)。元々は、1からインクリメントした値がpayloadに入っているんですが、データを書き換えています。
また、dnm_loc_blinkPayload
関数にpayload[]が書き込まれています。あくまでも、データ部分を書き換えているだけなので、大きな変更はしていませんが、VManagerのログ画面にもそれは表示されている様子がわかります。見つけられますか?
ビルドしたデータをバイナリ変換
IAR Embedded Workbench for でビルドが成功すると、01-blink¥Debug¥Exe
ディレクトリに、ocfdk_01_blink.out
ファイルが出来上がります。
ビルドした後は、バイナリ変換する必要があります。
ツール内に、バイナリ変換するメニューはありますが、そのままではSmartMeshで使うことができません。バイナリのヘッダ部分のCRCチェックアルゴリズムが異なるためです。そこで、ocsdkには、バイナリ変換を行うためのPython scriptdustElfToBon.py
が用意されています。
dustElfToBin.pyを使う
dustElfToBin.py
を使うには、事前にPython2.7.x系のインストールが必要です。プロジェクトファイルには、ビルドが終わった後に、dustElfToBin.py
を実行するように組み込まれています。
Pythonのインストール関係は、こちらを参考にしてください。
dustElfToBin
を実行すると、SmartMesh用のバイナリファイルができます(図17)。
変換されたバイナリファイルocfdk_01_blink.bin
ができました。
Pythonスクリプトがうまく動かせない場合
Pythonスクリプトがうまく動かせないケースもあるかもしれません。そんな時は、使用環境のパスや環境変数を見直してみてください。
Moteにファームウェアを書き込む
ファームウェアの書き換え方法は、前回AP Moteに変更した時と同じ手順で実行することができます。espフォルダに集めておくと簡単です。
書き込むファイル
Moteに書き込むファイルは、以下の4つです。
FuseTables
MoteのFuseTableは、WO_D603679_
内のFT-LTP5902-IPMA-M4-115K-680-0241-003REV1.bin
を使用します。Eterna
フォルダ内のFuseTables
からコピーしてきてください。
Mote
Moteのパーティション情報は、rev_1_4_1
内のmote_part_r52074.bin
を使用します。Eterna
フォルダ内のMote
からコピーしてきてください。
loader
Moteのローダ情報は、loader_1_0_6_4_oski.bin
を使用します。同じくEterna
フォルダ内のMote
にあります。
Application
Applicationは、今回作成したocfdk_01_blink.bin
を使用します。今回は、Moteのアプリケーション部分を書き換えるため、このようなバッチファイルを使って、ファームウェアを更新するといいでしょう。
実際に書き換える部分は、esp -P ocfdk_01_blink.bin 1000
です。
Moteのアプリケーションを書き込むバッチファイルの記述例
echo off echo " ========== Erasing AP Mote" esp -E echo " ========== Programming Fuse Table" echo " " esp -P FT-LTP5902-IPMA-M4-115K-680-0241-0003REV1.bin 0 echo " " echo " ========== Programming Partition Table" echo " " esp -P mote_part_r52074.bin 800 echo " ========== Programming AP Mote code" echo " " esp -P ocfdk_01_blink.bin 1000 echo " ========== Programming Loader" echo " " esp -P loader_1_0_6_4_oski.bin 77800
Moteを戻したい場合
Moteに入っていたアプリケーションに戻したい場合は、Moteフォルダのmote_ip_1_4_1_8_oski.bin
をアプリケーションのセクションで使用してください。
まとめ
いかがでしたか?細かい手順などいろいろ解説しましたが、Moteの状態やアプリケーション部のビルド方法など、どれも実用的な内容で解説しました。Blinkモードは、SmartMeshとしての難しい動作は特にないですが、アラート通知のようなセンサーや、データの書き換え部分など、どのように実装していけばいいか理解できれば、様々なセンサーに応用できます。低消費電力で動かせるSmartMeshを是非お試しください。
SmartMeshの評価キットDC9021Bは、すぐにIoTセンサーネットワークが構築できます。今回紹介したSmartMeshのBLINKモードは、5Gのグラントフリーと同じコンセプト。アナログ・デバイセズのSmartMeshで、簡単IoTセンサーネットワークを構築してください!
最新情報をメーカーサイトで見る
こちらも是非
“もっと見る” 実験室
組み込みアプリを止めるな!printfやブレークポイントも使わず内部状態をチェック!
産業機器、オーディオ製品、通信デバイスをはじめとする多くの組み込みアプリケーションは、わずかなタイミングの違いで動きが変化します。そのため、開発・検証のためにprintfなどを仕掛けることが難しく、開発効率が伸び悩むケースも増えています。そこで今回の実験室では、システムを止める事なく内部状態を取得できるデータ計測ツール「EVRICA」を紹介いたします。組み込みアプリケーションの開発や検証に欠かせない、新しい開発ツールです。
IoTエッジコンピューティングをSmartMeshで実践
今回の実験は、Moteに内蔵されている非力なマイコンを使って、振動計測ソリューションのFFTデータをSmartMeshで送信したIoTエッジコンピューティングを実践してみました。
非絶縁型中間バスコンバータ750Wで、48Vと12Vを自由自在
VicorのNBMシリーズの最新デバイスであるNBM2317シリーズは、23×17×7mmという超小型パッケージで最大750W出力、48V→12Vまたは、12V→48Vの双方向において98%のピーク効率を実現した非絶縁型中間バスコンバータ。今回の実験室は、実際に動かしつつ、その性能とメリットを解説している。その様子は、是非動画で見て欲しい。