カテゴリ: C# 更新日: 2026/08/14

C#でBLE(Bluetooth Low Energy)制御をマスター!初心者向け開発入門

C#でBLE(Bluetooth Low Energy)デバイスを制御する方法
C#でBLE(Bluetooth Low Energy)デバイスを制御する方法

先生と生徒の会話形式で理解しよう

生徒

「C#を使って、Bluetoothで動く機械やセンサーと通信する方法ってありますか?」

先生

「C#とBLEという技術を組み合わせると、スマートフォンやパソコンから身の回りのデバイスを自由に操作できるようになりますよ。」

生徒

「BLEって何ですか?プログラミング未経験でも理解できますか?」

先生

「BLEは省電力で動く無線通信技術のことです。仕組みから順を追って解説しますね。」

1. BLE(Bluetooth Low Energy)とは何か

1. BLE(Bluetooth Low Energy)とは何か
1. BLE(Bluetooth Low Energy)とは何か

BLEは、近距離でデータをやり取りするための無線通信規格です。「Low Energy」という名前の通り、非常に少ない消費電力で通信できるのが特徴です。例えば、スマートウォッチが常にスマートフォンと連携していたり、温度センサーがずっと動いていたりするのは、このBLEの仕組みのおかげです。C#を使ってこの技術を扱うことで、自作のIoT(モノのインターネット)デバイスを作ることができます。

IoTとは、本来インターネットに繋がっていなかった家電やセンサーを、通信機能を持たせて便利にする技術のことです。BLEデバイス同士は、決まった手順で「話しかけ」たり「返事」をしたりして通信します。

2. C#によるBLE開発の基本

2. C#によるBLE開発の基本
2. C#によるBLE開発の基本

Windows環境でC#を使ってBLEを制御する場合、Windowsが標準で提供している「Windows.Devices.Bluetooth」という機能を使います。これを使うことで、Bluetoothアダプタを通じて近くにあるデバイスを探したり、データを受け取ったりできます。

プログラム開発には「Visual Studio」というツールを使います。これは、プログラミングに必要な道具がすべて揃った大きなワークスペースのようなものです。まずは、デバイスを探すための準備コードを見てみましょう。


using Windows.Devices.Bluetooth.Advertisement;

var watcher = new BluetoothLEAdvertisementWatcher();
watcher.Received += (s, e) =>
{
    Console.WriteLine($"デバイスを発見: {e.BluetoothAddress}");
};
watcher.Start();

3. デバイスとの接続とサービスの検索

3. デバイスとの接続とサービスの検索
3. デバイスとの接続とサービスの検索

BLEの世界では、デバイスの中に「サービス」と「キャラクタリスティック」という箱があります。「サービス」は機能のまとまり(例えば、心拍数センサー機能など)で、「キャラクタリスティック」はその中の具体的なデータ(今の心拍数の値など)が入っている場所です。接続するには、まずこれらの場所を探す必要があります。

接続は、デバイスを見つけた後に行います。接続するための専用のクラスを作成し、デバイスの情報を取得します。


using Windows.Devices.Bluetooth;

BluetoothLEDevice device = await BluetoothLEDevice.FromBluetoothAddressAsync(address);
Console.WriteLine($"デバイス名: {device.Name}");

4. データの読み取りと書き込み

4. データの読み取りと書き込み
4. データの読み取りと書き込み

接続が完了したら、いよいよデータを送受信します。センサーの値を読み取る場合は「Read」、LEDを点灯させたいときなどは「Write」という命令を送ります。この作業は「特性(Characteristic)」に対して行います。

ここでは、特定のサービスからデータを読み取って画面に表示する流れをプログラムにしてみましょう。データはそのままでは読めないので、型を変換して扱うのがポイントです。


var result = await characteristic.ReadValueAsync();
var reader = Windows.Storage.Streams.DataReader.FromBuffer(result.Value);
byte[] data = new byte[reader.UnconsumedBufferLength];
reader.ReadBytes(data);
Console.WriteLine($"読み取った値: {BitConverter.ToString(data)}");

5. イベント通知を受け取る方法

5. イベント通知を受け取る方法
5. イベント通知を受け取る方法

センサーの値が変わったときに、プログラム側に自動で知らせてほしい場合があります。これを「通知(Notification)」と呼びます。自分で何度も「値は変わった?」と聞かなくても、デバイス側から「値が変わりましたよ」と教えてくれる仕組みです。

通知設定を有効にすると、特定の関数(イベントハンドラ)が自動的に呼び出されるようになります。


characteristic.ValueChanged += (sender, args) =>
{
    Console.WriteLine("値が更新されました");
};
await characteristic.WriteClientCharacteristicConfigurationDescriptorAsync(
    GattClientCharacteristicConfigurationDescriptorValue.Notify);

6. トラブルシューティングと注意点

6. トラブルシューティングと注意点
6. トラブルシューティングと注意点

BLE開発でよくある失敗は、「許可設定」を忘れることです。Windowsのアプリケーション設定で「Bluetoothを使用する」という項目にチェックを入れておかないと、どれだけ正しいプログラムを書いても動作しません。また、デバイスとの距離が離れすぎていると通信が切れてしまうこともあります。

また、C#で非同期処理(async/await)を正しく扱うことも大切です。Bluetoothの通信は時間がかかるため、処理が終わるまでプログラムが止まらないようにする工夫が必要です。非同期処理とは、裏側で別の作業を進めながら、終わったら続きを行う技術のことです。これを使うことで、画面が固まらないスムーズなアプリケーションを作ることができます。

カテゴリの一覧へ
新着記事
New1
C#
C#とは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
New2
C#
C#のメソッドを引数に渡す方法!高階関数の基本を学ぼう
New3
Azure
Azure Front Door Analytics活用|リアルタイム監視とレポートで通信を分析
New4
COBOL
COBOLで数値比較とALPHABETIC・NUMERIC条件をやさしく解説!初心者でも安心ガイド
人気記事
No.1
Java&Spring記事人気No1
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.2
Java&Spring記事人気No2
COBOL
COBOL教育における教材とリソース完全ガイド!初心者でもわかるプログラミング学習の選び方
No.3
Java&Spring記事人気No3
Azure
Azure SQL Database購入モデル比較!vCoreとDTUの違いと選び方を初心者向けに解説
No.4
Java&Spring記事人気No4
C#
C#のLINQでWhere句を使いこなす!初心者でもわかるデータ抽出とフィルタリング
No.5
Java&Spring記事人気No5
COBOL
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法
No.6
Java&Spring記事人気No6
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.7
Java&Spring記事人気No7
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド
No.8
Java&Spring記事人気No8
C#
C#のforeachループを完全ガイド!初心者でもわかるコレクション操作の基本