Raspberry PI HW Clock DS3231 — Часы реального времени

Все наверняка заметили что Raspberry на борту своей материнской платы не имеет аппаратных часов.
Что в общем то никого не смущает, но иногда бывают моменты когда отсутствие данного модуля может вызвать неудобства и даже сбои в работе определенных сервисов.
Например когда устройство работает без подключения к сети интернет, а точное время необходимо.

Исправить данную ситуацию нам поможет небольшой модуль который имеет у себя все необходимое для удержания точного времени даже без питания самой Raspberry.
Есть масса различных модулей выполняющих данную функцию, но из всей массы мне понравился модуль на основе микросхемы DS3231.

Небольшой экскурс в характеристики:
I2C — передача данных.
TCXO — термокомпенсация работы кварцевого резонатора и кристалла чипа.
Наличие встроенной литиевой батареи.
Очень точные часы реального времени с продолжительной автономной работой.

 

И так подключим наш модуль к Raspberry PI.

На изображении выше можно увидеть все доступные пины которые есть у нас в наличии.
Для подключения нам понадобятся первые 5 пинов это 1-3-5-7-9

 

Итак подключили приступим к настройке.
Подключаемся по SSH и начинаем.
Первым делом включаем I2C для этого необходимо вызвать утилиту raspi-config

raspi-config

Выбираем Interfacong Options

Затем I2C
И активируем
Перезагружаемся

reboot

Теперь установим зависимости и необходимый для работы софт:

apt-get install python-smbus i2c-tools

Проверим что у нас получилось и все ли хорошо

i2cdetect -y 1

Если все в порядке мы увидим следующее:
Наличие цифр 68 говорит о том, что у нас на I2C шине обнаружено устройство.

Перейдем в /boot и отредактируем config.txt нам необходимо добавить в загрузку наше новое устройство, для этого после # Additional overlays and parameters are documented /boot/overlays/README добавим следующее:

# Additional overlays and parameters are documented /boot/overlays/README
dtoverlay=i2c-rtc,ds3231

Перезагрузимся

reboot

Проверим что у нас теперь

i2cdetect -y 1

Мы должны увидеть следующее
Наличие символов UU говорит нам о том что все в порядке.

Теперь удалим эмуляцию аппаратных часов из системы, нам они это больше не понадобится.

apt-get -y remove fake-hwclock

Так же удалим их из загрузки

update-rc.d -f fake-hwclock remove

Так же теперь нам необходимо исправить файл /lib/udev/hwclock-set поскольку мы больше не используем эмуляцию, а реальные часы.
Для этого закоментируем лишнее:

#if [ -e /run/systemd/system ] ; then
#    exit 0
#fi

И было бы неплохо еще заккоментировать все что может в будущем вызвать ошибки:

if [ yes = "$BADYEAR" ] ; then
#    /sbin/hwclock --rtc=$dev --systz --badyear
    /sbin/hwclock --rtc=$dev --hctosys --badyear
else
#    /sbin/hwclock --rtc=$dev --systz
    /sbin/hwclock --rtc=$dev --hctosys

Проверим все ли теперь у нас работает:

hwclock -D -r

Если все ок, то увидим следующее

root@raspberrypi:/lib/udev# hwclock -D -r
hwclock from util-linux 2.29.2
Using the /dev interface to the clock.
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
/dev/rtc does not have interrupt functions. Waiting in loop for time from /dev/rtc to change
...got clock tick
Time read from Hardware Clock: 2019/03/30 21:44:30
Hw clock time : 2019/03/30 21:44:30 = 1553982270 seconds since 1969
Time since last adjustment is 1553982270 seconds
Calculated Hardware Clock drift is 0.000000 seconds
2019-03-30 23:44:29.379679+0200

Теперь проверим что в часах системы:

date

Если время с hwclock -r совпадает с date то все работает хорошо.

Осталось лишь синхронизировать время с NTP сервером для этого делаем к примеру вот так:

ntpdate ntp.time.in.ua

Теперь запишем синхронизированное время в наши аппаратные часы:

hwclock -w

Ну вот и все, наслаждаемся точной работой аппаратных часов.

 

Оставить комментарий

Please be polite. We appreciate that. Your email address will not be published and required fields are marked