У Raspberry Pi нет собственных часов реального времени, поэтому его синхронизация происходит из интернета через NTP-сервер точного времени. С одной стороны ничего страшного в этом нет, если Raspberry Pi постоянно находится online. Однако при работе в закрытой или локальной сети, где нет NTP-серверов, системное время будет некорректным.
А собственно для чего нужно точное время в подобных устройствах? Дело в том, что в автоматике, особенно промышленной, синхронизации времени является одной из приоритетных задач. Точное время необходимо для ведения ретроспективы событий, фиксации моментов аварийных процессов, построения графиков параметров.
Синхронизация времени, кроме NTP-сервера, может выполняться с помощью сигналов точного времени, транслируемых через радиостанции или спутниковые навигационные системы. Например, на современных электрических подстанциях, где фактически вся релейная защита, автоматика, телемеханика сейчас построена с применением микропроцессорных средств, завязанных в единую сеть, синхронизация времени выполняется обычно с помощью спутников GPS-навигации, обеспечивающих высокую точность (погрешность не хуже 90-340 нс для системы «Navstar» и 700 нс для системы «Глонасс»).
Но в нашей системе домашней автоматизации такая точность будет излишней, поэтому мы обойдемся без спутниковых систем и применим более простой способ – подключим к Raspberry Pi модуль часов реального времени RTC (Real Time Clock), выполненный на широко распространенном чипе DS1307.
В качестве такого модуля была выбрана компактная плата TinyRTC (рис.1).
Рис.1
Однако оказалось, что данный модуль работает с напряжением, и, соответственно, уровнями на шине I2C5В (напомню, что у Raspberry Pi уровни 3,3В). Поэтому из схемы необходимо исключить подтягивающие резисторы R2 и R3 с шины I2C. Функцию этих резисторов будут выполнять подтягивающие резисторы, уже установленные непосредственно в самом Raspberry Pi и подключенные к шине питания 3,3В. Что касается напряжения питания самого модуля TinyRTC, то оно должно быть 5В.
Так как в нашей системе домашней автоматизации становится все больше различных датчиков и устройств, подключаемых к портам GPIO Raspberry Pi, то имеет смысл изготовить переходную плату для их подключения. На рис.2 показан вариант такой платы с подключенным датчиком давления BMP085, модулем Tiny RTC и разъемом для шины 1-wire.
Рис.2
Будьте очень внимательны при изготовлении переходной платы. Ещё раз обращаю ваше внимание, что питание Tiny RTC выполняется от источника 5В, а всех остальных датчиков от источника 3,3В.
Да, и еще один очень важный момент, который касается всей системы в целом. Если вы отключаете какие-либо датчики, которые устанавливали на шины I2C или 1-wire ранее, то обязательно закомментируйте их в конфигурационном файле WebIOPi. Иначе web-страницы системы станут недоступны.
Итак, считаем что модуль Tiny RTC доработан и подключен к питанию и шине I2C, можно приступать к его настройке и интегрированию в нашу систему.
Открываем файл sudonano/etc/modules, добавляем к имеющемуся тексту и сохраняем следующие строки:
i2c-bcm2708
i2c-dev
rtc-ds1307 (рис.3)
Рис.3
Открываем файл sudonano/etc/modprobe.d/raspi-blacklist.conf и закомментируем в нем все строки (рис.4)
Рис.4
Устанавливаем i2c-tools:
sudo apt-get install i2c-tools
Перезапускаем систему командой sudo reboot
Далее необходимо выяснить адрес Tiny RTC, а точнее часов DS1307 на шине I2C. Сделать это можно командой
sudo i2cdetect -y 1
Должна появиться вот такая табличка (рис.5)
Рис.5
С высокой вероятностью могу утверждать, что у DS1307 будет адрес 68. Хотя возможны исключения. На приведенном выше рисунке адрес 50 – это ППЗУ 24С32 которая так же установлена в модуле Tiny RTC, 68 – DS1307, а 77 – датчик давления BMP085.
Зная адрес часов, их можно прописать в систему. Для этого необходимо зайти в систему обязательно с правами суперпользователя:
Присоединюсь к TomaTLAB DS3231 действительно точнее DS1307 так как осуществляется термокомпенсация кварца отставания на 2 сек/год и еще плюс этой микросхемы она прекрасно работает от 3.3 вольт, соответственно отпадает необходимость согласования уровней. У меня с raspberrypi3 прекрасно работает
Еще забыл. Была у меня какая-то ерунда пока я не прописал с помощью timedatectl в часики время в локальной TZ, хотя оно меня и пыталось отговорить от такого опрометчивого решения
Я к тому, что несколько неудачно выразился, в самой 1307 конечно ничего плохого нет. Имел ввиду модули от китайских товарищей. Кварцы, мягко говоря оставляют желать. Тут правда как попадется.
У меня во второй версии системы (описание скоро появится на сайте) часы на DS1307 собраны прямо на общей кросс-плате и пока точность нареканий не вызывает. Кварцы применяю "часовые", выпаивал лет 10 назад из неисправных плат от электросчетчиков. Похоже, ещё made in USSR
Это примерно как ENC28J60 и ардуино. Многие гонят на модули и микруху, что де, виснет постоянно веб-сервер на ней. Ну да, есть известная проблема с известной библиотекой и размером буфера. Ну дык, а куда ж со свиным рылом в калашный ряд У меня вот на этих модулях распрекрасно Modbus-TCP бегает. С ntp-запросами тоже проблем не было.
Чет не получается установить часики root@raspberrypi:~# sudo apt-get install i2c-tools Pakketlijsten worden ingelezen... Klaar Boom van vereisten wordt opgebouwd De status informatie wordt gelezen... Klaar i2c-tools is reeds de nieuwste versie. 0 pakketten opgewaardeerd, 0 pakketten nieuw geц╞nstalleerd, 0 te verwijderen en 37 niet opgewaardeerd. root@raspberrypi:~# sudo i2cdetect -y 1 Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory