Raspberry Pi にリアルタイムモジュールDS3234を搭載する方法
Raspberry Piを再起動すると、
システム日時がずれる問題があります。
それは、RTC(リアルタイムクロック)が
搭載されていないために起こります。
リアルタイムモジュールは
RTCが組み込まれてものです。
リアルタイムモジュールは、
電源が切れてもバッテリで時刻を刻み続けれるため、
再起動後でも正しい日時を維持することができます。
システム日時がずれる問題は、
RTCモジュールを搭載することで解決できます。
ここでは、RTC(リアルタイムモジュール)
DS3234SNの搭載から設定方法まで
紹介しています。
一部リンクにはアフィリエイトが含まれます
<【PR】使用するRTCモジュールはこちら>
DS3234SN リアルタイムモジュールの使い方
RTCモジュール(DS3234)と
Raspberry Pi 4Bの接続をします。
手順は次の通りです。
①リアルタイムモジュールの配線
②I2C 通信を有効にする
③RTCモジュールの接続確認
④ライブラリのインストール
⑤起動するたびにRTCモジュールから時刻を合わせる
①リアルタイムモジュールの配線
DS3234SNとRaspberry Piの接続は
以下の通りです。
- DS3234SNのSCLピンをRaspberry PiのGPIO 5番ピン
- DS3234SNのSDAピンをRaspberry PiのGPIO 3番ピン
- DS3234SNのVCCピンをRaspberry Piの3.3V電源
- DS3234SNのGNDピンをRaspberry PiのGND
4ケ所接続します。
②I2C 通信を有効にする
RTCモジュール(DS3234)は、
I2C 通信を使用するため
I2C 通信を有効にします。
Raspberry Pi の画面左上にある
「ラズベリーパイのマーク」をクリック
→「設定」
→「Raspberry Pi の設定」
の順番に選択すると
Raspberry Pi の設定画面が表示されます。
ここで、I2C 通信を有効にします。
「インターフェイス」をクリックして
インターフェース設定画面を表示します。
①I2C の欄で「有効」を選択します
②最後に「OK」ボタンで終了です。
これで I2C通信が有効になります。
③RTCモジュールの接続確認
RTCモジュールが正常に接続されているか確認します。
DS3231 RTCのI2Cアドレスを確認する事で
正常に接続されているかを確認できます。
DS3231 RTCのI2Cアドレスを確認する方法は、
以下の手順で行うことができます。
- Raspberry PiにDS3231 RTCを接続し、電源を投入します。
- Raspberry Piのターミナルを開き、以下のコマンドを入力します。
このコマンドは、I2Cデバイスを検索し、
アドレスを表示するものです。
sudo i2cdetect -y 1
上記コマンドを実行すると、以下のような結果が表示されます。
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
リアルタイムクロックモジュールが正常な状態は
「68」になります
ここで68が表示されなかった場合は
クロックモジュールとラズパイの
配線を確認してください。
上記の結果の中で、”68″と表示されている箇所が
DS3231 RTCのI2Cアドレスです。
この場合、I2Cアドレスは0x68であることがわかります。
④ライブラリのインストール
DS3234SNをRaspberry Piに接続した後、
以下の手順で使用できます。
必要なライブラリーをインストールします。
sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install adafruit-circuitpython-ds3231
Raspberry PiのI2CバスとDS3231 RTCを
Pythonで操作するためのパッケージとして
「smbus2」と「RPi.GPIO」があります。
「smbus2」は、I2Cバスを制御するためのパッケージで、
「RPi.GPIO」は、GPIOピンを制御するためのパッケージです。
これらのパッケージは、
以下のコマンドでインストールできます。
$ sudo apt-get update
$ sudo apt-get install python-smbus
$ sudo apt-get install python-rpi.gpio
順番に実行します。
続行しますか?「Y/n」と出てきますが
「Y」を押して、継続してインストールしていきます。
インストールが完了したら、
PythonのプログラムでDS3231を操作することができます。
⑤起動するたびにRTCモジュールから時刻を合わせる
起動時にラズパイ時刻を
RTC時刻に更新するための処理を行います。
/boot/内にあるconfig.txtに
RTC時刻に更新するためのコードを追加します。
config.txtを編集するには、
管理者権限が必要になります。
管理者権限にします。
$ xhost +
$ sudo pcmanfm
コマンドを実行するとウインドウが開き、
編集したいファイルを選択します。
場所は、 /boot/config.txt を開きます。 config.txtの編集画面になったら 最後に次のコードを追加します。
[all]
dtoverlay=i2c-rtc,ds3231
以下の様にコードを追加して
保存します。
再起動すると
RTCモジュールから時刻がシステム時間に読みこまれます。
時刻をあわせる
インターネットにつながっていれば
自動で時刻が更新されますので
特に何もする必要はありません。
手動で時刻を変更する
インターネット環境がない場合は
手動で時刻を設定します。
①NTPを無効にして時刻を設定します。
(無効でないと設定できません)
②2行目のコマンドで時刻を設定します。
③3行目のコマンドでNTPを有効化します。
今回は、
2023年4月19日、15時00分に設定していまが、
自分の設定したい時刻を入力してください。
$ sudo timedatectl set-ntp false
$ sudo timedatectl set-time "2023-04-19 15:30:00"
$ sudo timedatectl set-ntp true
timedatectlコマンドが見つからない場合、
systemd-timedatedサービスが
インストールされているか確認する必要があります。
以下のコマンドを使用して、
systemd-timedatedサービスが
インストールされているかどうかを確認できます。
systemctl status systemd-timedated
もしインストールされていない場合は、
以下のコマンドを使用してインストールすることができます。
sudo apt-get update
sudo apt-get install systemd-timesyncd
<【PR】今回使用したRTCモジュールはこちら>