リアルタイムクロックモジュールDS3231の使い方

ds3231module.jpg

I2Cクラスが使えるようになったので、OLED以外にも手持ちのI2Cデバイスを試してみます。
今回は「DS3231」を使ったリアルタイムクロックモジュールです。
実は前回の写真にも、ちょこっと登場しています。

DS3231はバッテリバックアップつきの時計モジュールで、Aliexpressで100円程度で入手できます。ちなみにバッテリは交換不可能です。

ds3231-aliex.jpg

接続は、以下の写真のように、5つのピンソケットのうち4本を使ったI2Cです。
(左から、+、SDA、SCL、NC、-)

ds3231.jpg

マニュアルはネットでダウンロードできます。
単純なレジスタアクセス方式です。レジスタの一覧を以下に示します。

ds3231man.png

時計機能のほか、アラームが2セットと温度計が搭載されています。
時刻情報は10進数形式(8bitを4bit+4bitに分け、それぞれ10の位と1の位を表す)になっています。
例えば10進の「12」は、レジスタ上では16進数で「0x12」になっています。

MicroPythonでのドライバを書いてみました。(アラーム関係は省略しています。)

使い方はこんな感じです。

c = DS3231(i2c)
c.write([2018, 5, 30, 23, 30, 45, 3])  # 2018/5/30 23:30:45 Wed
c.read()

DS3231から1秒ごとに情報を取得して、I2C接続したOLEDに表示させればデジタルクロックのできあがりです。
1秒ごとの画面更新はTimerクラスが使えます。

なおOLEDのSSD1306のドライバは、MicroPython付属のものに対して以下のように修正が必要です。

def write_data(self, buf):
    self.i2c.writeto(self.addr, bytearray([0x40]), False)
    self.i2c.writeto(self.addr, buf)

動かしている様子です。

ds3231clock.jpg

コメント