【Raspberry Pi 3 Model B】RTCモジュール(DS1307)を接続する

シングルボードコンピュータ(SBC)

目的

Raspberry PiにRTCモジュールを接続してハードウェアクロック[1]Linuxには「システムクロック」と「ハードウェアクロック」と呼ばれるふたつの時計があります。として適用します。

基本的にRaspberry Pi OS(Linuxベース)機能の範囲で認識・動作させることができます。本記事の範囲ではプログラミングも必要ありません。

情報

Raspberry Pi

Raspberry Piについては以下の記事を参照ください。

【Raspberry Pi 3 Model B】環境構築 その1 (OSインストールまで)
目的シングルボードコンピュータ(SBC)学習にあたって、Raspberry Piの開発環境構築を行います。※といってもOSインストールまでなら、現状ではかなり洗練化が進んでおり難しいことはほとんどありません。Ras...
【Raspberry Pi 3 Model B】環境構築 その2 (初期設定、解像度設定、SSH有効化、他)
以下記事の続きです。前回記事ではRaspberry Pi OSが起動するところまで紹介しました。引き続き、表示されるポップアップ内容に従い初期設定を行います。あわせて画面解像度の設定とSSH有効化などについても説明します。...

RTCモジュール

使用するI2C接続のRTCモジュールは以下の記事で使用しているものと同じものです。

【C-First】RTCモジュール(DS1307)で時刻を計時する
目的C-FirstとRTCモジュール(DS1307)をI2C接続し、時刻を計時します。また、時刻情報をOLEDディスプレイに表示し毎秒更新します。※当該RTCモジュールにはEEPROMも実装されています。EEPROMの制御は別の機会に...
【Raspberry Pi Pico】RTCモジュール(DS1307)で時刻を計時する
目的Raspberry Pi PicoとRTCモジュール(DS1307)をI2C接続し、時刻を計時します。また、時刻情報をOLEDディスプレイに表示し毎秒更新します。実は以下の記事でC-Firstボードで同様の対応をしてい...

ここでも改めて紹介しておきます。

Amazon.co.jp: Ren He DS1307 RTC リアルタイムクロックモジュール I2C RTC AVR Arduino用 5個: DIY・工具・ガーデン
オンライン通販のAmazon公式サイトなら、Ren He DS1307 RTC リアルタイムクロックモジュール I2C RTC AVR Arduino用 5個をDIY・工具・ガーデンストアで、いつでもお安く。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常送料無料。

ピンヘッダは実装されていませんので、別途実装しました。左右に端子がありますが、私はとりあえずP2側にのみピンヘッダを付けました。

Amazon | ジェネリック Voocye  10pcs シングル40ピン オス+メスストレートタイプ ピンヘッダー PCB用 2.54 mm | 基板 | 産業・研究開発用品 通販
ジェネリック Voocye  10pcs シングル40ピン オス+メスストレートタイプ ピンヘッダー PCB用 2.54 mmが基板ストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。

また、バックアップ用の電池も購入しました。指定のLIR2032です。この電池は二次電池で本モジュールに5V給電中は充電されます。

Amazon | リチウムイオン電池 コイン形 ボタン電池 二次電池 LIR2032 充電式 3.7V 45mAh EEMBメーカー直販 4個入 | EEMB | 乾電池
リチウムイオン電池 コイン形 ボタン電池 二次電池 LIR2032 充電式 3.7V 45mAh EEMBメーカー直販 4個入が乾電池ストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。

尚、同型・同電圧であってもCR2032等の一次電池は絶対に使用しないでください。最悪は発火など大きな事故となる可能性もあります。

ロジックレベル変換基板

Raspberry PiのGPIOは3.3Vですが、DS1307は5Vですのでレベル変換が必要になります。Picoの記事同様、以下のモジュールを使用しました。

Amazon.co.jp: HiLetgo 10個セット IIC I2C ロジック レベル 変換 双方向モジュール 5V Arduinoに対応 : 産業・研究開発用品
Amazon.co.jp: HiLetgo 10個セット IIC I2C ロジック レベル 変換 双方向モジュール 5V Arduinoに対応 : 産業・研究開発用品

Raspberry Pi 3 Model Bとの接続

Raspberry PiとRTCモジュールの接続は以下の通りです。

※ピン配置図は公式サイトより引用

ブレッドボードとジャンパーワイヤーを使用して接続した実際の様子は以下の通りです。今回の記事には関係がないOLEDディスプレイモジュールやGPSのUSBドングルも接続されています。

今回使用したジャンパーワイヤー、ブレッドボードは以下のものになります。

Amazon | 【おだ商店】 ブレッドボード 『830P基板 3個 400P基板 2個の合計5個セット』 | インターフェイス | 産業・研究開発用品 通販
【おだ商店】 ブレッドボード 『830P基板 3個 400P基板 2個の合計5個セット』がインターフェイスストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。

