Flutterアプリ（flutter_blue_plus の Android用サンプル）と micro:bit CreateAI のプログラムを BLE通信でつないでみる

## はじめに

以下の記事に登場する「micro:bit CreateAI ＋ BLE通信」と、Flutterアプリ（Androidアプリ）とを組み合わせてみる話です。

●micro:bit CreateAI で BLE通信を使ってみる（ブラウザの Web Bluetooth API との組み合わせで） - Qiita
　https://qiita.com/youtoy/private/1b47551f79bc3e3aa50a

上記の記事では、micro:bit が「BLE UART」でデータを送信し、それをブラウザ（Web Bluetooth API を使った処理）で受けていました。

この受信側を、Flutter を使った Androidアプリにしてみます。


### 今回使うパッケージ

Flutterアプリで「BLE UART」のデータ受信を行う部分で、以下のパッケージを使うことにします。

●flutter_blue_plus | Flutter package
　https://pub.dev/packages/flutter_blue_plus
●flutter_blue_plus/packages/flutter_blue_plus at master · chipweinberger/flutter_blue_plus
　https://github.com/chipweinberger/flutter_blue_plus/tree/master/packages/flutter_blue_plus

公式情報を見てみると、サンプルアプリで micro:bit との接続・micro:bit から送られたデータの受信は確認できそうでした。

![2025-03-24_22-32-06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/3da3c1c6-c79d-4fc4-ac51-a274d79897a7.jpeg)

そこで今回は、サンプルアプリを Androidスマホで動かして、データが受信できるかを確認してみます。

## 実際に試していく

実際に試していきます。

### サンプルアプリのビルド

まずは、[GitHubリポジトリ](https://github.com/chipweinberger/flutter_blue_plus/tree/master/packages/flutter_blue_plus)のデータをローカルに保存します。

その後、「flutter_blue_plus-master ＞ packages ＞ flutter_blue_plus ＞ example」と階層をたどり、公式の説明にあったコマンドの `flutter run` （自分の環境だと fvm を使っているので、 `fvm flutter run` ）を実行します。

その際、Flutterアプリをインストールする Androidスマホを、PC に接続しておきます。

また、冒頭に掲載していた記事で用意した micro:bit（micro:bit CreateAI・BLE通信の処理を行うプログラムが書きこまれたもの）を、今回も使います。

### micro:bit からのデータ受信

ビルド後、Androidスマホでサンプルアプリを動作させることができました。

その近くに、電源が入った micro:bit を用意していたため、サンプルアプリでスキャンされたデバイスの一覧に、micro:bit が表示されていました。

その micro:bit が表示された項目を選択して、BLE でスマホと micro:bit を接続します。

#### 受信できたデータの確認

その状態で、micro:bit を揺らしたりなどしてみます（※ [冒頭の記事](https://qiita.com/youtoy/private/1b47551f79bc3e3aa50a)で用意した micro:bit なので、特定の動きをさせると BLE UART でのデータ送信が行われます）。

アプリ内で、データの Subscribe を行うようにしたところ、以下のように「49」というデータを受信できました。


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/33917cf4-ba39-47f3-8a70-9ec7298241a4.jpeg" width=65%>


PC側にもログが出力されていました。
さらに micro:bit を動かしていると、「50」というデータも受信できました。

![2025-03-24_22-22-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/58b255a0-fa6e-49ef-99d4-682ff74dccae.png)

受信できていたデータは ASCII コードになります。
ASCII コードの 49 は「数字の 1」で、ASCII コードの 50 は「数字の 2」に対応します。

これらは、micro:bit に書きこまれたプログラムの中の、以下の処理に該当することが分かります（※ 以下の画像は、[冒頭の記事](https://qiita.com/youtoy/private/1b47551f79bc3e3aa50a)からの抜粋）。


![2025-03-26_21-09-10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1acb1574-951a-4517-8d99-77651c2a785c.jpeg)

## おわりに

Androidスマホで動かした Flutterアプリで、BLE UART によるデータ受信が行えることが確認できました。

### 【余談】 iOS用サンプルについて

余談ですが、iPhone でもサンプルアプリを動かそうとしてみたのですが、単純にコマンドを実行しただけでは以下のエラーが発生しました。

プロビジョニングファイル周りの話がメッセージに出てきているので、コマンド実行前に少しプロジェクトの設定を変更してやる必要がありそうです。

![2025-03-24_22-49-38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/692f4b83-2154-49d8-9a7e-5c8513277919.jpeg)

以前、XCode でビルドした Flutterアプリを iPhone で動かしたことはあるので、この時に設定していた内容のいちぶを使ってやれば良さそうに思いました。

●iOS アプリ開発用メモ： Mac上で中途半端になっていた Flutter の開発環境の構築の続き - Qiita
　https://qiita.com/youtoy/items/275225ccee591ac6d5ce


## 【追記】flutter_blue_plus を使った実装を試す

flutter_blue_plus を使った機能実装のお試しも着手しました。

https://x.com/youtoy/status/1904921840793141359