今回はRTCのお話。ラズパイ4はRTCを保持できませんが、それを補うHATが出ています。今回購入したのはこれ。
CR1225コイン電池を使いますので、これも購入しています。
こんな感じのものです。
で、ラズパイ4のUbuntu Server 20.04に使いたいのですが、公式にはRaspberry pi OSにしかインストーラが対応していません。動かないわけではなく、Ubuntu Serverでも動かすのに必要なパッケージが何か説明されていないので失敗するだけです。なので、チャレンジしてみました。
まずは、OSを最新化します。
sudo apt update sudo apt upgrade
次に、インストーラが使うパッケージのうちUbuntu Serverにデフォルトでは入っていないものをインストールします。
sudo apt install lua5.3
sudo apt install libraspberrypi-bin
これで、luaとdtparamが使えるようになります。
あとは公式のインストーラーを導入。
git clone https://github.com/Seeed-Studio/pi-hats.git cd pi-hats/tools/ sudo ./install.sh -u rtc_ds3231
インストールが終わったら、「/boot/config.txt」の中身を見てみます。
cat /boot/config.txt
この中身を「/boot/firmware/usercfg.txt 」に入れます。「/boot/firmware/config.txt」ではないのは、usercfg.txtがconfig.txtにインクルードされておりユーザーがconfig.txtに書き込みたい場合はusercfg.txtに書いてほしいらしいので。
sudo sh -c "echo 'dtoverlay=i2c-rtc,ds3231' >> /boot/firmware/config.txt"
i2c-toolsを入れて、i2cdetectを使えるようにします。
sudo apt install i2c-tools
libi2c-devも入れるらしいです。
sudo apt install libi2c-dev
「/etc/modules」に追記。
sudo sh -c "echo 'rtc-ds1307' >> /etc/modules"
「rtc-ds1307」なのは、以下のコマンドでドライバが「rtc_ds1307」らしいので。
sudo modprobe -c | grep ds3231
ここでシャットダウンしてからDS3231を取り付けます。
sudo shutdown -h now
再起動後、i2cdetectで状態を見てみます。
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: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
0x68のところがUUになっていればいいらしいですが、例えば68だとまだOSが掴んでいないらしいです。
すでに使用できるみたいだったのでhwclockコマンドが動くか確認してみます。
sudo hwclock
現在の日時を確認して、RTCに書き込んでみます。
date
sudo hwclock -w
読み込みができるか確認します。
sudo hwclock -r
これで動くようになりました。本当に動いているかは、「sudo hwclock -v」で確認してください。以下のような出力が表示されます。
hwclock from util-linux 2.34 System Time: 1633395822.903437 Trying to open: /dev/rtc0 Using the rtc interface to the clock. Last drift adjustment done at 1633385585 seconds after 1969 Last calibration done at 1633385585 seconds after 1969 Hardware clock is on UTC time Assuming hardware clock is kept in UTC time. Waiting for clock tick... ioctl(4, RTC_UIE_ON, 0): Invalid argument Waiting in loop for time from /dev/rtc0 to change ...got clock tick Time read from Hardware Clock: 2021/10/05 01:03:44 Hw clock time : 2021/10/05 01:03:44 = 1633395824 seconds since 1969 Time since last adjustment is 10239 seconds Calculated Hardware Clock drift is 0.000000 seconds 2021-10-05 01:03:43.384906+00:00
あとは、systemd-timesyncdサービスとかどうするか考えてください。私は、GPSを使ったNTPサーバーに組み込みたいと思っています。
参考にしたのはこちらです。
wiki.seeedstudio.com
High Accuracy Pi RTC (DS3231) installation in Ubuntu 19.10 in Raspberry Pi 4 Model B Rev 1.1 · GitHub
ntaka206.hatenablog.jp
www.pentacreation.com
qiita.com
qiita.com
qiita.com