※上記のものはコスパ重視のものです。品質重視の場合は以下をお勧めします。

Amazon | サンハヤト SAD-101 ニューブレッドボード | 産業・研究開発用品 | 産業・研究開発用品 通販
サンハヤト SAD-101 ニューブレッドボードが産業・研究開発用品ストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。
ブレッドボード・ジャンパーワイヤー 40ピン 20cm Emith デュポンケーブル Arduino Raspberry piに適用 ジャンパー線 6本セット
商品説明 電子プロジェクト、Arduino製品、ブレッドボード用に大変便利 実験用ボードのピンを拡張、実験プロジェクトを増やすために使用されています 溶接なしで回路テストを実行できます 端子が破損していない場合は再使用できます。損傷した場合ははんだ付けにも使用できます 6本セットブレッドボードワイヤです 商品特徴: 材...
Amazon.co.jp: サムコス ジャンパーワイヤー 130本セット ジャンパー線 コネクタライン ワイヤキット オス-オス forブレッドボード フレキシブル ブレッドボード・Arduino・DIY用 : 産業・研究開発用品
Amazon.co.jp: サムコス ジャンパーワイヤー 130本セット ジャンパー線 コネクタライン ワイヤキット オス-オス forブレッドボード フレキシブル ブレッドボード・Arduino・DIY用 : 産業・研究開発用品

※ジャンパーワイヤーはひとつ目のものだけあれば問題ありません。ふたつ目のものはオス・オスのケーブルが足りなくなったこと及び短めのものも欲しいなと思い別途購入したものです。

設定

I2C機能の有効化

デフォルトではI2C機能が無効になっているため有効化します。

$ sudo raspi-config

DS1307デバイスドライバのロードとI2Cデバイス設定

DS1307デバイスドライバのカーネルモジュールをロードします。

$ sudo modprobe rtc-ds1307

I2Cスレーブアドレスを指定し、設定を行います。

$ sudo sh -c "echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device"

動作確認

正しく認識されていれば、以下のようなカーネルメッセージが出力されます。

$ dmesg
※中略
[  258.369913] rtc-ds1307 1-0068: registered as rtc0
[  258.371615] rtc-ds1307 1-0068: setting system clock to 2022-01-09T15:31:13 UTC (1641742273)
[  258.373497] i2c i2c-1: new_device: Instantiated device ds1307 at 0x68

上記メッセージの通りシステムクロックからRTCに自動的に時刻同期が行われます。

$ sudo hwclock -r
2022-01-10 16:04:14.212219+09:00

OS起動時にRTC有効化する

OS起動時にRTC有効化が行われるように設定を行います。

/etc/modulesに「rtc-ds1307」を追加します。

$ sudo vi /etc/modules

以下は追加例です。

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

i2c-dev
rtc-ds1307

次にI2Cスレーブデバイスの設定を追加します。/etc/rc.localに追加するということも考えられますが、デフォルトではネットワークがつながらないとrc.localが実行されない模様です。raspi-configでネットワーク接続の条件を外すこともできるようですが、今回はsystemdを使用します。

まず、I2Cスレーブデバイスの設定を行うシェルスクリプトを作成します。

$ sudo vi /usr/local/sbin/rtc-setting
#!/bin/sh -e
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
hwclock --hctosys
exit 0

3行目の「hwclock –hctosys」はハードウェアクロックでシステムクロックを同期させるためのコマンドです。

パーミッションを設定します。

$ sudo chmod 755 /usr/local/sbin/rtc-setting

次に、Unitファイルを作成します。

$ sudo vi /etc/systemd/system/rtc.service
[Unit]
Description=RTC setting
After=systemd-modules-load.service
[Service]
ExecStart=/usr/local/sbin/rtc-setting
Restart=on-failure
[Install]
WantedBy=multi-user.target

パーミッションを設定します。

$ sudo chmod 644 /etc/systemd/system/rtc.service

試しに起動してみます。

$ sudo systemctl start rtc.service

ステータスを確認します。問題なければ以下例のように表示されます(最後の2行がポイント)。

$ systemctl status rtc.service
● rtc.service - RTC setting
     Loaded: loaded (/etc/systemd/system/rtc.service; disabled; vendor preset: enabled)
     Active: inactive (dead)

 1月 10 16:03:17 raspberrypi systemd[1]: Started RTC setting.
 1月 10 16:03:21 raspberrypi systemd[1]: rtc.service: Succeeded.

OS起動時に自動的にサービス起動するように有効化します。

$ sudo systemctl enable rtc.service
Created symlink /etc/systemd/system/multi-user.target.wants/rtc.service → /etc/systemd/system/rtc.service.

OSを再起動して問題ないことを確認できれば完了です。

$ sudo reboot

注釈

注釈
1 Linuxには「システムクロック」と「ハードウェアクロック」と呼ばれるふたつの時計があります。

コメント

タイトルとURLをコピーしました