IoTモノ語り
BLEはひかえめだけど…
BLEは40チャネル
BLE含めBluetooth通信は、ISMバンドの一つ2.4GHz帯の電波を使用しています。2.4GHz帯は人気者で Wi-Fiブランドで知られる無線LAN もこの周波数帯を利用しています。
‘帯’という文字が使われていることから、ピンポイントの周波数を使用している訳でなく、0.1GHz程度の帯域があり、いくつかに分割して利用します。分割された一つの帯域をチャネル(以下chと表記する場合あり)と称します。
クラシックBluetoothの場合は、1chあたり1MHz幅で79chに分割されて利用します。そして、BLEの場合は、1chあたり2MHz幅で40chになります。
図1は、BLEのチャネルマップを示します。
図1 BLE40チャンネル
実際の通信は、利用するチャネルの周波数に送信側と受信側とで合わせることで行うのですが、情報伝達時、他の通信(例えばWi-Fi)が利用している周波数と被ると(干渉といいます)、正しく情報が伝達されない(通信障害が発生する)恐れがあります。
無線LANに対して後発であるBluetoothは、無線LANとの干渉を避けるためにいくつかの機構を備えています。
ひとつは、FHSS(Frequency Hopping Spread Spectrum/周波数ホッピング)といって、利用するチャネルを、一定のルールに従い、短い周期で利用するチャネルを切替えつつ通信を行うことで、干渉による通信障害を極力防ごうとする機能です。また、切替ルールを知らない場合は、順序だてて復元することが難しいので、秘匿性を高めることにも役立っています。
もうひとつは、AFH(Adaptive Frequency Hopping)といって、無線LANが使用する帯域と被らないチャネルを自動的に見つけ出す機能です。これにより、周波数ホッピングの
対象となるチャネルを絞り込み、干渉が発生する確率をさらに抑えようというものです。
いずれの機構も、BLEにも備わっています。
このように、無線LANが利用しない隙間なチャネルを、しかも慌ただしく切り替えながら利用することで、障害に強い通信状態を作り出しているのです。涙ぐましい限りです。
アドバタイジングチャネル
2.4GHz帯を40分割されたチャネルですが、ID番号が、周波数値順に定義されているかと思いきや、図2を見ると ch37、ch38, ch39は、並びから外れています。
図2 アドバタイジングチャンネル
3つのチャネルは、アドバタイジングチャネルといい、ブロードキャスター型トポロジーにおける通信 および コネクション型トポロジーにおける デバイス発見・ネットワーク参加制御の用途に使われます。
他の37ch(0ch- 36ch)は、データチャネルと称します。
さて、なぜ不均衡な位置に、アドバタイジングチャネルを配置したのでしょうか。
同じ2.4GHz帯に13チャネルもつ無線LAN (801.11gの場合)を相互干渉することなく利用した場合、1ch/6ch/11ch を割り当てることになり、その際のチャネルマップを重ね合わせてみると(図3)
図3 WiFiチャネルを重ねると
またまた、涙ですね。
IoT研究会リポート
今回も、IoT研究会リポートをお届けまします。
第3回目のリポーターは蛸井さんです。
今回は”UART講座”と”9軸センサ I2C通信実習”2本立てのワークショップが開催された。
<UART講座>
今回のIoT講座は、栗澤さんによる「UART講座」。
1)UARTの概要
・UARTとは シリアル信号ーパラレル信号の相互変換を行う回路。
・通信方式としては、調歩同期方式(非同期)の利用が多い。
・RS232C等のシリアル通信インタフェースを使用した機器間の通信に使用。
・研究会では主に USB+ターミナル(例:Teraterm)を使用して、機器情報の読取り結果を出力させたりする目的に使用。
2)UARTの演習
・最近のPCには、RS232C等のシリアル端子が付いていないが、USBシリアル変換器を使うことで、USB経由でUART通信が簡単にできる。
・PSoCでは、たった4つのステップでUARTを使った実装が実現できる。
①「UART」コンポーネントを配置(必要に応じてConfigure設定)
※コンポーネントはリソースの許す限り配置可能!
②PIN番号はPSoCのマニュアルを参照し、PIN番号を設定。
③ライブラリAPIをコールすることで、 UART送受も簡単に実現。
今回はUARTで1文字取得→連続する3文字をUART出力するコード。
コーディングも、main()スタブが用意されており、例えば関数も”UART”と入力すれば
候補となる関数が表示され選択できるので便利。
④必要な入出力端子を接続。
[ 実行結果 ]
・①~③までの実装をビルド。
・ターミナル(Teraterm)を起動して、キーボードより1文字入力。
→入力した1byte文字を含む3byte分の文字が UART から送られ
・ターミナル出力される。(下図1回目に‘a’、2回目に‘g’ を入力した例)
<9軸センサ I2C通信実習>
今回は、前回はんだ付けを行った「9軸センサ」の登場。
実習での大まかな構成は以下
図. 9軸センサ I2C通信演習
・基本的な実装方法は、前記「UARTの演習」の流れを基準にコンポーネント「I2C」を追加。
[ 今回の目的 ]
I2C通信により、 “WHO AM I” レジスタ値を読み取る。( 読取り値が0x71なら正常 )
[ 接続構成 ]
[ ポイント ]
・“WHO AM I” 内部レジスタを読むには以下の手順が必要。
①I2Cアドレス(0x68)に、レジスタアドレス(0x75)を1byte送信
( 読取りレジスタの指定 )
②完了ステータス待ち
③I2Cアドレス(0x68)から、1byte受信
( ①で指定したレジスタからの読取り )
④完了ステータス待ち
※2つのアドレス(I2Cアドレス、レジスタアドレス)を使用する点は当初戸惑った。
最後に
今回のIoT研究会のレポートは蛸井が担当しました。
電気メーカーにて制御系(伝送)のソフトウエア開発からスタートし、民間企業向けのアプリケーションや、防衛関連のシステム開発に携わって来ました。
現在は証券系システムのソフトウエア開発に従事し、主にWeb系のアプリケーションの機能拡張と保守を行っています。
目に見えるハードウエアを自分のプログラムで思い通りに動かしてみたい!
そんな思いでIoT研究会に参加させて頂いています。
今回の研究会では Chip仕様に関する情報を引き出すための「ドキュメントの見方」と、初めての「配線」に関して、少し苦戦しました。
しかし数年ぶりに見るターミナル画面に結果が表示された時の懐かしさと初めてのブレッドボード配線では新鮮な気持ちを感じました。
これからも楽しみながら IoT開発のエッセンスを吸収し、浮かんだアイデアを実際に形に出来る様になりたいと思っています。
(i)厳密には、801.11b規格(11Mbps)と801.11g規格(54Mbps)が2.4GHz帯を使用しています。5GHz帯、900MHzを使用する無線LAN規格もあます。
(ii)801.11bの場合、1chあたりの帯域は22MHzで、チャネル数は14。801.11gの場合、1chあたりのおの帯域は20MHzで、チャネル数は13。どちらの規格も、単純にチャネルを並べると0.1GHz幅を超えるので、領域が重なるチャネルが存在します。
(iii)801.11bでも、22MHz間隔でチャネル配置されることが推奨されているので、相互干渉しない最適チャネルは1ch/6ch/11chとなります。
飯田 幸孝
ソフトウエアエンジニア。名古屋出身。
計測機器開発メーカ、JAVA VMプロバイダの2社を経て2007年独立。
組込機器用F/W開発に多く従事。2015年より新人技術者育成にも講師として関わる。
モノづくりが好きと宇宙から地球を眺めてみたいという思いが高じて、2009年より宇宙エレベータ開発に手弁当にて加わる。その実現に今後の人生を掛ける。
宇宙エレベータ開発のご縁で静岡大学の衛星プロジェクトStars-Cに参画。2016年秋、担当ユニットが、自身の分身として、一足先に宇宙に行き地球を眺める。