flutterとesp32をBLEで通信するサンプルコードです。
サンプルの内容としてはFlutterとESP32で、BLEで接続を行い、
ESP32から定期的にデータを送信し、Flutter側で受信したデータを表示する実装と
Flutter側のフォームに入力した状態を、ESP32側に送信し、ESP32側で受信したデータを表示(Serial.print)する実装があります。
esp_exampleにesp32のコード例が格納されています。
プロジェクトディレクトリ全体はflutterのプロジェクトになっています。
- flutter
- Arduino(esp32)
- flutter_blue_plus
BLEにはセントラルとペリフェラルというものがあります。
セントラルとは、一般的にはスマートフォン側になることが多く、IoTデバイスなどと通信を行います。
ペリフェラルとは、一般的にはIoT側になることが多く、スマートフォンなどのセントラルと通信を行います。
また、セントラルはペリフェラルに対して、複数の接続を行うことができます。
このプロジェクトでBLEの通信を行うためのサービスです。
Bluetoothのデバイス一覧では、このサービスのUUIDを持つデバイスが表示されます。
※このUUIDのサービスがないデバイスはこのFlutterアプリに対応していないと言えます
UUID: d6f19b1b-3b62-4d39-ad7d-ec2dddbeb0ee
Characteristicとは、サービスの中で、データの送受信を行うためのものです。
このプロジェクトでは、ESP32のCharacteristicをFlutter側から読み取ったり、
書き込んだりしながらデータのやり取りを行います。
一般的にはペリフェラル(EPS32)側が、Characteristicを作成し、
セントラル(Flutter)側が、Characteristicを読み取ったり、書き込んだりします。
BLEにはread, write, notifyの3つのデータのやり取りの方法があります。
readは、Characteristicの値を読み取ることです。
writeは、Characteristicに値を書き込むことです。
notifyは特殊で、Characteristicの値が変更されたときに、
接続しているデバイス(今回はFlutter)などにそのことを通知するための仕組みです。
notifyがある理由としては、notifyを行わないと、定期的にreadを行う必要性が出てきてしまい、
省電力性が損なわれてしまうためです。
UUID: 30dfe503-7a09-4c5f-9a9f-352d773666d3
Flutter側からESP32に色の情報を送信するためのCharacteristicです。
UUID: 747eb891-fc27-4627-bb29-0fdca8376957
ESP32からWiFiの接続状態を受信するためのCharacteristicです。
また、このCharacteristicはESP32からFlutterに値が変化したことを伝えないといけないので、
notifyを有効にします。
UUID: 54acff26-12f7-4502-a9b4-3f82a268df08
UUID: bb11fb53-9d60-4f30-af5a-70485a572671
Flutterのメインのファイルです。
Bluetoothのデバイス一覧を取得し、表示する実装があるファイルです。
BluetoothのUUIDなどの定数を定義しているファイルです。
Bluetoothデバイスに接続後に表示される画面の実装があるファイルです。
接続状態や、WiFiの接続用のUIなどが実装されています。