SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

.NET nanoFrameworkとESP32でIoTプログラミング

Bluetoothで気温などの環境データをモニタリング! .NET nanoFrameworkとESP32でIoTプログラミング

.NET nanoFrameworkとESP32でIoTプログラミング 第6回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Bluetooth Low Energy通信(1)

 今回は、センサーの値を送信する手段としてBluetoothを利用します。Bluetoothといっても、実は従来のBluetooth(クラシックBluetoothとも呼ばれます)と、省電力にウェートを置いて設計されたBluetooth Low Energy(以下、BLEと表記)の2つの方式があります。BLEは、Bluetooth 4.0で追加された規格で、従来のクラシックBluetoothとは変更点が多く、互換性はありません。今回の記事では、BLEの標準仕様を基に解説しています。

 BLEは、消費電力が低い特徴があるため、IoTデバイスでの通信に広く利用されています。

BLEでの通信モデル

 BLEの通信は、以下の2つの主要なデバイスによって構成されています。

  • ペリフェラル(Peripheral):データを送信するデバイス
  • セントラル(Central):データを受信するデバイス

 ペリフェラル、セントラルという呼び方は聞き慣れないかもしれません。ペリフェラルは、センサーなどのデータを送信する側のデバイスで、セントラルとはスマートフォンやPCといった、ペリフェラルからのデータを受ける側のデバイスのことです。

通信手順

 BLE通信の特徴は、ペリフェラルから発信されている信号をセントラルが見つけて、目的のペリフェラルであれば通信を開始するという手順にあります。

 基本的な通信手順は、次のようになります。

1.アドバタイズ

 ペリフェラルが、自身の存在を知らせるために周期的に信号を送ります。この動作や信号のことをアドバタイズと呼びます。

2.スキャン

 セントラルは、ペリフェラルを探すためにスキャンを行います。

3.コネクションの確立

 セントラルが目的のデバイスに接続要求を送信します。接続が受け入れられると、ペアリングが行われて接続が確立します。

4.データ交換

 接続後、デバイス間でデータを交換します。データの読み取りは、通常セントラルからのリクエストに応じて行われ、書き込みはセントラルからのデータ送信によって行われます。また、ペリフェラルは、データの変更などを任意のタイミングでセントラルに対して通知することができます。

5.切断

 一連の通信が終了すると、セントラルが接続を切断します。

 なお、BLE通信には、セントラルと接続せずに、ペリフェラルがブロードキャストする通信モードもあります。その場合は、ペリフェラルがアドバタイズした信号をセントラルが受信するだけの、一方向の通信となります。

データ構造

 BLEでやりとりする基本のデータは、サービス(Service)とキャラクタリスティック(Characteristic)という要素で構成されています。

サービス

 サービスとは、特定の機能をグループ化したコンテナ(機能の集合)です。ペリフェラルでは、複数のサービスを持つことができます。各サービスには、ユニークな識別子(UUID)が付与されており、これによって特定のサービスを識別します。

キャラクタリスティック

 キャラクタリスティックは、単一のデータ値を表し、サービス内のデータの最小単位です。各キャラクタリスティックは、データの読み取り、書き込み、通知などの有効な機能を表すプロパティを持つことができます。またキャラクタリスティックにもUUIDがあり、サービス内で一意に識別されます。

 例えば、今回の環境センサーであれば、以下のようなデータ構造となります。

  • サービス:環境モニタリング
  • キャラクタリスティック:計測値
  • 各キャラクタリスティックのプロパティ:読み取り、通知

 キャラクタリスティックは同一のサービスで複数となってもかまわないので、計測値を気温、気圧などと分割しても問題ありません。

BLE通信におけるUUID

 UUIDは、世界中のリソースを一意に識別するために使用される汎用的な数値です。BLEでは、特定のサービスやキャラクタリスティックの識別に使用します。BLE通信でのUUIDの形式には、次の2種類があります。

標準UUID

 標準UUIDとは、Bluetooth SIG(Bluetoothの標準化などを行う非営利組織)で定義されたUUIDで、16ビットに短縮されたUUIDです。一般的なサービスやキャラクタリスティックに使用されます。

カスタムUUID

 ユーザーが独自に定義した128ビットのUUIDで、通常、12345678-1234-1234-1234-123456789ABのような形式です。

 今回のアプリでは、カスタムUUIDを使うことにしました。UUIDを生成する方法は、いろいろありますが、次の方法が手軽でしょう。

(1)WindowsのPowerShellから、以下のコマンドを実行する

> [Guid]::NewGuid()

(2)オンラインツールを利用する

次のページ
Bluetooth Low Energy通信(2)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
.NET nanoFrameworkとESP32でIoTプログラミング連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 高江 賢(タカエ ケン)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20513 2024/12/04 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング