Raspberry Pi Pico Wの特徴のひとつが、Wi-FiとBluetoothによる無線接続(ネットワーク接続)だと思います。これをやらなければラズパイPico Wを購入した意味がありません。まずは、Bluetoothを使ってスマホとラズパイPicoWを接続して動作させてみました。後半に、今回Bluetoothを繋ぐにあたって学んだ知識について書いてあります。
準備
BLEライブラリ(MicroPython)
Thonny内のファームウェアでは、BLEに関するライブラリが無いようです。
MicroPython公式サイトから、ラズパイPico WのフォームウェアをダウンロードしてPico Wにインストールする必要があるようです。
Step.1 とりあえず動かす
概要
Raspberry Pi Pico WとAndoroidスマートフォンをBluetoothで繋いで、オンボードLEDとGP出力にLEDを繋いでランプを点灯させました。
Andoroidアプリは、「Serial Bluetooth Terminal」を使用します。
参考サイト
下記のサイトを参考にさせて頂きました。参考にするというか、サイトにプログラムが置いてあるので、ラズパイPico Wに書き込むだけで、オンボードLEDの点灯は動きました。
Electrocredible
Raspberry Pi Pico W Bluetooth(BLE) | PtoP Communication
動画
Electrocredibleさんのプログラムに少しだけ手を加えて、GPに繋いだLEDを点灯させました。プログラムが少し読める人であれば、数カ所書き加えるだけなので、比較的簡単に出来ます。
Step.2 「Step.1」のプログラムを変更する
Step.1は、Electrocredibleさんのサイトにあるプログラムを、拝借して動かしただけに近い内容でした。Bluetooth接続に関する基本的な知識を得るためなのか、分かりやすく、シンプルに作らているのでUI/UXは考慮されていません。
使い勝手向上とBluetoothについてもう少し知識を深めるために、アプリ「Serial Bluetooth Terminal」に文字を表示させたりして、UI/UXの改善をしていきます。
やりたいこと
操作してみて「こうしたい」をリストアップしました。
コメント表示
ヒントを見つけるまで時間が掛かりましたが、分かってしまえばそれほど難しくなかったです。
動画
上手く行ったと思います。
使用している主なコード
関数def
【Python】関数 def と キーボード入力 input()
Bluetoothの基礎知識
Raspberry Pi Pico WとスマートフォンをBluetooth接続するにあたって、事前に知っておいた方が良い知識があるので書いておきます。私も勉強中ですのでその辺はご理解下さい。
プログラムでBluetoothを利用する上で、理解しておいた方が良い内容になっていると思います。
概要
Bluetoothを箇条書きで説明すると、、、
- 無線通信技術の中のひとつ
- 極超短波である2.4GHz帯域
- 規格Ver3までとVer.4以降には互換性なし
Bluetooth ClassicとBLE
Bluetoothには、「Bluetooth Classic」と呼ばれる初期タイプの規格と、「BLE(Bluetooth Low Energy)」と呼ばれるVer.4以降のBluetooth規格が存在します。どちらも大まかにBluetoothと言われていますが、互換性はありません。
Bluetooth Classicの「1対1」に対して、デバイスにもよりますがBLEは、「1対多数、多数対多数」の通信が可能になっています。
プログラムを組む上で必要な知識
セントラルとペリフェラル
普段使用する時は全く気にすることはありませんが、機器の通信には「親機」と「子機」が存在します。制御する上で、どの機器が「親機」なのか「子機」なのかを把握していないと、プログラムなどが理解出来ない時があります。
Bluetoothでは、親機を「セントラル」、子機を「ペリフェラル」と言います。
身近なものだと、「スマホ=親機、ワイヤレスホン=子機」となります。
処理・通信(内部)
内部では主に以下の処理が行われています。正直、あまり理解できていません。
- スタンバイ
- アドバタイズ
- 開始
- 接続
- スキャン
- アイソクロナス ブロードキャスト
- 同期
スタンバイ:データの送信も受信も行わない状態
アドバタイズ:セントラルからの接続を待っている状態
開始:特定のデバイスからのアドバタイジングに対して接続を要求
接続:対象デバイスと接続中
スキャン:対象デバイスのアドバタイズパケットを読込み確認
アイソクロナス ブロードキャスト:アイソクロナス データのパケットをブロードキャスト
同期:デバイスによって送信される特定のアドバタイジングトレインに属する定期的なアドバタイズを読込み確認
GATT通信
GATT(Generic Attribute Profile)通信は、Bluetooth Low Energy(BLE)デバイス同士がデータをやり取りするための標準的なプロトコルです。BLE機器が互いに情報をやり取りするためのルールのようなもので、プログラムを組む上での指針にもなります。
GATTの基本的な属性
- サービス(Service)
- 特性(Characteristic)
- 記述子(Descriptor)
サービス
デバイスが提供できる内容。例えば、温度計であれば「温度を測定する」というサービスが提供しています。
特性
提供できる具体的な値。温度計であれば、○○度と言った「測定値」になります。
記述子
特性がどういった物かを説明します。温度計の測定した値は、「℃か℉か」を説明することも出来ます。
ATT
ATT(Attribute Protocol)は、BLEにおける、デバイス間のデータ転送を可能にするプロトコル。GATTの基礎を担っており、GATTで定義されたサービス、特性、記述子といった属性へのアクセスを制御します。
ATTの役割
- 属性へのアクセス
- データの分割
- エラー処理
属性へのアクセス
GATTで定義された属性(サービス、特性、記述子)に対して、読み込み、書き込み、通知といった操作を可能にします。
データの分割
大きなデータを分割して複数のデータとして転送することで、効率的なデータ転送を実現します。
エラー処理
データ転送中のエラー検出や再送などのエラー処理を行います。
ATTとGATTの関係
GATTは、BLEデバイスが提供するサービスの全体像を定義するプロファイル(規約)です。一方、ATTは、GATTで定義された属性に対して、具体的な操作を行うためのプロトコル(属性、設定)です。GATTが「何ができるか」を定義し、ATTが「どのようにやるか」を定義していると言えるでしょう。
UUID

UUID(Universally Unique Identifier)とは、ソフトウェア上でオブジェクトを認識するための識別子で、理論上、世の中で重複しない唯一のIDになります。具体的には、8-4-4-4-12の32桁(16進数)で構成された数列です。
UUID生成は、自分で勝手に生成してもいいですし、いくつかの生成サイトで自動生成させる事も出来ます。
プログラムの中では、以下の3つのUUIDが設定されていました。
- ペリフェラル(Peripheral)のUUID
- サービス(Service)のUUID
- キャラクタリスティック(Characteristic)のUUID

コメント