参考資料・・・

 

出典:

 

 

 

■購入品情報

 

スイッチサイエンスから購入しました。

一個847円なり。

以下、出典ページからコピペ情報。


Raspberry Pi用RTC(DS1307)
送料区分: 200
商品コード: SEEED-103030277
発売日: 2019-01-08
https://ssci.to/5334

クロックチップDS1307をベースにしたRTCで、I2C経由でRaspberry Piにリアルタイムクロック機能を提供します。 秒、分、時間、日付、月、曜日、および年をカウントし、うるう年の補正は2100年まで有効です。24時間または12時間のどちらの形式でも表示でき、 AM / PM表示も可能です。
Raspberry Piの電源が切れた状態でモジュールのクロックを維持したい場合には、バッテリーホルダーに3 V CR1225リチウム電池をセットする必要があります。
【特徴】
Raspberry Pi 2/ 3 B/B+ Zero をサポート
秒、分、時間、曜日、月、年をサポート
AM / PMインジケータ付きで24時間または12時間形式をサポート
56 byteのデータ保存用不揮発性(NV)RAM搭載(バッテリーパックアップ)
プログラム可能な矩形波出力
自動電源異常検出およびスイッチ回路搭載
寸法 : 30 mm x23 mm x15 mm
重量 : 13.2 g
内容物:Pi RTC(DS1307)、2ピンソケット
製造元のRTCガイドページ
https://github.com/Seeed-Studio/pi-hats/tree/master/RTC-HAT
 

■基板関連情報

1:直接装着の場合

↑拡張ボードを使うときはこういう装着はできません。

↓したがい、ピンアサインを読んで結線になります。

 

2:ピンに結線する場合のアサイン

I2Cだから、通信2線、電源GND2線、計4線でよいはずですが、

なんで10ピンもあるの?

→これはTX、RXのGPIOピンまで繋ごうとしたからと推測。

TX、RX使いませんから、3V3、GND、SDA、SCLの4本接続します。

(あってるはず)

 

■電池

CR1225

直径12・厚2.5で1225。

後追いでAmazon手配、10個入599円。

でかい外装に包まれて着荷しました!電池自体の外装箱もあり、その中に
写真のような5個入内装。そして電池取出しがやけに難しいパッケージ。
はい、安いからエエけど。

 

■Pythonドライバ

↓Micropython用のDS1307ドライバがありました。

(MicropythonなのでラズパイPicoですね。ラズパイ用は調査中)

出典:

↑ここにドライバds1307.pyとサンプルスクリプトがあります。

SoftI2Cを使っているようですが、なんのことか?別途調査予定としておき、

とりあえず流れだけ解読。

ーーーーーーーーーーーーーーーーーーーーーーーーー

サンプルスクリプト

ーーーーーーーーーーーーーーーーーーーーーーーーー

from machine import Pin, SoftI2C, RTC
# from machine import Pin, I2C
import ds1307
import time

# full test code
i2c0 = SoftI2C(scl=Pin(1), sda=Pin(0), freq=100000)
# i2c0 = I2C(0, scl=Pin(1), sda=Pin(0), freq=100000)

print("i2c0 scan: ", i2c0.scan())

ds1307rtc = ds1307.DS1307(i2c0, 0x68)

#show attribute of ds1307rtc by dir()
print(dir(ds1307rtc))

# set and read disable_osclator property 
ds1307rtc.disable_oscillator = True
print("disable_oscillator = ", ds1307rtc.disable_oscillator)
ds1307rtc.disable_oscillator = False
print("disable_oscillator = ", ds1307rtc.disable_oscillator,"\n")

print("date time and weekday from DS1307")
print(ds1307rtc.datetime,"\n")

# set 

time (year, month, day, hours. minutes, seconds, weekday: integer: 0-6 )
ds1307rtc.datetime = (2023, 02, 19, 18, 47, 17, 6, None)

# read time
dt = ds1307rtc.datetime
print(dt)

# wait 3.9 seconds and read time again
time.sleep(3.9) 
print(ds1307rtc.datetime,"\n")

#read time in format suitable to set the
print("date time from DS1307 in format needed to set pico RTC clock") 
print(ds1307rtc.datetimeRTC,"\n")

print("time from pico internal RTC")
print(time.localtime(),"\n")

print("set pico clock from DS1307 and print time from internal pico clock") 
machine.RTC().datetime(ds1307rtc.datetimeRTC)
print(time.localtime())

ーーーーーーーーーーーーーーーーーーーーーーーーー

なんとなくわかってきました。

 

■PICOではなくラズパイでのRTC使用

 

出典:

 

コマンドでRTC時刻設定、RTC読み出し、システムクロック設定とな。

そもそもラズパイにはシステムクロックやNTPがあるから、

わざわざPythonでどうのこうのではないのでしょうね・・・

もしNTPに接続できない「非ネット環境」でラズパイを使いたいならば、

一度だけネット接続してNTP接続にてシステムクロックを時計合わせし、

RTCにシステムクロックを書き込んでから、ネットから外して使うという手順か!

 

■動作確認

ラズパイ3B+に直載せです。

GPIOを拡張基板で引き出して結線したら、I2Cを認識できませんでした。

ターミナルから

 i2cdetect -y 1

により、システムが0X68にUUを認識していることを確認できました。

同じく、ターミナルから、

 timedatectl

により、RTCがUniversalTimeと一致していることを確認できました。

Raspberry Piでは通常、RTCに世界協定時を設定して利用する、ということなので、

なにもしなくてもこれで完了しました。

Python使いませんでした。

 

電池を抜いたり、電池消耗しない限り、このまま使い続けられるはずです。

GPIO拡張ボードのSCL、SDAへの接続ではうまくいかなかったので、

別途再挑戦予定です。

 

以上