アドバタイズメントを受信してBluetoothLEデバイスを検出するC# .NET Frameworkのコンソールアプリを作成します。
動作環境
- Windows 10 Professional
- Visual Studio 2019
BluetoothLEデバイス
Planex BT-Micro4
「Bluez を使用したSensorTagへのアクセス」で「CC2541 SensorTag」と接続のために使用しました。
CC2541 SensorTag
CC2541 SensorTagは、TI の CC2541 ワイヤレス・マイコンをベースにし、6 個のローパワー MEMS センサとBluetooth Smart 無線を搭載し、シングル・セルのコイン・セル・バッテリ(CR2032)により、無信号時消費電流 8uA で数年間駆動します。含まれるセンサーは次のようになっています。
- 温度 TMP006
- 湿度 SHT21
- 圧力 T5400(C953A)
- 加速度計 KXTJ9
- ジャイロスコープ IMU-3000
- 磁力計 MAG3110
「node.js環境でのSensortagの情報の読み出し」でRaspberry Piを使って動作させました。
アルプスのセンサネットワークモジュール
地磁気・加速度の6軸センサのモーションデータとともに、気圧、温度、湿度、照明などの環境データを取得し、低消費電力通信のBluetoothで通信を行うセンサーネットワークモジュールです。「Pythonを使ってアルプスのセンサネットワークモジュールでモーションデータの取得」でRaspberry Piを使って動作させました。
UWP用APIが使えるアドオン「Microsoft.Windows.SDK.Contracts」」のインストール
Windows10のBLE周りのAPIはUWPアプリ専用のため、.NET Frameworkからは、WinRTのAPI「Microsoft.Windows.SDK.Contracts」を経由してアクセスする必要があります。次の手順でNuGetから「Microsoft.Windows.SDK.Contracts」をインストールします。最初に、次のように、ツールメニューから「NuGetパッケージマネージャ」「ソリューションのNuGetパッケージの管理」を選択して、NuGetパッケージの管理画面を表示します。
次に示すNuGetパッケージの管理画面から、「Microsoft.Windows.SDK.Contracts」を検索してインストールします。インストールが完了すると、参照に「Microsoft.Windows.SDK.Contracts」が表示されます。
アドバタイズメントスキャンプログラムの作成
C# .NET Frameworkのコンソールアプリで作成したアドバタイズメントスキャンプログラムは、BluetoothLEデバイスからのアドバタイズパケットを受信して接続します。アドバタイズメントスキャンプログラムを次に示します。
using System; using System.Threading; using Windows.Devices.Bluetooth.Advertisement; namespace WinRTDotNet { class Program { static BluetoothLEAdvertisementWatcher watcher; static void Main(string[] args) { Console.WriteLine("Start"); watcher = new BluetoothLEAdvertisementWatcher(); watcher.Received += Watcher_Received; watcher.ScanningMode = BluetoothLEScanningMode.Passive; watcher.Start(); Thread.Sleep(60000); watcher.Stop(); Console.WriteLine("Stop"); } private static void Watcher_Received(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args) { Console.WriteLine("---Received---"); var bleServiceUUIDs = args.Advertisement.ServiceUuids; Console.WriteLine("Found"); Console.WriteLine("MAC:" + args.BluetoothAddress.ToString()); Console.WriteLine("NAME:" + args.Advertisement.LocalName.ToString()); Console.WriteLine("ServiceUuid"); foreach (var uuidone in bleServiceUUIDs) { Console.WriteLine(uuidone.ToString()); } Console.WriteLine("---END---"); Console.WriteLine(""); } } }
アドバタイズメントスキャンプログラムの実行
アドバタイズメントスキャンプログラムを実行すると次のようにコマンドプロンプトの画面に表示されます。「NAME:SNM00」がアルプスのセンサネットワークモジュールで「NAME:」がCC2541 SensorTagになります。
Start ---Received--- Found MAC:44674167429270 NAME:SNM00 ServiceUuid ---END--- ---Received--- Found MAC:198570504670687 NAME: ServiceUuid ---END---