Raspberry pi реальное время

Сверхточный Raspberry PI Stratum 1 NTP сервер

В этой статье я расскажу, как собрать Stratum 1 NTP сервер на Raspberry PI для синхронизации времени за скромную сумму и навсегда забыть о проблемах, связанных с не совпадающим временем на всех ваших устройствах. А самое главное, он будет давать результат на два порядка точнее, чем обычный сервер.

В предыдущей статье, посвященной синхронизации времени по радио и СРНС (системы радионавигационной связи), я не успел рассказать про выбор приёмника GPS / ГЛОНАСС с выходом PPS. Между тем от этого зависит точность приёма сигнала, величина может составить от одной миллисекунды до нескольких микросекунд и зачастую это имеет решающее значение.

Для самого точного приема сигнала времени нужен приёмник GPS / ГЛОНАСС с выходом PPS. Дело однако в том, что на российском рынке не просто раздобыть устройство с такими характеристиками по доступной цене. Много таких моделей давно уже перестали выпускать, а в заброшенных интернет магазинах с версткой 1990-х остались лишь их описания с предложением подписаться на уведомление при поступлении товара.

Полный список протестированного GPS оборудования можно найти на GitLab ресурсе NTPSec. Не трудно заметить, что незначительное число представленных в списке устройств имеют отметку 3-4 звезды и опцию PPS. Таким образом, в шорт-лист попадают следующие приёмники.

  • Garmin GPS-18, не USB *** (приблизительная цена 10 тыс. р.)
  • GlobalSat MR-350P ****
  • Jackson Labs FireFly-II ***
  • Magellan Thales AC12 ***
  • Motorola Oncore GT+ ***
  • Navisys GR601-W ****
  • SkyTraq SKG16B ****
  • Trimble Lassen IQ ***
  • u-blox ANTARIS LEA-4T ***
  • u-blox EVK 6H ****
  • u-blox LEA SQ ****

4* Отличная производительность: gpsd распознает приёмник быстро и надежно, а отчеты сформировано полностью и правильно.

3* Хорошая производительность: gpsd с незначительными проблемами или задержкой распознаёт устройства, но отчеты сформировано полностью и правильно.

Если вас пугает цена этих моделей, а также нет большого желания возиться с железками, можете не читать дальше. Приемник, подключенный к серверу по USB, или RS232 интерфейсу обеспечит гораздо большую точность определения времени, чем NTP сервер, работающий по tcp/ip. Но если путь самурая вам не чужд, тогда давайте собирать свой Raspberry PI NTP сервер с GPS синхронизацией времени.

Собираем Raspberry PI

Итак: берем следующие компоненты для нашего микро сервера.

  1. Плата Raspberry Pi 4 Model B, 4 GiB ОЗУ (6200 руб.);
  2. Корпус, например такой (890 руб.);
  3. Micro SD карта на 32 GiB, можно и 16 GiB; (540 руб.)
  4. GPS модуль на чипе u-blox NEO-M8 (1700 руб. с антенной);
  5. GPS антенна на 15 dB;
  6. Паяльник.

Вообще-то, u-blox NEO-M8 оснащен UART интерфейсом, но для PPS выхода необходимо припаять pin-3 на GPS модуле к соответствующему GPIO коннектору на плате Raspberri Pi. Модуль швейцарской компании завоевал популярность у специалистов и это не случайно, характеристики говорят сами за себя.

  • Поддерживаемые СРНС: BeiDou, Galileo, GNSS; GPS/QZSS, GLONASS;
  • Напряжение питания: 2.7. 3.6 В;
  • Интерфейсы: UART, USB, SPI, DDC, I2C;
  • Поддерживаемые протоколы: NMEA 0.183 version 4.0, UBX (binary), RTCM 2.3;
  • Чувствительность при обнаружении: -167 дБм;
  • Чувствительность при слежении: -160 дБм;
  • Время холодного старта: 26 с;
  • Время горячего старта: 1.5 с;
  • Потребляемая мощность: 35 мВт;
  • Рабочая температура: -40. +85 °С;
  • Размеры: 16х12.2х2.4 мм

В такой конфигурации с новейшим оборудованием примерная общая цена Raspberry PI в собранном виде составит 9330 руб. Можно сэкономить, купив Raspberry PI 3, или четверку с 2 GiB ОЗУ. Можно еще сэкономить на GPS чипе, u-blox NEO-6M с антенной стоит около 650 руб. Тогда цена NTP сервера упадет до 5500 руб.

