miyoshitan’s blog

岐阜発。自動車サービス現場とPython・Flask・Raspberry Pi・M5Stackの実践記録。

AI・IoT・個人開発の実験ログと考察をまとめる技術ブログ

ラズパイ5でBluetooth通信!Pythonでデバイス連携

ラズパイ5でBluetooth通信を始めよう

ラズパイ5のBluetooth機能とは

ラズパイ5にはBluetooth機能が標準搭載されており、USBドングルなしでそのまま無線通信が使えます。キーボードやイヤホンだけでなく、センサーやIoT機器とも接続可能です。特に常時起動できるラズパイは、Bluetoothゲートウェイ的な使い方にも向いています。まずは「デバイスを見つけて接続する」基本の流れを体験することから始めましょう。

どんなデバイスと連携できるのか

Bluetooth対応デバイスなら幅広く連携できます。例えばスマホ、BLEセンサー(温度・湿度など)、ワイヤレスボタン、キーボードなどです。中でもBLE(Bluetooth Low Energy)対応機器は省電力でIoT用途に適しています。今回は初心者でも扱いやすいBLEデバイスを前提に、Pythonでの接続とデータ取得を試していきます。


Bluetooth通信の基礎知識

Bluetoothの仕組み(BLEとクラシック)

Bluetoothには大きく分けて「クラシック」と「BLE」があります。クラシックは音声やデータ通信向け、BLEは低消費電力でセンサー向けです。Pythonで扱う場合、BLEのほうがライブラリが充実しており、扱いやすいのが特徴です。今回使うbleakもBLE専用ライブラリで、シンプルなコードで通信を実装できます。

デバイス接続の流れ(スキャン・ペアリング・通信)

Bluetooth通信は「スキャン→接続→データ通信」という流れで進みます。まず周囲のデバイスを検索し、接続したい機器を選びます。その後、接続を確立してデータを送受信します。BLEの場合はペアリング不要なケースも多く、比較的簡単に扱えます。この一連の流れを理解しておくと、トラブル時にも対応しやすくなります。


開発環境を準備しよう

必要なもの(ラズパイ5・対応デバイス)

ラズパイ5本体に加え、Bluetooth対応デバイス(BLEセンサーやスマホなど)を用意します。動作確認用にスマホのBLEアプリ(nRF Connectなど)があると便利です。ラズパイはWi-Fi接続もしておくと、ライブラリのインストールや調査がスムーズに進みます。

PythonとVSCodeのセットアップ

ターミナルで以下を実行し、Pythonが使えることを確認します。
python3 --version
VSCodeをインストールし、拡張機能「Python」を追加します。インタープリタを選択すれば、コード補完やデバッグが使えるようになります。Bluetooth処理は非同期処理が多いため、エディタの補助があると理解しやすくなります。

Bluetooth関連ライブラリの導入(bleakなど)

BLE通信用にbleakをインストールします。
pip3 install bleak
インストール後、importエラーが出なければOKです。bleakはクロスプラットフォーム対応で、シンプルなAPIが特徴です。初心者でも扱いやすく、ラズパイとの相性も良いライブラリです。


ラズパイでBluetooth接続を試す

デバイスをスキャンする方法

まずは周囲のBLEデバイスをスキャンします。
import asyncio
from bleak import BleakScanner

async def scan():
devices = await BleakScanner.discover()
for d in devices:
print(d.name, d.address)

asyncio.run(scan())

実行すると近くのデバイス一覧が表示されます。名前とアドレスを控えておきましょう。

接続(ペアリング)を行う手順

取得したアドレスを使って接続します。
from bleak import BleakClient

address = "XX:XX:XX:XX:XX:XX"

async def connect():
async with BleakClient(address) as client:
print("接続:", client.is_connected)

asyncio.run(connect())

接続成功すればTrueが表示されます。

接続状態の確認

接続できない場合は、デバイスの電源や距離を確認します。また、他の機器と同時接続していないかも重要です。シンプルな接続確認コードを何度も試すことで、環境に問題がないか切り分けできます。


PythonでBluetooth通信を実装しよう

デバイス情報を取得する

サービスやキャラクタリスティックを取得します。
async def get_services():
async with BleakClient(address) as client:
services = await client.get_services()
print(services)

データの読み書きにはUUIDが必要になるため、ここで確認します。

データを送信する方法

書き込みは以下のように行います。
await client.write_gatt_char(UUID, b'\x01')
UUIDはデバイスごとに異なるため、仕様書やアプリで確認します。バイト形式で送る点に注意しましょう。

データを受信する方法

読み取りは次の通りです。
data = await client.read_gatt_char(UUID)
print(data)
センサー値などが取得できます。取得したデータはログ保存や画面表示に活用できます。


実用的なデバイス連携例

スマホと連携してデータ送信

スマホをBLEサーバーとして使い、ラズパイからデータを送ることも可能です。簡単な通知やステータス送信に使えます。テストには専用アプリを使うと便利です。

BLEセンサーから情報取得

温度・湿度センサーなどの値を定期取得し、ログとして保存できます。環境モニタリング用途に最適です。cronと組み合わせるとさらに便利になります。

Bluetoothボタンやキーボード操作

ボタン入力をトリガーにして処理を実行することもできます。例えばボタンを押したらスクリプトを起動する、といった使い方です。物理操作との連携はラズパイならではの楽しさです。


トラブルシューティング

デバイスが見つからないときの対処

スキャンで表示されない場合は、デバイスがBLE対応か確認します。また、電源や距離も重要です。再起動で解決するケースもあります。

接続できない場合のチェックポイント

アドレスの入力ミスや、他機器との接続状態を確認します。BLEは1対1接続の制限がある場合もあります。ログを見ながら原因を切り分けましょう。

通信が不安定なときの改善方法

距離を近づける、障害物を減らすなどの物理的対策が有効です。また、通信頻度を下げることで安定する場合もあります。


応用アイデア

IoTシステムとの連携

BLEで取得したデータをクラウドに送信し、可視化することでIoTシステムが構築できます。ラズパイはその中継役として最適です。

複数デバイスの同時接続

複数のBLEデバイスを同時に扱うことも可能です。非同期処理を活用することで効率的に管理できます。少し難易度は上がりますが、実用性は大きく向上します。

常時接続アプリの作り方

whileループで接続を維持し、定期的にデータ取得を行うことで常時監視システムが作れます。ログ保存や通知と組み合わせると実用レベルになります。


まとめ:Bluetoothで広がるラズパイ活用

初心者が次にやるべきステップ

まずは1台のデバイスと安定して通信できる状態を作ることが大切です。そこから徐々に機能を追加していきましょう。小さく試して積み上げるのがコツです。

おすすめの発展プロジェクト

環境センサーの可視化やスマートホーム連携など、応用は無限に広がります。Bluetoothを入口にして、より高度なIoT開発に挑戦してみてください。