DSPラジオのコントローラ(MCU)に時計機能を持たせるととても便利である。
ESP32にはWiFi機能があり、NTPを参照すれば現在時刻を得て、ESP32のRTC(時計)を設定することができる。この方法には2つ難点がある。WiFiのアクセスポイントが必要な点と、SSDとパスワードをプログラムに記述する点である。
他に何か方法はないかと思案して、ESP32のBluetoothは利用できないか調べて見た。最初、Bluetoothを使って、スマホの時刻を参照できないものかと考えた。BluetoothにはGATTという規格があり、その中に「Current time」サービスがあることに気が付いた。ESP32からスマホに問い合わせれば時刻が分かりそうである。しかしながら、スマホの「Current time」サービスは常時動作しているものではなく、このサービスを起動した上で、スマホ側から通知(notify)してもらわないといけないらしい(iPhone対応のライブラリを見つけたが、iPhoneが無い上に、コンパイルがエラーになったので評価できず)。その様な便利なスマホのアプリはないかと検索してみたが見つからなかった。
次に、ESP32側で「Current time」サービスを動作させて、外部から時刻を設定することはできないかを検討することにした。GATTのサービスを動作させる方法や外部から値を書き込む方法については、ネット上に先達の参考資料(ツールとして「nRF Connect for Mobile(スマホアプリ)」の使い方も含む)等があり、目途がついた。
一方、外部からBluetoothを使ってESP32にアクセスするには、スマホ(Android)のプログラムを作成する必要があるが、これについては、数年前に経験があるものの、開発環境とスキルの再構築には時間がかかりそうなので、諦めた。他に何かないか調べてみると、「Web Bluetooth」という技術があり、例えばPCのブラウザからBluetoothを使ってESP32にアクセスすることができそうである。
さらに手っ取り早い方法として、Googleのサイトにサンプルがあり、Chromeを使って試すことができる。ただし、PCにはBluetooth機能(内蔵)かBluetoothのUSBドングルが必要である。またはスマホのChromeからでも試すことができる。
ESP32上に「Current time」サービスを動作させるためのスケッチ(ArduinoIDE2.0で作成)はGitHubに登録してある。また「Web Bluetooth」を利用して、PCのブラウザからBluetooth経由で、このESP32にアクセスして現在時刻を設定するHTMLも登録してある。スマホ(Android)のChromeでの動作も確認した。なお、上のスケッチには「Lチカ」を行うコードも含めてある。今後、DSPラジオの制御にも使えそうである。写真は実験の様子。
※コメント投稿者のブログIDはブログ作成者のみに通知されます