Skip to content

asmnoak/Web_Bluetooth_Set_RTC_of_ESP32

Repository files navigation

Bluetoothを使ってESP32のRTCを設定する

ESP32のBluetooth機能を使用して、RTCに時刻を設定する方法を紹介する。Bluetooth(BLE)にはGATT(Generic Attribute Profile)という規格があり
周囲のデバイスが提供するサービスを認知することができる。その中に"current time"というサービスがあり、このサービスでは、デバイスの時刻が参照できるようになっている。
ここでは、そのサービスをESP32側に実装し、Web Bluetoothの機能を利用して、 外部のブラウザから、現在時刻をESP32のRTC(クロック)に設定する方法について説明する。

"current time"サービスの実装
ESP32にService"current time"、Characteristicとして"current time"を設定したBLEサーバーを定義する。現在時刻の設定先としてDescriptorを追加しておく。
BLEサーバーのアドバタイズをスタートさせると、ESP32の"current time"サービスが外部から認知できるようになる。
外部から、現在時刻がDescriptorに書き込まれると、Descriptorのコールバックの onWrite()関数に通知される。

H/W構成
・ESP32 DevkitC
・SD1306 128x64 OLED表示装置
・LED

  • BuitIn LED:5(1kΩ程度の抵抗を経由して接続)  使用したESP32にはBuitIn LEDが無いので外付けした
  • Control用LED:17(1kΩ程度の抵抗を経由して接続)

ブラウザの操作

  1. Chromeを開いて"Web_Bluetooth_Set_RTC.html"をドラッグ&ドロップする。
  2. "Connect to ESP32"ボタンを押す。Bluetoothデバイスのスキャン画面が表示される。
  3. スキャン画面に"ESP32_2"が表示されるので選択して"ペア設定"ボタンを押す。
  4. 接続状態(約30秒間。BuitIn LEDが点滅)になるので"Set current time to ESP32 RTC"ボタンを押す。
  5. 現在の時刻が表示される。
なお、Control用LEDを配線した場合は,接続状態にして"Execute specified command : on/off"ボタンを押すとControl用LEDが点灯する。
Commandに"off"と入力して"Execute specified command : on/off"ボタンを押すとControl用LEDが消灯する。
このCommand実行機能は、拡張して他の制御機能にも利用できる。

接続
OLED表示装置の接続は以下の通り。

I2C ESP32
SCK21
SDA22

インストール

  1. コードを、ZIP形式でダウンロード
  2. ArduinoIDEにおいて、ライブラリマネージャから以下を検索してインストールする
    • Adafruit_BusIO
    • Adafruit_GFX
    • Adafruit_SSD1306
  3. ArduinoIDEからESP32_WebBLE_clock_set_master.inoを開く
  4. 「検証・コンパイル」に成功したら、一旦、「名前を付けて保存」を行う

若干の解説
・PCにはBluetooth機能かBluetooth(5.0以降)のUSBドングルが必要である。
・ブラウザはChromeだけでなく、Edgeでも動作した。スマートフォンのChromeでも動作する。
・ここで使用した"Web_Bluetooth_Set_RTC.html"は冒頭のWeb Bluetoothサイトのサンプルを改造したものである。

注意事項
・利用の際は、自己責任でお楽しみください。

About

ESP32 clock -- Current time is set by Browser using WebBLE.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages