1.RTCをESP32に接続する
前回でAirMonitorを組み立てている場合は、まずMCUボードからの配線をすべて外してください。この状態で計測ボードのI2Cの信号線は開放状態になっているので、これをESP32開発ボードに接続します。
分かりやすいように、I2Cのデータ線とクロック線はRTCの端子付近からジャンパー線で引き出すことにしましょう。写真では次の3色のジャンパー線で配線しています。
・データ線
RTC:SDA ---(黄色 )--> ESP32:GPIO21
・クロック線
RTC:SCL ---(オレンジ)--> ESP32:GPIO22
・グランド
RTC:GND ---(緑色 )--> ESP32:GND
![](photo/RTC1.jpg)
RTCは専用電源からVCCに5Vを受けて作動するので、専用電源の5VとGNDラインを計測ボードのRTC側電源ライン(赤・青)に接続してください。
2.I2CのSDAとSCLを指定する
ESP32でI2Cを使用するには、ヘッダーファイルWire.hをインクルードして、初期化処理でWire.beginメソッドを実行する必要があります。ESP8266では引数なしで
Wire.begin();
としていましたが、ESP32では変更されています。Wire.h内で次のようにプロトタイプ宣言されています。
void begin(int sda=-1, int scl=-1, uint32_t frequency=100000); |
ESP32のSDAとSCLのピンアサインを確認すると、SDAはGPIO21、SCLはGPIO22に割り当てられています。したがって
Wire.begin(21,22);
とすればよいことが分かります。
3.既存コードの変更
変更点①
2行目: <ESP8266WiFi.h>から<WiFi.h>に変更する。
#include <Wire.h>
#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
変更点②
5行目: Wire.begin()からの変更。
void setup() {
Serial.begin(115200);
// Prepare I2C protocol.
Wire.begin(21,22); // Define(SDA, SCL)
// Prepare WiFi system.
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\r\nWiFi connected!");
// Recreate NTPClient object.
timeClient = NTPClient(ntpUDP, sNtpUrl, iNtpOffset);
}
4.スケッチの実行
変更後のスケッチをesp32RTC.inoの名称で保存して、[ツール]タブからシリアルモニタを開きます。
ESP32開発ボードの右ボタン[FLASH]を押したまま左ボタン[RESET]を押下した後、IDEの「マイコンボードに書き込む」アイコンをクリックしてください。コンパイルとマイコンボードへの書き込みが終わると、シリアルモニターに次のような時刻経過が表示されます。
![](photo/test1-1.png)
以上!