【esp-wroom-32】RTCを使ってみる

スポンサーリンク

esp-wroom-32でRTCを使うためのメモです。

スポンサーリンク

準備するもの

  •   ESP-WROOM-32モジュール
  •   RTCモジュール
  •   LIR2032リチウムイオン電池

ESP-WROOM-32はこのディユアルコアモジュールを使いました。

RTCモジュールです。

カズが購入した当時は1個の販売でしたが現在は3個セット販売になっているようです。

リチウムイオン充電式電池です。

スポンサーリンク

ZIPファイルをインストールする

esp32で使えるライブラリを探していたら、このRTCライブラリが使えました。

① 上のリンクをクリックしてgithubのページを開きます。

② 次にRTClib-master.zipをダウンロードします。

『 【esp-wroom-32】RTCを使ってみる 』 ..② 次にRTClib-master.zipをダウンロードします。..

③ arduinoIDEを開きます。 

④ スケッチ → ライブラリをインクルード → ZIP形式のライブラリをインストールと進みます。 

⑤ 先程ダウンロードしたRTClib-master.zipを選択して展開します。

⑥ もう一度、スケッチ → ライブラリをインクルード と進んで一覧に中にRTClibという項目があれば成功です。

スポンサーリンク

esp32 RTC ピンアサイン

RTCとesp-wroom-32のピン配置です。

RTC GND → esp-wroom-32 GND

RTC VCC → esp-wroom-32 3.3VCC

RTC SCL → esp-wroom-32 GPIO 22

RTC SDA → esp-wroom-32 GPIO 21

arduinoIDEのボードはツール → ボード : からESP32 Dev Moduleを選択しておきます。

arduinoIDEでesp32を使えるようにするにはこちらの記事をご覧ください。

(既に使えるよぉ~!って方はスルーしてください。)

スポンサーリンク

RTC スケッチ

1秒おきにシリアルモニタに出力するスケッチ(プログラム)です。

#include <Wire.h>
#include <RTClib.h>
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup () {
  Wire.begin(21,22);
   delay(10); 
  Serial.begin(115200);
   delay(1000); 
  if (! rtc.begin()) {
    Serial.println("Not find RTC");
    while (1);
  }
//時刻補正
//     rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//     rtc.adjust(DateTime(2019, 1, 12, 10, 32, 0));//年,月,日,時,分
}
void loop () {
    DateTime now = rtc.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    delay(1000);
}

シリアルモニタの様子です。

『 【esp-wroom-32】RTCを使ってみる 』 ..シリアルモニタの様子です。..

時刻補正

時刻補正するには

//時刻補正

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

rtc.adjust(DateTime(2019, 1, 12, 10, 32, 0)); //年,月,日,時,分

年、月、日、時刻、分の順に書き換えボードに書き込めばOKです。

書き込み後は//でコメントアウトしておきます。

書き込みにはコンパイルを含めて32秒程かかりますので逆算して32秒程前に書き込みを始めればほぼ正確な時刻を書き込めるようです。