第2回 |
解説!
はじめての無線通信とアナログ入力
|
はじめに |
前回は、BLE Nanoを使ってデータを取得し、Webブラウザに表示をさせました。今回は、無線通信に関して少し説明をしつつ、前回使用したソースコードの解説を行います。
|
無線通信デバイスの選定 |
無線通信を使用してセンサーデータをWeb上に送付するために、このコンテンツでは、BLE Nanoという製品を使用しています。
初めての方を対象に、IoTの無線センサーノードを構成するにあたり、重要な点は以下の点と考えました。
- 簡単に使えて、簡単に部品が手に入る
- 低消費電力
上記のポイントを踏まえながら、検討をしました。
簡単に使えるという点には、ネットに情報が多く、トラブルを自己解決可能かどうかも検討に入れました。また、初期投資を低く設定できれば始めやすいと考えました。
低消費電力であれば、電池で動作が可能で持ち運びや実験が可能になります。特に屋外でコンセント(電源)を確保するのは難しいため、この点にも注意しました。電池で動くことで、無線センサーノードを小型化するという点にもメリットがありました。
|
無線通信の検討 |
まず、無線通信を選定する上でいくつかの選択肢がありました。検討にあたり比較表を作って見ました。
周波数帯 | データレート | 通信距離 | 消費電力 | その他特徴 | |
---|---|---|---|---|---|
Wifi | 2.4GHz帯 | 100Mbps | 数10m | 高 | - |
BLE | 2.4GHz帯 | 1Mbps | 10m | 低 | - |
3G / LTE | 複数 | 100Mbps | 数km | 高 | 通信料が必要 |
DUST Nrtwork | 2.4GHz帯 | 30kbps | 100m | 低 | 高信頼性 |
Wi-SUN | 920MHz帯 | 300kbps | 1km | 低 | - |
LoRa | 920MHz帯 | 10kbps | 3km | 低 | - |
Sigfox | 920MHz帯 | 100bps | 10km | 低 | - |
図1. 無線通信規格の比較表
注意:通信速度や距離は、一般的な数値で、
使用環境や端末のプロファイルなどによって変わります。
無線通信には、周波数帯域と呼ばれる、あらかじめ法律で許可された周波数で通信を行う必要があります。定められた周波数帯域以外で、電波を使用することは法律で禁止されています。
WifiやBluetoothなどは、2.4GHzの周波数帯を利用した通信規格です。データの転送スピードが数Mbps以上と速いため、家庭内やオフィスなど屋内で高速にデータを通信する場所で広く普及しています。ただ、通信距離が短く限られたエリアでの使用となります。一般的には10m〜数十m程度の通信距離と言われています。
携帯電話で採用されている3GやLTEなども無線通信規格の一つです。3GやLTEにはいくつかの周波数帯域が割り当てられており、データの転送スピードも速く、通信キャリア会社が日本全国に基地局を配置しているためエリアが広く、この通信を使えばほぼ確実に通信ができます。ただ、通信料金が高く、たくさんセンサー使用する場合には通信量やその料金に注意する必要があります。
この他の通信には、920MHzという特定小電力無線という通信があります。アナログ・デバイセズ社でもWi-SUNという920MHFz帯を使用する通信規格に対応した製品を展開しています。Wi-SUNは通信スピードが100kbps程度とWifiやLTE/3Gなどに比べると低速ですが、通信距離が長いため、データ通信スピードは低速だが、長距離通信が必要な新しい需要に向けて提案がされています。家庭よりも広い工場やビルのセンサー、家庭の電力メータ(スマートメータ)などがその一例になります。Wi-SUN同士の通信では、通信料金は発信しません。
3G、LTEは簡単にWebへの接続が可能ですが、通信契約やクラウド環境の整備などのコストがかかることと、通信モジュールの消費電力が比較的大きく、「無線センサーデバイス」として使用する場合に、小型化が難しいことを懸念しました。
Wifiモジュールは、エリアは限られますが、家庭やオフィスで実験が可能だったため、色々と時間をかけて検討をしましたが、消費電力が大きい点が懸念点となりました。
Bluetooth通信ですが、最新の規格でBluetooth Low Energy(略してBLE)という、低消費電力の規格がすでに多くのIoTのセンサーデバイスなどで採用されています。市場のスマートフォンと連携するIoTデバイスと呼ばれる製品は、ほとんどがBLEを採用しています。ただ、一般的にはiOSやAndroid用のネイティブアプリ開発が主流のため、今回のコンテンツでの使用は難しいと考えていましたが、「Web Bluetooth API」という新しい開発手法を発見し、こちらを採用することで、小型で低消費電力に、そして簡単に実験できると考え採用することにしました。
上記を踏まえ、ARM®社が提供するmbed™などの無償で使用可能な開発ツールに対応したマイコンに、BLEの無線が内蔵されたデバイス、尚且つ消費電力も可能な限り低い製品を選び、最終的にBLE Nanoを使用することに決めました。
今回は、BLEを使用したコンテンツを制作していますが、こちらは用途によって選定基準が異なってきます。データ通信が1日に1度で良いという場合は、中・長距離でデータレートが低いものが最適なケースもありますし、中・長距離でそこそこのデータ通信が必要なケースもあり、どれがIoTに最適か?というのは、使用するケースに依存するので、良く検討することを推奨します。
アナログ・デバイセズ社では、920MHz帯のWi-SUN無線通信や2.4GHz帯を使用したDUSTネットワークという信頼性に優れた製品ラインナップを持っています。また、IoT向けのマイコン製品もリリースをしております。
ご興味がある方は、アナログ・デバイセズの技術サポートフォームからお問い合わせください。
|
BLEについての説明 |
コードの解説に入る前に、BLEを使用したデータのやり取りを行う仕組みに関して、簡単に触れたいと思います。BLEの通信は、簡単に以下のプロセスで動作します。
- デバイスを探す。
今回の例では、Macなどの端末のブラウザ上でデバイスを探します。 - デバイスを接続する。
ブラウザ上でデバイスが見つかり、それをクリックすると接続されます。 - UUID (Universally Unique Identifier) を確認する。
あらかじめ、HTMLとデバイス側で登録していたUUIDを確認して、UUIDが合えば接続が完了します。
このUUIDが異なる場合には、接続がエラーとなります。
- デバイスとメッセージをやり取りする。
デバイスのデータに対し、Macなどの端末で読み込んだり書き込んだりすることができます。
基本的には、以上の過程を経てデータの取得を行い、ブラウザへ表示します。
|
BLE Nanoの「アナログ入力」とコード解説 |
前回の可変抵抗を回すと、Webブラウザ上の表示が変わるコードは、mbedのサンプルコードに若干の変更を加えたものです。
元のサンプルはこちらです。
|
図2. 変更前のサンプルコード
コンテンツ用に変更したコードでは、BLE Nanoの「アナログ入力」の電圧を測定しています。
|
図3. 変更後のコード
「アナログ入力」と呼んでいるこの機能は、BLE Nanoの内蔵機能を利用して、このPin(端子)に接続した部分の電圧を計測することできます。
今回は電池の電圧をアナログ入力に抵抗を介して接続することで、BLE Nanoのアナログ入力端子への電圧が変化します。
図4. 抵抗を使用した分圧の解説
半固定抵抗のつまみを回すと、抵抗値が変化します。抵抗値が変化すると、BLE Nanoの「アナログ入力」に接続された電圧値が変化します。
図5. 抵抗値変化の際の分圧の解説
この端子の電圧を読み取り、データを変換した後、Webブラウザにデータを転送しています。
設定手順として、アナログ端子の電圧を読み取るために、アナログピンの設定と、アナログ入力のコードを追加します。ピンの設定には、端子の番号を指定します。
![]() |
図6. ピンの設定コード
図7. アナログピンの設定
アナログ入力端子の電圧は、内部の「ADコンバータ(Analog to Digital Converter)」と呼ばれるアナログの電圧信号をデジタルコードに変換する機能が使用されています。この変換されたデジタルコードは、そのまま電圧値(Vボルトなどの単位)で使用できない形式なので、一旦データ変換をしてからWebブラウザに送付します。
アナログ入力については、標準のライブラリを使用して、データを読み、その値を「BatteryLevel」に代入し、アップデートを行います。
一般的には、電圧に変換して表示を行うのですが、今回はBatteryLevelの形式に合わせて残量を表示するために0から100の値になるように計算をしています。
![]() |
図8. アナログ値の読み込みのコード
変換した値を、アップデートすることで値が更新されます。
今回、BLEの通信は、デバイス側とアプリケーション側で、ServiceとCharacteristicのUUIDをサンプルで使用していたBattery Service UUID及びBattery Level UUIDに設定し、Webブラウザ側もこれに合わせた形で設定をしています。このUUIDが違うと、通信が成立しません。
Battery Service UUID: 0000180f-0000-1000-8000-00805f9b34fb
Battery Level UUID: 0002a19-0000-1000-8000-00805f9b34fb
|
HTMLコードの解説 |
HTMLは、HTMLとCSSに加え、BLEを使用する為のJavaScriptの構成となっています。
(前回使用したコードはこちら)
Web Bluetooth APIの記述は、bluejelly.jsで処理されています。
まず、Readのボタンを押すと、Scanの処理が始まります。デバイスをWebブラウザ上で指定するとConnectが行われ接続します。
|
図9. 170619_1BatteryLevel_Read.htmlの解説その1
この時、UUIDを確認します。UUIDはbluejelly.jsのUUIDの設定で変更が可能です。今回の例では、BatteryServiceを使用しています。
図10. 170619_1BatteryLevel_Read.htmlの解説その2
その後、データを取得し表示を行います。その後readの処理を繰り返します。BatteryServiceでは、あらかじめ送信できるデータのフォーマットが決まっていますが、こちらはプログラムで変更が可能です。
![]() |
図11. 170619_1BatteryLevel_Read.htmlの解説その3
Web Bluetooth APIの解説には、今回ソフトウェアの設計に協力いただいたJellyWare様のHP上で詳細な説明がございますので、そちらを参照ください。
|
まとめ |
今回は、前回使用したコードの解説を中心に、無線デバイスの選定や規格などを説明しました。次回は、今回使用したコードを少し改造したり、別のサンプルコードを使用して、応用を行ったりしたいと思います。