GPS/Глонасс модуль UBLOX NEO 8M

Может возникнуть вопрос, для чего нужны все эти капиталовложения и какую точность обеспечивает тот, или иной способ синхронизации времени. Небольшая сводная табличка для справки.

Kernel PPS (KPPS) отличается от PPS тем, что использует функцию ядра Linux / Unix для точной временной отметки изменения состояния в строке PPS. Обычный же PPS реализован в user-space. Если ядро Linux поддерживает KPPS через API RFC 2783, gpsd воспользуется им для увеличения точности.

Во многих дистрибутивах Linux имеется пакет pps-tools, который обеспечивает поддержку KPPS и устанавливает timepps.h заголовочный файл. Обязательно установите этот пакет.

Таким образом, подключив GPS приёмник с PPS выходом по USB мы получаем 300-кратное повышение точности синхронизации времени. Чтение с чипа GPS на плате в режиме KPPS даёт прирост точности еще на два порядка.

Будем откровенны — не все из нас умеют пользоваться паяльником, далеко не каждый пользуется этим инструментом регулярно. В таком случае имеет смысл поискать модуль GPS, не требующий пайки контактов.

Raspberry Pi GPS/RTC Expansion Board

Таких плат мало, и стоят они дорого. Разницу в цене вполне окупит приобретение паяльника и трудозатраты.

Установка ОС

Существует Raspberry PI OS, а. k. a. Raspbian, можно просто пойти по ссылке, скачать свежую версию и установить её. Многие так и делают, но давайте вспомним, что Raspberry PI 4 поддерживает 64-битную операционную систему, в то время как Raspberry PI OS пока имеет лишь 32-битные модификации Debian Linux для архитектуры Arm.

Существует такая точка зрения, что на 64-битная ОС неоправдана на Raspberry PI 4, так как нет возможности обеспечить прирост производительности из-за особенностей архитектуры и сборки. Мне эта точка зрения представляется сомнительной, об этом уже писали на Хабре — 64-битная ОС быстрее.

Существует порт Debian Linux для архитектуры arm64, однако дистрибутив Убунту для Raspberry PI имеет внятную страницу и инструкцию. На странице находим дополнительное подтверждение тому, что лучше выбрать 64-битную ОС.

Инвентарь для установки:

  • Raspberry Pi 4;
  • USB-C кабель питания для Pi 4;
  • Micro SD карта с установочным образом Убунту;
  • Монитор с выходом HDMI;
  • Кабель MicroHDMI;
  • USB клавиатура.

Следующий этап — запись установочного образа на Micro SD карту. Если у вас под рукой нет специализированной утилиты и программы под эти цели, в простейшем случае достаточно.

Точное название устройства видно в выводе dmesg при обнаружении нового устройства.

Вставив Micro SD карту, подключив HDMI-монитор, USB-клавиатуру, и кабель питания загружаетесь в Ubuntu Server на Raspberry Pi. Имя пользователя и пароль по умолчанию ubuntu.

Настройка NTP сервера

    Если Raspberry PI включен в консольном режиме (headless), то для начала необходимо определить IP адрес устройства. С рабочей станции наберите следующую команду.

Ели же Pi подключен к HDMI монитору и USB клавиатуре, пропустите шаги 1-2 и переходите сразу к установке пакетов.
Подключитесь по ssh

