明日の研究者になりたい

中国地方の某大学院博士課程に進学が決まったブログ.

ESP32でBLE

ほぼ1年ぶりぐらいの投稿です.

更新しようと思って全くできていなかった...

今年度こそはしっかりやったことを記録としてはてブロに投稿するようにします(_ _)

 

最近,研究の一環で電子工作を頻繁にやるようになりました.

僕の知識はArduino最強!で高専時代から止まっていたのですが,留学生からESP32なるものを紹介されて最近は専らESP32です.

このESP32,Bluetooth,Wifi搭載で価格も安く中々の代物.

今日はBLEの使い方に関して備忘録も兼ねて書いていこうと思います.


ESP32とは

あんまり詳しく書いても特に意味はないんで,Arduinoと同じ感じでプログラム作っていけるボードです.Amazonで2000円くらいで売ってます.

 

waves ESP32 DevKitC V2 ESP-WROOM-32 ESP-32 WiFi BLE 技適取得済 国内発送

waves ESP32 DevKitC V2 ESP-WROOM-32 ESP-32 WiFi BLE 技適取得済 国内発送

 

 日本国内で”正規に”使うなら技適通ったものを買った方がいいです.

技適通っていないと電波法にひっかかるそうです.

エディター

僕はAtomのPlatformIO(An open source ecosystem for IoT development · PlatformIO

を使っています.

PlatformIOだと手動でCOMポート選択する必要が無いのと,エディタを色々と編集できるのでちょー便利です.

BLE

Bluetooth Low Energyの略らしいです.詳しくはWikiとか見てください.

Bluetooth Low Energy - Wikipedia

BLEではサーバー→クライアントっていう感じにデータを送信します.

 

今回はESP間でサーバーからクライアントへ信号を送ってLチカを試みてみます.

まずは,BLEのサーバーとクライアントサンプルを動かしてみます.

サーバーがクライアントを見つける気配が全くない...

色々探ってみると僕と同じ問題にぶつかってる人がいました.

github.com

 

この方はBLE_notifyとBLE_clientの通信を試みてますが,基本的な部分は変わらないので読み進めていきます.

読み進めていくと,どうやらサーバー,クライアント両側のコードに1文追加する必要があるようですね.


"Ok, ive found the problem. Those two examples are not prepared to work with each other without some changes. As you can see in this line https://github.com/nkolban/ESP32_BLE_Arduino/blob/f8fe9d7cdfb20caa54b70849826d1ac6e375ff78/examples/BLE_client/BLE_client.ino#L78
BLE_client expecting that server is advertising UUID, but BLE_notify example is not advertising any UUID. You can change it very easy by adding this line
pServer->getAdvertising()->addServiceUUID(BLEUUID(SERVICE_UUID)); somwhere in here https://github.com/nkolban/ESP32_BLE_Arduino/blob/f8fe9d7cdfb20caa54b70849826d1ac6e375ff78/examples/BLE_notify/BLE_notify.ino#L78
tis will let you to connect 2 esp32 by using BLE_client and BLE_notify examples. There is one more thing you have to remember. When you are advertising 128 bit UUID then name of device cant be longer than 5 characters.

You can also change this line https://github.com/nkolban/ESP32_BLE_Arduino/blob/f8fe9d7cdfb20caa54b70849826d1ac6e375ff78/examples/BLE_client/BLE_client.ino#L78 and search device you want to connect to not by advertised UUID but ie by name, or served service etc

"

これの通りにやってみたところ,うまくLチカできました.

コードはちょっと長いのでGithubに置いておきます.

github.com

 

是非参考にしてください&間違いがあったら指摘してください.