atlab

モノづくりを楽しむ大学生の備忘録。まだまだ初心者です。お手柔らかにお願いします。

ESP32でBLE with Arduino (ubuntu )

はじめに

以前から気になっていた、ESP32を今回使用してみました。BLEのサンプルの使用までを紹介していこうと思います。

まずESP32についてですが、
240MHzデュアルコアWi-fiBluetoothを持つという高性能なマイコンでありながら1000円以下で購入できるという、とても魅了的なマイコンです。

今回は秋月さんで購入した以下のDIP化キットを使用します。

Wi−Fiモジュール ESP−WROOM−32 DIP化キット: 無線、高周波関連商品 秋月電子通商 電子部品 ネット通販

今後趣味で扱う、メインマイコンとして使用していきたいです。また今後ROSを使用してみたく、Ubuntuで環境を構築してみました。

開発環境としては以下の環境が挙げられます。

  • ESP-IDF
  • Arduino
  • MicroPython
  • Mongoose OS

先日BLEのライブラリも公開され他のライブラリも豊富だと思われるArduinoを使用しました。

UbuntuArduino

以下のページを参考にしました。以下のページ通りにやるとJavaのupdateやドライバ権限などに問題があるようで、そこを改善することでなんとかArduinoに書き込みを行うことができました。

Arduino - Linux

実際にArduinoに書き込みが成功した様子です。

ESP32に書き込み

続いてESP32に書き込みが行えるようにしました。環境を整えるのには以下のページ通りに行うことで環境を整えることができました。

github.com

 実際にはArduinoIDEを起動し、以下のようにツールからボードを選択することができるようになります。

f:id:atmos-tic:20171225115859p:plain

つづいて書き込みのための回路を組みます。

今回はひとまずブレッドボード上で組み上げました。実際に開発ボードなどを購入しても良かったのですが、手元にUSBシリアル変換モジュールであるFT232RLがあったのでそちらを使用して書き込み用回路を組み上げました。
FT232RL以外にタクトスイッチ×2とプルアップ抵抗10kΩ×1を用意しました。

書き込みに使用するPINとしては電源の3.3VとGND以外に以下の通りです。

  • TXD0 : FT232RLのRXD
  • RXD0 : FT232RLのTXD
  • IO0 : タクトスイッチ+内部プルダウン(押すとGNDに落ちるように)
  • EN  : タクトスイッチ+プルアップ抵抗10kΩ(押すとGNDに落ちるように)

その他に書き込み時にIO2がHighにならないようにします。(内部プルダウン済み)

書き込み時はIO0とIO2、ENをLowにし、その後ENを先にHighにします。
今回の場合は、IO0とENのタクトスイッチを押し、ENのタクトスイッチから先に離します。

実際にこのような回路を組みました。

f:id:atmos-tic:20171225124101j:plain

ESP32 BLE接続

続いてはBLEのサンプルを試していきます。

上記の環境設定でダウンロードされているので、以下のように見ることができます。

今回は

  • BLE_server
  • BLE_uart

の2つを使用しました。

f:id:atmos-tic:20171225125410p:plain

ESP32にプログラムを書き込み、実行します。Bluetoothを使用する際は、消費電流が大きくFT232RLからの給電ではBLEDevice::init()を実行する際にリセットがかかってしまったので注意してください。

ESP32にプログラムを実行後パソコン側で、Bluetoothの接続を行います。

まずはBLEデバイスをスキャンします。以下のコマンドを実行してください。

sudo hcitool lescan

以下の写真のようにデバイスが表示されます。
BLE_uartのサンプルプログラムの場合はUART Serviceと表示されます。これによってESP32がBLEデバイスとして認識されたことが確認できます。

また使用するESP32のアドレスが「30:AE:A4:00:B9:D6」だとわかりました。

このコマンドは終了しないので、Ctrl+CまたはCtrl+Zで終了してください。

 

次に実際に接続を行います。

getttool -b 30:AE:A4:00:B9:D6 -l

gatttollを開きます。

 

そして以下のコマンドで接続します。

connect

Connection successfulと表示されると、接続成功です。自分はここで理由も分からず接続できずに時間を消費しました。もし繋がらない場合はパソコンを再起動をするなどしてみてください。

 

続いて以下のコマンドで確認します。

characteristics

ここで確認した情報でデータを読み取ります。

f:id:atmos-tic:20171225145724p:plain

BLEデータ受信

続いてデータを受信していきたいと思います。

先のcharacteristicsコマンドで得られたデータを活用していきます。
その前にhelpでコマンドを確認しました。T

ESP32のプログラムでCHARACTERISTIC_UUID_TXを設定していたUUIDでのchar value handleを確認します。今回はUUIDは「E400003-B5A3-F393-E0A9-E50E24DCCA9E」ですので「0x002a」でした。そこで以下のコマンドを入力します。

char-read-hnd 0x002a

そこで以下の写真のように値が得られます。このプログラムでは、1000ms間隔で値を表示させるプログラムですので、上のコマンドを何回も実行することで値が更新されていることが確認できました。

f:id:atmos-tic:20171225151909p:plain

今回は、ESP32とのBLE接続の確認のみでしたが、今後更にためしていきたいと思います。

その他の参考資料

kakakikikekeのブログ: 10月 2015

ubuntuからESP32にbluetooth接続して信号を送受信する方法 : 試行錯誤な日々

第70回 ESP-WROOM-32をArduinoで触ってみよう(Bluetooth-BLE接続編) | Device Plus - デバプラ

blog.reinforce-lab.com