Установите необходимые пакеты.

  • Настройте Wi-Fi соединение с помощью wpasupplicant.
  • В Linux UART0 интерфейс Pi представлен файлом устройства /dev/ttyAMA0. Для того чтобы освободить UART0 интерфейс для GPS приёмника нужно поменять параметры загрузки ядра Linux. Необходимо отключить console=ttyAMA0,115200, заменив на console=tty1. Для этого в файле /etc/default/grub надо поменять GRUB_CMDLINE_LINUX_DEFAULT. Если существует файл, /boot/config.txt, в нем также можно задать те же опции.

    Raspberry Pi 4 имеет 6 UART-ов

  • Источник сигнала времени Погрешность
    GPS с атомными часами ±50 nSec
    KPPS ±1 μSec
    PPS ±5 μSec
    Интерфейс USB 1.1 ±1 mSec
    Интерфейс USB 2.0 ±100 μSec (100000 nSec)
    NTP по сети
    Название Тип Устройство Назначение
    UART0 PLO11 /dev/ttyAMA0 вторичный (Bluetooth)
    UART1 mini UART /dev/ttyS0 основной
    UART2 PLO11
    UART3 PLO11
    UART4 PLO11
    UART4 PLO11

    По умолчанию UART2-5 выключены.

    Как видно из названия, UART0 — полноценный серийный порт и он имеет более высокую производительность, чем обрезанный UART1, он же mini UART. Поэтому будет не лишним перевести Bluetooth на UART1 с тем, чтобы основной поток данных шел через UART0. Для этого в /etc/default/grub, или /boot/config.txt ставим enable_uart=1.
    В файле /etc/defaults/gpsd следует выставить.

    Запустите, или перезапустите gpsd.

    Проверка работы модуля GPS.

    Отредактируем файл /etc/ntp.conf.

    Все строки, содержащие сетевые публичные Stratum 1, 2 NTP сервера (такие, как pool [0-9].subdomain.pool.ntp.org) следует закомментировать, чтобы использовать лишь GPS/PPS источники данных.

    Верхняя запись NTP0 указывает на универсальный источник времени, доступный почти на всех устройствах GPS. Нижняя запись NTP1 определяет гораздо более точный PPS источник.
    Перезапустите ntpd

    Источник

    Controlling the Raspberry Pi RTC Module – I2C Real Time Clock

    The Raspberry Pi does not save the date permanently. With the help of the Raspberry Pi RTC (Real Time Clock) module DS1307 you have a real-time clock – regardless of an existing internet connection. This is an advantage in many applications that require a timestamp but cannot be connected to the Internet. Especially for outdoor Pi’s and logging systems, it is important to know the exact date and time.

    This tutorial is about installing a real-time clock (RTC) and synchronizing the system time of Linux/Raspbian.

    Required Hardware Parts

    Alternatively, the RTC DS3231 module should also work, but I have not (yet) tested this with it.

    Preparation

    The Tiny RTC modules are actually made for the Arduino, whose IO pins work at 5V. Since the GPIOs of the Raspberry Pi only work at 3.3V and a higher voltage can damage them, we have to remove two resistors from the board.

    On the back are the two resistors (R2 and R3) which are removed. To do this, we heat the fastenings with the soldering tip. In addition, pin strips can be soldered, which are usually included. We only need the side with 7 pins (right):

    The resistors R2 and R3 must be removed not to damage the Raspberry Pi with a too high voltage.

    Alternatively, a Logic Level Converter (like here) could be interposed.

    Connection of the Raspberry Pi RTC I2C Module

    The module is connected via I²C interface. For this, we use the right pin side (which has 7 pins), because in the offline mode of the Raspberry the current is to be drawn from the battery so that the clock does not stop. Other modules may only have a pin strip. The assignment is as follows:

    RTC Module Raspberry Pi
    SCL GPIO 3 / SCL (Pin 5)
    SDA GPIO 2 / SDA (Pin 3)
    VCC / 5V 5V (Pin 2)
    GND GND (Pin 6)

    The RTC Modules differ slightly from the structure, so the following picture should only be taken as a guide. It is important that the connected pins are correct:

    Raspberry Pi RTC Software

    Before we can really get started, it must be ensured that all packages and package sources are up to date, so we update them first and then install the I2C software:

    Afterwards, the I2C bus has to be activated, if that’s not already done:

    Activate everything under “Advanced Options”> “I2C” (simply confirm with Yes). A restart may be necessary.

    Now we edit the modules file

    and add the missing entries at the end:

    You save and exit with CTRL + O, CTRL + X.

    To activate the modules, they must be loaded:

    We can now see whether the RTC module was recognized by I2C (the parameter -y 1 indicates that it is Rev.2. Only that the first Raspberry Pi corresponds to Revision 1):

    You should see the following output:

    The module is therefore recognized and can be queried using i2cget -y 1 0x68 . Since a hex code is difficult to read, we enter the module as a new I2C device:

    Then we can simply read the time using sudo hwclock -r . You can get the local time of the system with date .

    For me, the real-time clock was not set correctly (January 1, 2000), which is why I had to set it first. Since the local system time is correct (automatically accessed via an NTP server), I have synchronized it as follows (by the way, all commands can be found in the hwclock documentation):

    If you want to change the system time (and time zone!), You should do this using sudo raspi-config , before you synchronize the times.

    In order to set the system time automatically with every restart, we have to write a set command in the autostart. To do this, we edit the file:

    The following two lines are added before exit 0 :

    After a restart, the correct time should now be read and set from the Raspberry Pi RTC module – without any internet connection.

    Источник

    Raspberry Pi для домашней автоматизации. Часы реального времени

    У Raspberry Pi нет собственных часов реального времени, поэтому его синхронизация происходит из интернета через NTP-сервер точного времени. С одной стороны ничего страшного в этом нет, если Raspberry Pi постоянно находится online. Однако при работе в закрытой или локальной сети, где нет NTP-серверов, системное время будет некорректным.

    А собственно для чего нужно точное время в подобных устройствах? Дело в том, что в автоматике, особенно промышленной, синхронизации времени является одной из приоритетных задач. Точное время необходимо для ведения ретроспективы событий, фиксации моментов аварийных процессов, построения графиков параметров.

    Синхронизация времени, кроме NTP-сервера, может выполняться с помощью сигналов точного времени, транслируемых через радиостанции или спутниковые навигационные системы. Например, на современных электрических подстанциях, где фактически вся релейная защита, автоматика, телемеханика сейчас построена с применением микропроцессорных средств, завязанных в единую сеть, синхронизация времени выполняется обычно с помощью спутников GPS-навигации, обеспечивающих высокую точность (погрешность не хуже 90-340 нс для системы «Navstar» и 700 нс для системы «Глонасс»).

    Но в нашей системе домашней автоматизации такая точность будет излишней, поэтому мы обойдемся без спутниковых систем и применим более простой способ – подключим к Raspberry Pi модуль часов реального времени RTC (Real Time Clock), выполненный на широко распространенном чипе DS1307.

    В качестве такого модуля была выбрана компактная плата Tiny RTC (рис.1).

    Рис.1

    Однако оказалось, что данный модуль работает с напряжением, и, соответственно, уровнями на шине I2C (напомню, что у Raspberry Pi уровни 3,3В). Поэтому из схемы необходимо исключить подтягивающие резисторы R2 и R3 с шины I2C. Функцию этих резисторов будут выполнять подтягивающие резисторы, уже установленные непосредственно в самом Raspberry Pi и подключенные к шине питания 3,3В. Что касается напряжения питания самого модуля Tiny RTC, то оно должно быть .

    Так как в нашей системе домашней автоматизации становится все больше различных датчиков и устройств, подключаемых к портам GPIO Raspberry Pi, то имеет смысл изготовить переходную плату для их подключения. На рис.2 показан вариант такой платы с подключенным датчиком давления BMP085, модулем Tiny RTC и разъемом для шины 1-wire.

    Рис.2

    Будьте очень внимательны при изготовлении переходной платы. Ещё раз обращаю ваше внимание, что питание Tiny RTC выполняется от источника , а всех остальных датчиков от источника 3,3В.

    Да, и еще один очень важный момент, который касается всей системы в целом. Если вы отключаете какие-либо датчики, которые устанавливали на шины I2C или 1-wire ранее, то обязательно закомментируйте их в конфигурационном файле WebIOPi. Иначе web-страницы системы станут недоступны.

    Итак, считаем что модуль Tiny RTC доработан и подключен к питанию и шине I2C, можно приступать к его настройке и интегрированию в нашу систему.

    Открываем файл sudo nano /etc/modules, добавляем к имеющемуся тексту и сохраняем следующие строки:

    i2c-bcm2708
    i2c-dev
    rtc-ds1307
    (рис.3)

    Рис.3

    Открываем файл sudo nano /etc/modprobe.d/raspiblacklist.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, 68DS1307, а 77 – датчик давления BMP085.

    Зная адрес часов, их можно прописать в систему. Для этого необходимо зайти в систему обязательно с правами суперпользователя:

    sudo -s

    echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

    root@raspberrypi: exit

    Теперь можно прочитать время из часов командой sudo hwclock r, а так же записать в часы системное время командой sudo hwclock w. (рис.6)

    Рис.6

    Чтобы время автоматически устанавливалось при старте системы из часов DS1307, необходимо добавить в файл

    sudo nano /etc/rc.local

    echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
    sudo hwclock –s

    Располагать указанные строки в файле rc.local нужно до строки exit 0 (рис.7)

    Рис.7

    Осталось перезапустить систему командой sudo reboot и мы получим автономную синхронизацию системных часов Raspberry Pi из модуля Tiny RTC.

    Категория: | Просмотров: 13337 | Добавил: Admin | Теги: | Рейтинг: 5.0/1 |
    Всего комментариев: 10

    # 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

    Источник

    Adblock
    detector