モダンOSのお砂場(15) FreeRTOSでBLEアドバタイズ

JosephHalfmoon

太陽の周りに輝くものでもあった筈の「コロナ」が、いまや迫りくる病魔の名となり重苦しい世の中となりました。それでもモダンOSのお砂場で戯れる、と。今回は、大分前に途中で止まっていた FreeRTOS へと戻ってみたいと思います。理由は、こちらのシリーズとは関係なく、FreeRTOSの開発ができる環境が出来てしまったから。

※「モダンOSのお砂場」投稿順Indexはこちら

まずは、FreeRTOSの開発ができる環境が出来てしまった経緯(大した経緯でもないです。ボタンを2,3押したらば出来てしまった)はこちら。

鳥なき里のマイコン屋(84) VS CodeでESP-IDF

PlatformIOのお陰で、ほとんど何もせずにESP32用の開発環境であるESP-IDFを使えるようになりました。そして、ESP-IDFを支えるOSこそが

FreeRTOS

なのであります。本シリーズでは大分以前に2回、触らせていただいております。

モダンOSのお砂場(6) FreeRTOS、Windows上で練習

モダンOSのお砂場(7) FreeRTOS kernelとAmazon FreeRTOS

しかし、上記は「本当に」FreeRTOSが動くMCU上でプログラムを動かしてみたわけではありませんでした。ここでようやく実プログラムを動かせるターゲットも決まったわけです。

Espressif Systems ESP32 DevKitC

ESP32の売りはといえば、お手頃価格の無線デバイスだ、というところでしょう。無線やらずにはいられない、と。勿論、WiFiもあるのですが、ちとひねくれて BLE をやりたいと思います。DevKitCと同じESP32を搭載したM5Stackを使って何度かやってみているので。なお、M5StackではArduino環境であったので、Arduinoでの記述の仕方と「生の」FreeRTOSでの実装を比べてみることができるでしょう。M5Stack使った BLEのアドバタイズの「覗き」はこちら。

IoT何をいまさら(56) BLE SniffingツールでWireshark

さて、今日その気になったのは、すべてPlatformIOのお陰です。メニューからProject Exampleを選び、以下の名前を見つけたためです。

espidf-ble-adv

「ESP-IDF環境で、BLEのアドバタイズをやるExample」に違いありません。

まずは、このExampleを手掛かりにして勉強していけば、ESP-IDF環境でBLE利用する方法がきっと分かるに違いない。馬鹿なのでインポート直後にビルドのボタンを押してしまいました。押した後に後悔。こんな感じ。

よく見れば良かったのですが、このサンプル・プロジェクトのターゲットボードは3種類もあったのです。手元にあるのは ESP32 DevkitCなので、

esp32dev

だけで十分。nano32もwroverも要りませぬ。しかし、ビルドボタンを押したらば、3つのボード用に次々とOSと必要モジュール全ファイルコンパイルしてビルドです。時間がかかる。でも、何事もなく完了しました。

後でPlatformio.iniを見たらば以下のような感じです。必要なesp32devだけにしておくべきだった。

でも、3種ビルドした後、そのままDevKitCをつなげてアップロードかけてみました。こちらも3回書き込みをしてましたが、最終的に問題なくDevKitCにDevKitC用のオブジェクトが書き込めたみたいです。実行してみます。ソース中のあちこちにprintfで状態を出力するように書かれていたので、PlatformIOのシリアルモニタを起動すればちゃんと動作していることが分かります。

しかし、シリアルモニタで動作を見ているだけでは、本当に電波が飛んでいるのかどうか分かりません。ソースを眺めてみると、以下のようにアドバタイズするお名前が定義されているのを見つけました。以下該当関数を1個引用させていただきます。

であれば、虚空にアドバタイズされる

ESP-BLE-HELLO

の文字を調べれば良いですな。Sniffingツールを持ち出すのも面倒なので、ここはスマホの BLE Scanner アプリを利用させてもらいます。こんな感じ。

ちゃんと電波飛んでることが確認できました。次回からはサンプルコードを読みながらFreeRTOSのお勉強っと。

モダンOSのお砂場(14) M5StickC、MicroPython REPL へ戻る

モダンOSのお砂場(16) FreeRTOS、BLEサンプルコードを読む へ進む