IoTモノ語り
BLEはトポロジーも2段構え
トポロジー
クラシックBluetoothとBLEには、いくつかの違いありますが、今回は、接続形態(トポロジー)に触れてみます。
クラシックBluetoothの場合、1台のマスタに対して最大7台のスレーブが接続可能な ピコネット(piconet)と称するPAN(Personal Area Network)を形成します。パソコンを事例とする場合、(Classic)Bluetoothを搭載したPCがマスタ(Master)になり、キーボート、マウス、ヘッドセット等がスレーブ(Slave)になります。接続時ペアリングを行い、1対1のコネクションを形成します。複数のスレーブと通信を行う場合は、1対1のコネクションを複数形成することになります。
図1-cにある様に、一つのピコネットのマスタが、他のピコネットのスレーブになることが可能です。また、マルチリンク(複数接続)可能なスレーブであれば、複数のピコネットに属することも可能です。残念ながら、マウス・キーボートは対応していないモノが多いですが。。。
対してBLEは、ブロードキャスター型とコネクション型の二つのトポロジーをサポートしています。
またもや二段構成です。
ブロードキャスター型トポロジーは、ラジオ放送やテレビ放送と同じで、配信元の電波エリア内にいれば、だれでも受信できてしまう形態です。もちろん、受信器側はBluetooth Smart Ready もしくは Bluetooth Smart対応なデバイスである必要はあります。
身近な例をあげれば、クーポン配信サービス等で利用されるビーコンがこの方式にあたります。
発信元を、ブロードキャスター(Broadcaster)、受信側をオブザーバー(Observer)と称します
ビーコンサービスの場合、ビーコンがBroadcasterとなり、スマートフォンなどの情報端末がObserverとなります。
ラジオ・テレビ放送と同じく、一つのObserverで複数のブロードキャスターからの情報を受信することが可能です。
もう一つの接続形態であるコネクション型は、クラシックBluetoothとピコネットと同様に1対1の通信経路(コネクション)を確立します。もちろん、1対多の通信も可能で、この場合、複数のコネクションを形成することになります。
ピコネットのマスタの相当する役割(ロール)を行うデバイスをセントラル(Centarl)と称し、スレーブに相当するデバイスをペリフェラル(Peripheral)と称します。接続形態によって役割が異なることから名称も別途定義しているところも特色です。
Buletooth4.1以降に準拠のBLEデバイスでは、一つのペリフェラルが複数のセントラルとコネクションを確立することも可能です。また、図にはありませんが、セントラルデバイスがセントラルロールとペリフェラルロールを同時に演じることも可能です。
トポロジーとしては、ピコネットと似たものになりますが、ピコネットにあったスレーブ7台という制約はありません。セントラル側のリソースによる制約により上限は出てくると思いますが、仕様上の制限はありません。
IoT研究会リポート
つづいては、前回より始まった IoT研究会リポートコーナです。
第2回目のリポーターは奥長さんです。
今回はISRによるLチカ、I2C講座、ハンダ付ワークショップを開催した。
<ISRによるLチカ>
前回の「S/WによるLチカ」ではmainのforループをスリープさせる形でLEDを点滅させた。しかしこの方法ではmainのforループに記述している他の処理もスリープしてしまい望ましくない。そのため通常はこのようなケースでは割込処理を使用する。
今回のISR(Interrupt Service Routine)によるLチカでは、ソフトで割込処理を記述する。
PSoCのロジックは、GPIO版と変わりない。
ARMのCPUには「SysTick」というCPUに内蔵されたタイマーのようなモノを持っており、このISRによるLチカではこのSysTickを利用している。
なお割込ハンドラ内の処理の実行中はメインのforループは停止状態となる。このため、割込ハンドラの処理が長くなるとメインの処理が遅延してしまうため、割込ハンドラ内の処理はフラグを立てるだけにするなど簡潔に処理させることが望ましい。
<I2C講座>
IoT研究会では、各メンバーが持ち回りであるテーマについて事前学習をして講義を行う形で進めている。今回の講義は野村氏によるI2C講座である。
スモールIoTデバイスやマイコンでは、メインチップボードにセンサなどの部品をブロックのように組み合わせて作り上げていく。この組み合わせた部品間の通信方式にはI2CやSPIなどがある。
この部品間ではマスタ/スレーブの役割分担が行われ、通常はメインチップボードが「マスタ」となり、センサなどの周辺部品を「スレーブ」として制御する形となる。
今回の対象であるI2Cは2本線のシンプルな構造であり、4本線のSPIに対して製造コストを抑えられるメリットがある。通信手順も次のようにそれほど複雑ではない。
1)通信の開始
マスタはまず、全スレーブに対して通信の開始を告げる「スタート・コンディション」を発行。
2)相手先スレーブと送受信区分の指定
マスタは続けて、全スレーブに対して通信したい相手先スレーブのアドレスと送受信区分をセットしたコントロール・バイトを送信。
3)相手先スレーブからのACK返信
コントロール・バイトを受信した各スレーブはその中の相手先アドレスを見て、自分宛か否かを確認。自分宛でなかった場合、そのスレーブはアイドル状態に戻る。宛先が自分だった場合、そのスレーブはマスタに対してACK信号を返信。
これ以降はマスタと相手先スレーブとの2者間のみでの通信となる。
4)データ送受信
クロック信号に合わせて、送信側は8bit分のデータを送り、受信側は受信確認のため1bitのACK信号を返す。全データの送受信が終わるまで、この処理を繰返す。
5)通信の終了
マスタはストップ・コンディションを発行。相手先スレーブは待機状態へと戻る。
(Writeの手順:野村氏講義資料より)
(Readの手順:野村氏講義資料より)
<最後に>
今回のIoT研究会のレポートは奥長が担当しました。
私はソフトウェア系のシステムエンジニアとして開発を行っています。
クライアントは小規模企業の方や研究機関の方が多いのですが、ここ最近、IoTと絡めたらもっとみんながワクワクするシステムを作れるのではないかと感じる機会が増えていました。このIoT研究会で自分のハード面(デバイス面)でのノウハウを強化して、スモールIoTデバイスとソフトウェアを一体としたシステム提案~開発が出来るようになることを目指しています。
今回はみんなで9軸センサなどのハンダ付けも行いました。久しぶりにハンダの臭い(松ヤニの臭い?)をかいで懐かしかったです。
これからはハンダごてもどんどん活躍するようになるといいですね。
飯田 幸孝
ソフトウエアエンジニア。名古屋出身。
計測機器開発メーカ、JAVA VMプロバイダの2社を経て2007年独立。
組込機器用F/W開発に多く従事。2015年より新人技術者育成にも講師として関わる。
モノづくりが好きと宇宙から地球を眺めてみたいという思いが高じて、2009年より宇宙エレベータ開発に手弁当にて加わる。その実現に今後の人生を掛ける。
宇宙エレベータ開発のご縁で静岡大学の衛星プロジェクトStars-Cに参画。2016年秋、担当ユニットが、自身の分身として、一足先に宇宙に行き地球を眺める。