5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry PiのRTCを試す

Last updated at Posted at 2021-09-09

1. 背景

Raspberry Piは、標準でRTCを搭載していないため、外部に接続されていないネットワークに繋いで使用する場合は、起動のたびに日付と時刻がリセットされてしまう。

FA用途でRaspberry Pi+Ubuntuの環境を使用することになり、RTCを採用することになったが、Ubuntuのサポートが明記されている製品が見当たらない。そのため、試しに3種類のRTCを入手し、調査することにした。

2. 環境

試した環境は以下の通り。

  • Raspberry Pi 4 Model B (4GB)
  • OS
    • Raspberry Pi OS (32bit)
    • Ubuntu Desktop 21.04 (RPi 4/400)
  • RTC
    • Raspberry Pi用RTCモジュール v1.1
    • Raspberry Pi用RTC(DS1307)
    • Raspberry Pi用高精度RTC(DS3231)

3. 動作結果

先に結論を示す。

Raspberry Pi OSとUbuntuの2種類のOSで、RTCのドライバをインストールして接続した。RTCの機能が確認できたものを 、機能しなかったものを ×と記載している。

No. RTC RasPi OS Ubuntu
1 RTCモジュール v1.1
2 RTC(DS1307) ×
3 高精度RTC(DS3231) ×

このように、Raspberry Pi OSならばどれもドライバが対応しているが、Ubuntuの場合はドライバが対応していないものもある。Ubuntuを採用する場合は、RTCの選択は注意した方が良い。

4. 使用したRTCについて

各RTCの情報と、インストール手順を示す。
インストール方法は製品ドキュメントに記載されているが、予めパッケージのインストールが必要なものや、手順が少し異なっていたものもあった。

4-1. Raspberry Pi用RTCモジュール v1.1

4-1-1. 製品情報

スイッチサイエンスのページ:
Raspberry Pi用RTCモジュール v1.1
2021/9/1に1,067円で購入

製品ページ:
Raspberry Pi RTC Expansion Module v1.1

技術ドキュメント:
DS1307 RTC Module with BAT for Raspberry Pi SKU: EP-0059

4-1-2. インストール手順

(1) RTCをセット
RTCに電池をセットし、電源を切った状態でRaspberry Pi のGPIOに装着する。

(2) 電源を入れて起動

(3) I2Cの有効化
Ubuntuはすでに有効化されているので、本作業は不要。
Raspberry Pi OSのみ実施する。

/boot/config.txtに以下の行を追加する。

dtoverlay=i2c-rtc,ds1307 
dtparam=i2c_arm=on

(4) fake-hwclockの削除
本作業は不要だったが、ドキュメントに記載があったので参考までに紹介する。

fake-hwclockがインストールされている場合、以下の手順で削除する。

sudo apt-get -y remove fake-hwclock
sudo update-rc.d -f fake-hwclock remove

(5) I2Cドライバのロード

以下のコマンドを実行する。

sudo su -
modprobe i2c-bcm2835
modprobe rtc-ds1307
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

(6) firmware/config.txtの修正

/boot/firmware/config.txtに以下の行を追加。

dtoverlay=i2c-rtc,ds1307

(7) hwclockの設定を変更

/lib/udev/hwclock-setを編集して、以下のように書き換える。

      1 #!/bin/sh
      2 # Reset the System Clock to UTC if the hardware clock from which it
      3 # was copied by the kernel was in localtime.
      4 
      5 dev=$1
      6 
      7 # if [ -e /run/systemd/system ] ; then
      8 #     exit 0
      9 # fi
     10 
     11 if [ -e /run/udev/hwclock-set ]; then
     12     exit 0
     13 fi
     14 
     15 if [ -f /etc/default/rcS ]; then
     16     . /etc/default/rcS
     17 fi
     18 
     19 /sbin/hwclock --rtc=$dev --systz
     20 /sbin/hwclock --rtc=$dev --hctosys
  • 7-8行目をコメントアウト
  • 11-17行目を追加

(8) OSを再起動

(9) ドライバの確認

以下のようにコマンドを入力して、このようなメッセージが表示されていればOK。

$ sudo dmesg | grep rtc-ds1307
[    2.430793] rtc-ds1307 1-0068: registered as rtc0
[    2.431828] rtc-ds1307 1-0068: setting system clock to 2021-09-04T07:45:03 UTC (1630741503)

Raspberry PiからRTC本体を外して起動しまうと、手動なり時刻を設定しなおす必要があるので注意。

4-2. Raspberry Pi用RTC(DS1307)

4-2-1. 製品情報

スイッチサイエンスのページ
Raspberry Pi用RTC(DS1307)
2021/9/1に572円で購入

製品ページ
Pi RTC (DS1307)

技術ドキュメント
DS1307 RTC (Real Time Clock) for Raspberry Pi

4-2-2. インストール手順

(1) Luaのインストール

インストーラがLuaを使用しているので、インストールする。

sudo apt install -y lua5.3

(2) ドライバをインストール

以下のコマンドを実行する。

git clone https://github.com/Seeed-Studio/pi-hats.git
cd pi-hats/tools
sudo ./install.sh -u rtc_ds1307

(3) 電源を落としてRTCをセットし、再び起動する

(4) ドライバのインストールチェック

以下のコマンドを実行し、インストールされているドライバを確認する。

./install.sh -l

(5) ハードウェアクロックを表示

以下のコマンドを実行し、ハードウェアクロックの取得ができるか確認する。

sudo hwclock -r

Ubuntuでは以下のメッセージが表示され、RTCが動作していなかった。

$ sudo hwclock -r
hwclock: 既知のいずれの方法を使用しても、ハードウェアの時計にアクセスすることが
できません。
hwclock: Use the --verbose option to see the details of our search for an access method.

4-3. Raspberry Pi用高精度RTC(DS3231)

4-3-1. 製品情報

スイッチサイエンスのページ
Raspberry Pi用高精度RTC(DS3231)
2021/9/1に858円で購入

製品ページ
High Accuracy RTC (DS3231) for Raspberry Pi

技術ドキュメント
DS3231 High Accuracy RTC (Real Time Clock) for Raspberry Pi

4-3-2. インストール手順

基本的な手順は「Raspberry Pi用RTC(DS1307)」と同じ。 (2) ドライバをインストールのコマンド引数だけ異なる。

(1) Luaのインストール

インストーラがLuaを使用しているので、インストールする。

sudo apt install -y lua5.3

(2) ドライバをインストール

以下のコマンドを実行する。

git clone https://github.com/Seeed-Studio/pi-hats.git
cd pi-hats/tools
sudo ./install.sh -u rtc_ds3231

(3) 電源を落としてRTCをセットし、再び起動する

(4) ドライバのインストールチェック

以下のコマンドを実行し、インストールされているドライバを確認する。

./install.sh -l

(5) ハードウェアクロックを表示

以下のコマンドを実行し、ハードウェアクロックの取得ができるか確認する。

sudo hwclock -r

以上

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?