Оглавление:

NODEMCU Lua ESP8266 с часами реального времени (RTC) и EEPROM: 7 шагов
NODEMCU Lua ESP8266 с часами реального времени (RTC) и EEPROM: 7 шагов

Видео: NODEMCU Lua ESP8266 с часами реального времени (RTC) и EEPROM: 7 шагов

Видео: NODEMCU Lua ESP8266 с часами реального времени (RTC) и EEPROM: 7 шагов
Видео: ESP8266 RTC память 2024, Ноябрь
Anonim
NODEMCU Lua ESP8266 с часами реального времени (RTC) и EEPROM
NODEMCU Lua ESP8266 с часами реального времени (RTC) и EEPROM

Правильное время очень важно, если вы хотите вести журнал данных. Есть разные способы узнать время из источников в Интернете.

Вы можете спросить, почему бы не использовать 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 Time
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
Серверы времени 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

Получение времени из модуля RTC
Получение времени из модуля 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
Внешние модули 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.

Рекомендуемые: