【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をダウンロードします。
③ 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秒おきにシリアルモニタに出力するスケッチ(プログラム)です。
[php]#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);
}[/php]
シリアルモニタの様子です。
時刻補正
時刻補正するには
//時刻補正
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
rtc.adjust(DateTime(2019, 1, 12, 10, 32, 0)); //年,月,日,時,分
年、月、日、時刻、分の順に書き換えボードに書き込めばOKです。
書き込み後は//でコメントアウトしておきます。
書き込みにはコンパイルを含めて32秒程かかりますので逆算して32秒程前に書き込みを始めればほぼ正確な時刻を書き込めるようです。