M5シリーズで最小基板であるPicoにRTCを接続したテンプレートを作ったので紹介します。
RTCはDS3231Mを使用しています。末尾にMが付くDS3231は精度が低く、Mが付く方は2ppmに対し、Mが付く法は5ppmとなります。しかし価格が4倍ぐらいしますのでさほど精度を優先しない場合はこの構成がいいと思います。
配線は右の写真を参考にしてください。I2Cの接続のみとしています。
ソースは下記のとおりです。RTCはDS3231を指定するだけでアドレス指定は不要なようです。
#include <arduino.h>
#include "RTClib.h"
RTC_DS3231 rtc;
struct tm timeinfo;
String dateStr;
String timeStr;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup()
{
Serial.begin(115200);
Wire.begin(21, 22);
Serial.println("Start");
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
//32Kピンは使わない
rtc.disable32K();
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}else{
rtc.adjust(DateTime(2023,8,24,17,12,0));
}
}
void loop()
{
DateTime now = rtc.now();
Serial.printf("%u/%u/%u(%s) %u:%u:%u ",now.year(),now.month(),now.day(),daysOfTheWeek[now.dayOfTheWeek()],now.hour(),now.minute(),now.second());
Serial.printf("Temp:%2.2fC\n",rtc.getTemperature());
delay(3000);
}</arduino.h>
©ZEATEC co.,ltd.