これまで購入したRTCは5V対応でラズパイ用にはよいのですが、
PICOで使うには信号電圧変換が必要でした。

もっと手軽な3.3V対応のRTC(DS3231)があることを知り、

AMAZONで入手しました。

■AMAZONに記載されている仕様の概略
VKLSVAN

DS3231 AT24C32 RTCモジュール IIC Arduino対応
DS3231は、温度補償水晶発振器(TCXO)と水晶を内蔵した、低コストI2C−RTC。(注記:TCXO内蔵ではなくMEMS方式でした)
バッテリー入力内蔵、主電源切断でも正確な時間管理を維持。(中略)
電圧:DC 3.3-5.5V;
製品名:リアルタイムクロックモジュール;
チップ:DS3231 ピン数:6
1×3V CR2032電池(非同梱);
PCB:3.8×2.3センチメートル/ 1.5"×0.9")
クロック精度::0 ~ 40 ℃レンジ 精度:2ppm 誤差:一分
材料:PCB; メインカラー:ブルー 純重量:11グラム;
パッケージ内容:2 ×リアルタイムクロックモジュール

 

■CR2032を使うときの充電回路の切断方法
DS3231は水晶発信式で時計精度の高いNタイプとMEMS式のやや精度が落ちるMタイプとあるそうです。今回購入したもの(2個)はMタイプでした。

電池としてCR2032を使うときは充電回路を外せとのこと。下記ご参照。
出典1
RTC (リアルタイムクロック) (DS3231)
https://ht-deko.com/arduino/rtc_ds3231.html
チップ抵抗を捻り外すのが一番簡単ですね。
出典2
リアルタイムクロック DS3231 を使った ZS-042 というモジュールを調べる(その2)
http://radiopench.blog96.fc2.com/blog-entry-922.html



■適用マイコン
今回はPICOではなくGPIOを30ピン使えるAE-RP2040を秋月電子から購入。
Wifiなしでよければこちらも選択枝になります。


PICOより若干安価ですが、ピンヘッダは自分ではんだ付けになります。

AE-RP2040については別途アップします。
 

AE-RP2040に配線してDS3231のI2Cアドレス0x68を確認しました。

■DS3231の使い方
出典
リアルタイムクロックモジュールDS3231の使い方
https://blog.boochow.com/article/459684626.html
ドライバ記述ありますが使わず

■DS3231仕様書
https://www.analog.com/media/en/technical-documentation/data-sheets/ds3231.pdf

■ライブラリ
出典
MicroPython TechNotes: DS3231 RTC
https://techtotinker.com/2021/04/21/030-micropython-technotes-ds3231-rtc/
上述にあるライブラリをコピーして名称をds3231.pyにしてAE-RP2040へ保存。

(Thonnyを使っています)

 

■メインコード例(出典のコードから少し編集しました)
# More details can be found in TechToTinker.blogspot.com 
# George Bantique | tech.to.tinker@gmail.com

from machine import Pin
from machine import SoftI2C 
from ds3231 import DS3231
from time import sleep_ms

#set RTC-object
i2c = SoftI2C(scl=Pin(17), sda=Pin(16), freq=400000) 
ds = DS3231(i2c)

#set RTC(時刻を手動セット。1秒前に起動がよい。セット後は不要)
#ds.set_time(2024, 10, 27, 11, 00, 00, 6, 00)
#ds.set_time(YYYY,MM, DD, HH, MM, SS, WD, 00)
#print( "set time" )
#sleep_ms(2000)

 

for i in range(0,100):
    t = ds.get_time()
    #print( "ds3231 time :" , year )
    print( "ds3231 time :" , t[0],t[1],t[2], t[3],t[4],t[5], t[6] )
    sleep_ms(1000)
# The following line of codes can be tested using the REPL:
# 1. Get the current time
# ds.get_time()
# Return:
#        YYYY, MM, DD, HH, mm, ss, WD, YD
#        YYYY - year
#          MM - month
#          DD - day
#          HH - hour in 24 hour
#          mm - minutes
#          ss - seconds
#          WD - week day: 1=Monday, 7=Sunday
#          YD - day of the year
# 2. Set the current time
# ds.set_time(YYYY, MM, DD, HH, mm, ss, WD, YD)
# ds.set_time(2021, 04, 20, 08, 30, 00, 02, 00)

 

これでうまくいきました。出典元さまに感謝!

MQTTなどで測定時刻をデータに入れる必要があればこれで十分と思います。
が、MQTT-Sub側で記録時刻入れられるならば発信側にRTC不要との論も。。。
要は使い分け。
以上