Ⅱ. ESP32でのI2C接続とRTCの製作

 「ESP-WROOM-02(ESP8266)によるAirMonitor」で製作したシステムクロックをESP32で利用できるようにします。接続にはI2Cインターフェイスを使用。日付曜日の外部設定と計測日時の取得を可能にし、公開NTP(Network Time Protocol)サービスに接続して時刻の自動補正を行います。

 ※スケッチのダウンロードは右側の[Download]ボタンをクリックしてください。    

1.RTCをESP32に接続する

 前回でAirMonitorを組み立てている場合は、まずMCUボードからの配線をすべて外してください。この状態で計測ボードのI2Cの信号線は開放状態になっているので、これをESP32開発ボードに接続します。
 分かりやすいように、I2Cのデータ線とクロック線はRTCの端子付近からジャンパー線で引き出すことにしましょう。写真では次の3色のジャンパー線で配線しています。
    ・データ線
       RTC:SDA ---(黄色 )--> ESP32:GPIO21
    ・クロック線
       RTC:SCL ---(オレンジ)--> ESP32:GPIO22
    ・グランド
       RTC:GND ---(緑色  )--> ESP32:GND


 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);
 このように、第1引数でSDA(シリアルデータ)ピン、第2引数でSCL(シリアルクロック)ピン、第3引数で動作周波数を指定するようになっています。周波数は指定を省略すれば、標準モードの100kbit/sが適用されます。高速モードとして400kbit/sが指定できるようです。
 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の「マイコンボードに書き込む」アイコンをクリックしてください。コンパイルとマイコンボードへの書き込みが終わると、シリアルモニターに次のような時刻経過が表示されます。


以上!

 
Copyright (C) 2011-2024 Marchan, All rights reserved.