ラズパイ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開発に挑戦してみてください。