Оглавление:
- Шаг 1. Google Time
- Шаг 2: серверы времени SNTP
- Шаг 3. Получение времени из модуля RTC
- Шаг 4: Пользовательская память RTC
- Шаг 5: внешние модули RTC
- Шаг 6: Регистрация данных
- Шаг 7: Заключение
Видео: NODEMCU Lua ESP8266 с часами реального времени (RTC) и EEPROM: 7 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Правильное время очень важно, если вы хотите вести журнал данных. Есть разные способы узнать время из источников в Интернете.
Вы можете спросить, почему бы не использовать ESP8266, чтобы отслеживать ваше время? Что ж, вы можете, у него есть свои собственные внутренние часы реального времени (RTC), но ESP8266 имеет 3 разных рабочих тактовых частоты - 52 МГц при загрузке, 80 МГц при обычной работе и 160 МГц при повышении. Если вам нужно более точное измерение времени, особенно в течение более длительных периодов, то решение может предоставить внешний RTC. Эти модули также имеют резервную батарею на случай потери питания. RTC не очень точен, поскольку он подсчитывает время, прошедшее с момента его установки, и хотя он может работать для большинства приложений, он может быть недостаточно хорош для критического измерения времени. Можно получить точное время от сервера времени SNTP, с которого при необходимости можно регулярно обновлять RTC.
Примером таких товаров является модуль DS1307 Tiny RTC I2C (см. Выше), который можно приобрести на Ebay и у других поставщиков менее чем за 2 фунта стерлингов. Есть и другие, такие как DS1302 и DS3231, которые работают аналогичным образом и стоят от 99 пенсов и выше.
Модуль DS1307 использует интерфейс I2C и для ESP-01 должен быть подключен как:
Vcc - 3,3 В, Земля - Земля, SDA - D3, SCL - D4
SDA и SCL могут быть подключены к любому из контактов ввода / вывода на более крупных ESP8266 (измените код соответствующим образом). К этому модулю необходимо подключить только левые контакты.
Шаг 1. Google Time
Есть много примеров получения времени от Google, которые выглядят примерно так. Когда вы запускаете программу GoogleTime.lua, вы получаете такой результат:
dofile ("GoogleTime.lua")> Время: пятница, 15 декабря 2017 г., 11:19:45 GMT
Проблема с этим методом заключается в том, что вы получаете время в строковом формате, и вам нужно разделить строку на отдельные биты для часов, минут, секунд и т. Д. RTC принимает время в специальном формате, то есть отметке времени UNIX. С точки зрения непрофессионала, это количество секунд, прошедших с четверга, 1 января 1970 года, до настоящего времени. Эпоха UNIX (1970/01/01 00:00:00) используется большинством компьютерных операционных систем, и прошедшее время сохраняется как 32-битное число со знаком. Это означает, что эта система будет работать до 19 января 2038 года, когда число станет слишком большим для хранения таким образом. Одно из решений - сохранить число как 64-битное, но пока будет достаточно 32-битного метода.
Чтобы установить время 2015, 9 июля, 18:29:49 на внутреннем RTC, вы должны использовать эту строку кода:
rtctime.set (1436430589, 0)
2 параметра - секунды и микросекунды.
Дополнительную информацию можно найти в документации по NodeMCU.
Шаг 2: серверы времени SNTP
Простой протокол сетевого времени (SNTP) предоставляется из многих источников в Интернете, и во многих странах мира есть эта услуга.
Программа SNTPTime2.lua устанавливает время на внутреннем RTC. При прошивке ESP8266 в вашей сборке должны быть модули rtctime и sntp. Программа получает время с сервера в секундах и микросекундах и устанавливает внутренний RTC с помощью rtctime.set (sec, usec).
Затем программа отображает дату и время в разных форматах.
В мире существует множество серверов SNTP, среди которых есть следующие:
- sntp.sync ({"216.239.35.0"},
- sntp.sync ({"0.uk.pool.ntp.org", "0.uk.pool.ntp.org"},
- sntp.sync ({"3.uk.pool.ntp.org", "143.210.16.201"},
- sntp.sync ({"0.uk.pool.ntp.org", "1.uk.pool.ntp.org", "3.uk.pool.ntp.org"},
Все приведенные выше строки кода можно подставить в программу SNTPTime2.lua.
По указанным ниже адресам есть еще несколько серверов SNTP, которые снова можно использовать в программе.
93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com
Google также предоставляет серверы времени по этим адресам:
216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12
Вам нужно не забыть получить время из страны, в которой вы находитесь, или вам, возможно, придется изменить его для разных часовых поясов мира. Кроме того, в некоторых странах действует летнее время, поэтому вам, возможно, придется столкнуться с этим.
Шаг 3. Получение времени из модуля RTC
Программа GetRTCTime.lua считывает время из внутреннего RTC.
Первая часть считывает время и отображает его в секундах и микросекундах.
Вторая часть преобразует его в более понятный для человека формат.
при вызове tm = rtctime.epoch2cal (rtctime.get ()) он возвращает:
- год - 1970 ~ 2038
- пн - с 1 по 12 месяц текущего года
- день - день 1 ~ 31 текущего месяца
- час
- мин
- сек
- день - день 1 ~ 366 в текущем году
- wday - дни 1 ~ 7 текущей недели (воскресенье 1)
К каждому элементу можно получить доступ как tm ["день"], tm ["год"]…
Дополнительную информацию можно найти в документации по NodeMCU.
DisplaySNTPtime.lua - это более сложный способ отображения даты и времени на ЖК-дисплее OLED 128 x 64, поскольку он легко подключается и может использоваться с этими программами.
Шаг 4: Пользовательская память RTC
Небольшое отклонение от хронометража заключается в том, что внутренний RTC на ESP8266 имеет адреса памяти 128 x 32 бита, к которым может получить доступ программист. Они особенно полезны, поскольку могут пережить цикл глубокого сна ESP8266. Программист должен контролировать их использование и гарантировать, что они не будут случайно перезаписаны.
Я включил RTCmem.lua, простую программу, демонстрирующую его использование. В вашей сборке должен быть модуль rtcmem.
Шаг 5: внешние модули RTC
Внешние модули RTC подключаются к ESP8266 через интерфейс I2C, который использует только два контакта ввода / вывода и поэтому работает с ESP-01, а также с большинством других устройств ESP8266.
Адрес модуля RTC - 0x68, доступ к нему осуществляется с помощью обычных команд I2C. Однако следует иметь в виду, что данные в регистрах RTC хранятся в формате BCD (основание 16), поэтому ваши программы должны иметь дело с этим. Время и дата хранятся в 7 регистрах RTC. Во внутреннем RTC преобразование BCD выполняется модулем rtctime.
SetExtRTC.lua преобразует данные в BCD и устанавливает время.
ReadExtRTC.lua считывает данные о времени и распечатывает их. ПРИМЕЧАНИЕ: данные распечатываются в шестнадцатеричном формате.
Я не тратил много времени на форматирование дисплея, так как у вас могут быть собственные представления о том, что вы хотите делать с датой и временем. Это базовый движок в его простейшей форме, так что вы можете развивать его, если хотите.
Шаг 6: Регистрация данных
Если вы внимательно посмотрите на модули RTC, вы заметите, что в них встроена микросхема EEPROM AT24C32 или аналогичная, или вы можете использовать плату 24C256, как указано выше. Большинство этих микросхем EEPROM имеют контакты, аналогичные описанным выше. Они поставляются с разным объемом памяти, но все они доступны одинаково. Поскольку AT24C32 уже припаян к плате, его можно использовать напрямую от I2C внешнего RTC.
Если у вас есть только микросхема 24C256 или аналогичная, вы можете установить ее на макетной плате, подключить A1, A2 и A3 к Gnd, Vcc к 3,3 В и SDA И SCL к I2C, WP можно оставить плавающим. Некоторые микросхемы EEPROM работают только при напряжении 5 В, поэтому сначала проверьте соответствующий лист данных.
ByteWR.lua записывает 1 байт данных в ячейку памяти 0x00 EEPROM и считывает его обратно.
Desiderata.lua записывает пару строк известного текста в EEPROM.
eeRead.lua считывает данные из EEPROM и распечатывает их.
ПРИМЕЧАНИЕ. Эти программы также должны работать с другими платами EEPROM.
Шаг 7: Заключение
Я попытался показать, как RTC и EEPROM работают для регистрации данных. Это только начало для вашего дальнейшего развития. Вы можете подключать к шине I2C различные устройства, такие как датчики света, датчики атмосферного давления, датчики температуры и влажности, и записывать данные в EEPROM.
Рекомендуемые:
Настройка часов реального времени DS3231 RTC (часов реального времени) точно, быстро и автоматически с помощью Java (+ -1 с): 3 шага
Установка часов реального времени DS3231 RTC (часов реального времени) точно, быстро и автоматически с использованием Java (+ -1 с): это руководство покажет вам, как установить время на часах реального времени DS3231 с помощью Arduino и небольшого приложения Java, которое использует последовательное соединение Arduino. Основная логика этой программы: 1. Arduino отправляет последовательный запрос
DS1307 Часы реального времени RTC с Arduino: 4 шага
DS1307 Часы реального времени RTC с Arduino: в этом руководстве мы узнаем о часах реального времени (RTC) и о том, как Arduino & Микросхема часов реального времени DS1307 собрана вместе как устройство отсчета времени. Часы реального времени (RTC) используются для контроля времени и ведения календаря. Чтобы использовать RTC, w
Часы на базе Arduino с использованием модуля часов реального времени DS1307 (RTC) и 0,96: 5 шагов
Часы на основе Arduino с использованием модуля часов реального времени DS1307 (RTC) и 0.96: Привет, ребята, в этом руководстве мы увидим, как создать рабочие часы с помощью модуля часов реального времени DS1307 & Дисплей OLED, поэтому мы будем считывать время с модуля часов DS1307. И распечатать на OLED-экране
Создание часов с M5stick C с помощью Arduino IDE - Часы реального времени RTC с M5stack M5stick-C: 4 шага
Создание часов с M5stick C с помощью Arduino IDE | Часы реального времени RTC с M5stack M5stick-C: Привет, ребята, в этой инструкции мы узнаем, как сделать часы с помощью платы разработки m5stick-C m5stack, используя Arduino IDE. Таким образом, m5stick будет отображать дату, время и amp; неделя месяца на дисплее
Как сделать часы реального времени с помощью Arduino и TFT-дисплея - Arduino Mega RTC с 3,5-дюймовым TFT-дисплеем: 4 шага
Как сделать часы реального времени с помощью Arduino и TFT-дисплея | Arduino Mega RTC с 3,5-дюймовым TFT-дисплеем: посетите мой канал на Youtube. Введение: - В этом посте я собираюсь создать «Часы реального времени» с использованием 3,5-дюймового сенсорного ЖК-дисплея TFT, Arduino Mega 2560 и модуль DS3231 RTC… .Перед запуском… посмотрите видео с моего канала YouTube .. Примечание: - Если вы используете Arduin