Nordic SemiconductorのThingy*デバイスをとても気に入っています。プロトタイプのプラットフォームで、たくさんのセンサが内蔵され、バッテリも搭載されています。私は、前職のハードウェアコンサルタント時代に、クライアントのユースケースを丸ごとプロトタイプ化したことがあります。Thingy91はセルラー版で、Cat-M1とNB-IOT対応のモデム付きマイクロコントローラであるnRF9160 SIPを搭載しています。天候やガスを検知するBoschのBME680、光や色を検知するRohm SemiconductorのBH1749、方位や移動/落下を検知するAnalog Devicessの加速度センサADXL362など、優れたセンサも数多く搭載しています。
Nordicを初めて使用する人の印象は素晴らしく、特にThingy91にプリロードされているAsset Tracker V2は最高で、この既製品のデバイスを使って、アセットトラッカを作ることができる非常に手の込んだデモです。参考までに、明るいオレンジ色のケースがあるので、アセットトラッカとしては非常に似つかわしくなく…すぐにスパイクラフトに使うことはないでしょう!
2回目のデモの準備はできていますか?
最初のデモから先に進むには、nRF Connect SDKのzephyrフォルダやnrfフォルダにあるサンプルをつなぎ合わせていくのが一般的です。私はそれを何度か行ってきました。Asset Tracker V2に似た別の「オールインワン」デモを作りたかったのですが、搭載されているセンサやその他の楽しい機能を活用するものがほとんどでした。このThingy91で他に何ができるでしょうか?
お気に入りの未使用の機能
回路図を見てみると、ブザーが搭載されていることに気づきました。しかし、Thingy91に搭載されている圧電振動子(別名ブザー)を活用したサンプルはありませんでした。PWMで直接駆動するごく一般的な部品なので、誰かが小さな音楽装置に仕立てたのだろう…と思ったんです。最終的にまだ誰もそのことに気づいていなかったことが判明しました。なのでこれは、誰も試みていない私に課せられた課題です!
同僚のMikeの協力により、コードに曲を入力するためのフレームワークを作成し、楽譜から曲に近い一連のビープ音に簡単に変換できるようになりました。以下のデモ動画で、その様子をご確認ください。
すべてをデータ プラットフォームに接続する
このようなセンサデータと楽しい音楽作りは素晴らしいことですが、ではそれをどのように活用することができるでしょうか?このセルラー端末のデータを現場で簡単にプッシュ&プルできるように、Golioth SDK(NordicのnRF Connect SDKと連携して動作する)を使用することにしました。以下に示すデモとコードは、Goliothが提供するさまざまなサービスと対話するために、プログラムをどのように構成したかを説明しています。こちらもブログ記事で紹介しています。
センサデータを収集する
Thingy91には素晴らしいセンサがたくさん搭載されているので、これが一番わかりやすいですね。センサはすべてZephyrのDeviceTreeにあるので、コード上で有効にするだけで、センサから得られるデータを活用することができます。デバイスのセンサ読み取りループ中にセンサからデータを抽出し、そのデータをフォーマットしてクラウドに送信することができます。
これは、時系列データベースであるGoliothのLightDB Streamサービスを使用しています。データをLightDB Streamにプッシュすると、クラウド上にフォーマットされた数値として表示され、Golioth Consoleで表示したり、可視化プラットフォームからREST APIでクエリすることができます。
端末の機能を制御する
これらの曲はすべてデバイス上にありますが、どのようにしてそれらの曲を鳴らすようにすればよいでしょうか? Remote Procedure Callsを使用すると、ユーザーはクラウドから特定のデバイスにコマンドを送信し、デバイス上で機能を実行するように指示できます。今回は、曲を再生するように指示していますが、どの曲を再生させるかを伝えることもできます。
設定を変更する
Thingy91のLEDは、デバイスを持つユーザーが内部で起こっていることを理解するための画面や標準出力がないため、デバイスと対話するための重要な手段です。そこで、LEDを使用します!これはAsset Tracker V2の大きな特徴です。しかし、LEDを特別に制御したい場合はどうすればいいのでしょうか? Golioth Settingsというサービスでは、クラウド上で任意の変数を設定し、現場のデバイスにプッシュすることができます。今回は、赤、緑、青の色の強度と、LEDがフェーディングする速度を設定します。LEDのフェーディングはスレッド内で発生しますが、Zephyrはリアルタイムオペレーティングシステムであるため、これがうまく機能します。
バイナリを試してみる
他にもいろいろとありますが、まずは体験してみてはいかがでしょうか。以下の動画で紹介されているコードを書いて公開しただけでなく、バイナリも作成しましたので、コードを一切書くことなく、これらの機能をThingy91で試すことができます。Asset Tracker V2と同様に、これによりThingy91で何ができるかを理解しながら、Goliothのようなデバイス管理プラットフォームを試すことができると考えています。下の動画でその様子をご覧ください。