Андрей Смирнов
Время чтения: ~16 мин.
Просмотров: 62

ESP8266 + FLProg – Пользовательские системные параметры и синхронизация с сервером точного времени

Решил тут собрать что-то мелкое и эффектное, ну и не долго подумав, решил начать изобретать велосипед разработку своих «умных часов», да так, чтобы повторить мог любой, и без сложных схем.

Монитор выбрал OLED на драйвере ssd1306, так как он работает по интерфейсу I2C, а значит займет всего 2 пина микроконтроллера и это то что надо! Платой с ESP8266 изначально была ESP-07, но позже ей стал модуль ESP-01, хоть на нем и мало разведенных пинов, но их вполне хватит даже для подключения нескольких датчиков (пульс, температура тела…), ведь даже RX и TX можно использовать как GPIO любого назначения.

Первым этапом стало написание скетча, умеющего получать из интернет данные о погоде и времени, далее задумался «куда же засунуть RTC для счета времени» и в итоге решил вообще от него отказаться, пусть сам микроконтроллер считает время, а когда появится «родная» WIFI сеть, время синхронизируется и снова станет точным. За десять часов работы часов, они отстали примерно на минуту, что вполне приемлемо (ужин с обедом уже не перепутаешь).

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

На этом этапе устройство отображает в течении 10 секунд время, за тем 3 секунды температуру, что берет из интернета, за тем влажность в течении 3-х секунд, источник данных тот же.

Для корректного отображения русского шрифта и вообще для работы ESP8266 с OLED 128X64 библиотеки adafruit слегка модифицированы и прилагаются к статье вместе со скетчем ессно

https://yadi.sk/d/l7dh85d932YizK

Продолжение конечно же следует!

Видео по статье:

184Предлагаемые Вашему вниманию часы являются, по сути, побочным продуктом изучения свойств и повадок популярного зверя по кличке ESP8266. Думаю, любой человек, знакомящийся с каким-либо микропроцессором, рано или поздно реализует на нем свою версию часов. Единственно, что отличает мои часы – у них нет кнопок. Вообще. Они просто показывают точное время.fe724d93caf649489d5be6ad752c20a9.png — И все же, где же у него кнопка? © Приключения Электроника. Описание ниже — это что-то вроде записок натуралиста, надеюсь, интересующиеся этой системой на кристалле, найдут для себя что-то интересное. Для экспериментов, я выбрал самый малоножечный вариант платы, а именно ESP-01. Это чуть более дешевая чем другие, но главное, единственная “нативная” (то есть не обремененная переходником, от предприимчивой третьей стороны) плата к которой можно подключиться без пайки. Справедливости ради надо сказать, что из-за двухрядности выводов эту плату нельзя воткнуть непосредственно в бредборду, так что приходиться использовать проводочки. Из восьми выводов платы только два являются портами ввода вывода. В момент старта МК в работу на обоих портах должна присутствовать логическая единица. Процессы включения, прошивки и подключения к WiFi подробно описаны на профильном одноименном русскоязычном сайте. Лишь поделюсь опытом, что не стоит использовать один pull-up резистор для нескольких выводов, иначе возникают непредсказуемые эффекты. Необходимость наличия высокого уровня на портах в момент старта устройства приводит к тому, привычный ключ на n-p-n транзисторе во время инициализации МК (сброс / включение) открыт током, протекающим через pull-up резистор, что может оказаться неприемлемым для некоторых применений.cd99e1cfa289401eb3e4d8186c8e8e03.png Эту проблему можно разрешить, если использовать ключ на p-n-p транзисторе:6b213d49cbde4855a1e0d241eb6be27d.png Здесь транзистор открывается низким уровнем, соответственно в момент старта нагрузка обесточена. Заметим, что ключ (и тот и другой) является инвертором входного сигнала: когда на выходе МК ноль, коллекторе транзистора единица и наоборот. Я использовал прошивку NodeMcu, и считаю, что не прогадал, так как использовать язык Lua для того, что бы “пощупать” МК оказалось удобно и приятно. Да и сам язык оказался оригинальным и симпатичным. Для доступа к RTC микроконтроллера (если так можно назвать 31-битный регистр инкрементируемый кварцем платы) в Lua используются фукции tmr.time() и tmr.now(). Что возвращает функция tmr.time() понять так и не удалось. А вот функция tmr.now(), возвращает количество микросекунд прошедших с момента перезагрузки микропроцессора. Приблизительно, раз в 35 минут (2^31 микросекунд) счетчик переполняется, поэтому непосредственно использовать этот регистр для отсчета времени нельзя. Однако отслеживая моменты переполнения, можно рассчитывать реальное время. Этим занимается скрипт “v2_utime.lua” порождающий замыкание, которое можно использовать для получения времени. Для того чтобы не потерять ход часов, достаточно обращаться к замыканию за текущим временем не реже чем раз в 35 минут. Опыты показали, что ошибка внутреннего счетчика составляет единицы секунд в сутки, что является весьма приличным результатом. Для получения реального текущего времени используется скрипт “v2_ntp.lua”, который формирует UDP запрос к NTP-серверу и извлекает время из полученного ответа. Я встречал и альтернативное решение — обращение к какому-либо проверенному http-серверу с целью получения текущего времени из заголовка полученного ответа. Обращение к серверу NTP производится первый раз после перезагрузки контроллера, а затем каждые 15 минут. Полученное время корректируется на заданное количество часов сообразно указанному часовому поясу. Все настроечные переменные можно найти и откорректировать в скрипте “v2_config.lua”. Для редактирования и загрузки Lua-скриптов удобно использовать программу ESPlorer. Отображение текущего времени производится четырьмя 7-сегментными индикаторами. Всего пара доступных портов ввода вывода и некоторая медлительность Lua-скриптов не позволяет использовать динамическую индикацию. Поэтому, для получения достаточного количества управляющих сигналов используется четыре микросхемы 74HC595 – восьмиразрядные сдвиговые регистры. Работа с регистрами производится тремя сигналами: DS — определяет записываемый бит, SH_CP — запись бита (по фронту) и ST_CP — сигнал передачи записанных данных на выходы (тоже по фронту). Для передачи данных в сдвиговый регистр используется порт GPIO2. Порт GPIO0 формирует ST_CP, и через уже описанный инвертор SH_CP. Такое включение приводит в “смаргиванию” индикации при смене значений, что будем считать не багой, а милой фичей. Наличие смаргивания — одна из главных причин отсутствия индикации секунд в этих часах. Уверен, желающие без труда добавят секунды и избавятся от смаргивания использовав еще один порт более продвинутой платы для формирования сигнала ST_CP. Помимо увеличения количества выводов микросхемы 74HC595 выполняют роль драйверов сегментов LED индикаторов, 35mA допустимой нагрузки на выход вполне достаточно для этого, даже при использовании больших индикаторов. Сегменты больших индикаторов составляются из нескольких, включенных последовательно, светодиодов. Для их включения необходимо напряжение больше 3.3V используемого для микроконтроллера и микросхем логики. Так, для трех-диодных индикаторов красного цвета необходимо напряжение порядка 5.5V для четырех-диодных уже около 7V. Поэтому используются два источника напряжения: 3.3V для питания микроконтроллера и логики и отдельный источник для индикаторов. Я использовал регулируемый, компактный модуль dc-dc конвертер “mini-360”. Использование dc-dc позволяет использовать практически произвольный не стабилизированный источник напряжения. Например, я использую, 12ти-вольтовый блок питания от старого радиотелефона. Потребляемый ток при использовании 12-вольтового источника не превышает 200mA. Регулировкой напряжения достигается комфортная яркость свечения индикаторов. Используются индикаторы с общим анодом на который подается питание от dc-dc модуля. Включение сегмента осуществляется подачей земли на соответствующий катод. Идея в том, что пока на выходе регистра логическая единица (то есть 3.3V так как на регистр подается это напряжение) разности потенциалов анод-катод на сегментах индикатора недостаточно для открытия светодиодов. Когда же на выходе ноль – сегмент загорается. Общая схема устройства, несмотря на кажущуюся громоздкость достаточно проста. Здесь: U1 – источник напряжения индикаторов, стоящий за ним линейный стабилизатор U2 формирует 3.3V для питания модуля ESP8266 и регистров. Резисторы R7, R8, R17 подтягивают выводы контроллера к питанию для корректного запуска. Резисторы R10,R18,R16 служат для подключения контроллера к пятивольтовому конвертору USB-UART. Транзистор Q1 — ключ инфракрасного светодиода D4 и заодно инвертор сигнала GPIO0. Инфракрасный светодиод – на перспективу, в данной конструкции не используется и его можно заменить резистором 3k. Теперь про диоды D1-D4, D6-D9 — они нужны для обеспечения падения на точках индикатора. Дело в том, что в точках индикаторов используется один светодиод в отличие от сегментов, в которых их несколько. Сегменты минут перевернуты, что позволяет использовать точки как разделители часов и минут. Часы собраны на двусторонней печатной плате, одну сторону которой занимают исключительно индикаторы. Плата разведена под два типоразмера индикаторов, имеющих одинаковую распиновку. Вот так выглядит плата с большими индикаторами в сборе. И наконец, для тех, кто дочитал до этого места – вишенка на торте! В преддверии Нового Года часы, помимо текущего времени, показывают еще и количество часов до этого радостного события. Количество часов до нового года показываются с 5-той по 11-тую секунду каждой минуты. Почему с 5-той по 11-тую? Потому, что так написан Lua-скрипт и любой желающий может изменить это поведение на любое другое по своему усмотрению. Для этого понадобится только текстовый редактор и в этом я вижу особое достоинство прошивки NodeMcu. А с 23:00 31 декабря запустится посекундный обратный отсчет! Кстати, вполне реально успеть собрать часы до НГ, хотя бы и на бредборде (здесь для ESP-01 используется переходничок, но это не обязательно).Схема и печатная плата в формате DipTrace, Lua-скрипты

Добавлено 21 ноября 2018 в 01:40

Рассмотрим, как с помощью ESP8266 и светодиодной матрицы, создать красивые анимированные часы. С подробными фотографиями!

Что должно получиться:

Анимированные цифровые часы на NodeMCU ESP8266

Часы в работе:

Благодаря работе сообщество Arduino и ESP8266, эти крутые часы собрать удивительно легко!

  1. Просто два основных компонента: дисплей (ясно почему) и WiFi микроконтроллер.
  2. Пайка не требуется.
  3. Никаких навыков программирования не требуется, код предоставлен!

Начнем!

Шаг 1. Список компонентов

ff6a9e679cbdaeba7ed314a349b39af3847053aa.jpeg
Компоненты, необходимые для проекта
  • Светодиодная RGB матрица P3 64×32.
  • Микроконтроллерный WiFi модуль NodeMCU 32MB ESP8266.
  • Перемычки Dupont мама-мама по 20 см.
  • Дата-кабель microUSB и зарядное устройство для телефона.
  • Источник питания 5В 2А минимум.
  • Соединительный штыревой разъем (мама) для подключения источника питания к кабелю питания дисплея.

Важно:

  • Некоторые USB кабели предназначены только для подачи питания (зарядки) – это нормально для питания готовых часов, но для загрузки кода в ESP нам понадобится USB кабель для передачи данных/синхронизации.
  • RGB матрица P3 имеет более 6000 светодиодов. Для этих часов мы никогда не будем включать их всех сразу, поэтому 2 ампера более чем достаточно. Однако, если вы планируете делать с дисплеем что-то большее, и все светодиоды будут установлены на белый цвет, рекомендуемый источник питания составляет 8 ампер.

Шаг 2. Собираем всё вместе

6204fd58cb061bf74a4e39c593c1794b2a015902.jpeg
Соединяем все компоненты

Тут много проводов, но не беспокойтесь. Всё, что мы делаем, – это подключение одного вывода к другому.

Не торопитесь. Дважды проверьте каждое соединение до и после его установки.

Убедитесь, что провода вставлены полностью, чтобы они случайно не оторвались.

Шаг 3. Подключение ESP

239f6569008c4592d00a67af30584332855938b8.jpeg
Подключение модуля NodeMCU 32MB ESP8266
9f4420620d76ac7ddc065ba55cae15dc534f7e89.jpeg
Подключение модуля NodeMCU 32MB ESP8266 (обратите внимание, что USB разъем находится слева, D0 – это самый правый вывод)

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

ПОКА НЕ подключайте модуль ESP к компьютеру. Прежде чем что-то запитывать, нам необходимо закончить с соединением компонентов.

Мы используем выводы D0-D8 и два вывода GND.

Мы можем пропустить вывод 3В, потому что модуль ESP будет питаться через USB порт.

Мы также пропускаем выводы для передачи и приема, потому что мы свяжемся с ESP через USB или WiFi.

Шаг 4. Подключение светодиодной матрицы

Затем подключите к светодиодной матрице вторые концы перемычек, которые вы только что подключили к модулю ESP.

Опять же, ниже приведена таблица с цветами проводов, которые я использовал, но ваши цвета могут отличаться. Важно то, что вы подключаете выводы ESP к матрице, как показано в таблице.

Матрица НЕ симметрична, есть правая/левая стороны и верх/низ. Обратите внимание на белые стрелки.

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

7849a2c85cfbebc40c76f65bb428652452b4d0a0.jpeg
Печатная плата светодиодной матрицы

Подключение левого разъема

Таблица 1. Левый разъем на плате светодиодной матрицы
NodeMCU Вывод матрицы Цвет перемычки
D0 STB коричневый
D1 A красный
D2 B оранжевый
D3 E желтый
D4 OE зеленый
3V    
G GND черный
D5 CLK синий
D6 D фиолетовый
D7 R0 серый
D8 C белый
RX    
TX    
G GND черный
3V    
78b395a0f863c5deee6bad95dc9f5ee6f56f6cbf.jpeg
Подключение левого разъема (фото с внешней стороны платы) (обратите внимание, некоторые провода будут вставлены позже)
5fe99597c83505d6c720f69754897bff9d9b85af.jpeg
Подключение левого разъема (фото с внутренней стороны платы) (обратите внимание, некоторые провода будут вставлены позже)

Подключение правого разъема

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

Таблица 2. Правый разъем на плате светодиодной матрицы
Вход матрицы Выход матрицы Цвет перемычки
B0 G1 фиолетовый
R1 R0 желтый
B1 B0 серый
G0 R1 зеленый
G1 G0 синий
69ddde3cb53e2b9d77ad237330950f1812c66118.jpeg
Подключение правого разъема

Шаг 5. Подключение питания

deadd403705c4b831ae3ddd886d7e263edc82b87.jpeg
Подключение питания к светодиодной матрице (я добавил дополнительный слой термоусадки, чтобы закрыть открытые металлические клеммы)
9bd85d9cfcd3110cfc2a4798412efcbb8b7d3b2d.jpeg
Перед надеванием дополнительного слоя термоусадки я согнул клеммы
2fcf562225bbc2ff771b60decaa7c4f9317c41ff.jpeg
Открытый металл я закрыл дополнительным слоем термоусадки
Подключение питания к светодиодной матрице

Кабель питания дисплея был разработан для винтовых клемм.

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

Очевидно, красный провод должен быть подключен к (+), а черный провод – к (-).

Подключите другой конец провода к дисплею, снова обратив внимание на полярность: красный провод идет к VCC, а черный – к GND.

Если ваш кабель рассчитан на одновременное питание двух дисплеев, то не имеет значения, какой из кабелей вы подключаете к своему единственному дисплею. Однако ОЧЕНЬ ВАЖНО не перепутать красный (+) и черный (-).

СНОВА проверьте полярность кабеля питания, убедитесь, что ПЛЮС и МИНУС НЕ ПЕРЕПУТАНЫ!

Всё, мы закончили с подключениями. Но пока ничего не включайте!

Шаг 6. Установка Arduino IDE

Установка Arduino IDE

Чтобы загрузить код в ESP, вам понадобится программное обеспечение Arduino и несколько библиотек.

Скачайте с сайта Arduino.cc подходящую для вашей операционной системы среду разработки Arduino IDE и установите ее.

Шаг 7. Установка библиотек

Установка библиотек в Arduino IDE

После установки запустите Arduino IDE:

  • Кликните на меню Скетч (Sketch) > Подключить библиотеку (Include Library) > Управлять библиотеками (Manage Libraries…)
  • Найдите и установите последние версии следующих библиотек:
    • AdaFruit Gfx library
    • PxMatrix by Dominic Buchstaller
    • ArduinoJSON version 5.13.2 by Benoit Blanchon
    • WiFiManager by Tzapu
    • DoubleResetDetector by Stephen Denne aka Datacute

ВАЖНО:

Обратите внимание, что на момент написания этой статьи ArduinoJSON версии 6.x beta не работает с Morph Clock. Это приводит к ошибкам компиляции. Убедитесь, что вы указали версию 5.13.2, когда устанавливали/обновляли ArduinoJSON.

Шаг 8. Установка поддержки ESP8266

Нам также необходима поддержка ESP8266.

  • Закройте Менеджер библиотек, но оставайтесь в Arduino IDE.
  • Перейдите в Файл (File) > Настройки (Preferences).
  • Кликните на иконку справа от поля «Дополнительные ссылки для менеджера плат» (Additional Board Manager URLs)
  • Вставьте этот URL отдельной строкой (последовательность значения не имеет):
    • http://arduino.esp8266.com/stable/package_esp8266com_index.json
    Установка поддержки ESP8266
  • Кликните OK, чтобы выйти из настроек.
  • Перейдите к Инструменты (Tools) > Плата xyz (Board xyz) > Менеджер плат (Board Manager…).
  • Найдите ESP8266.
  • Установите esp8266 by ESP8266 Community.
    Установка поддержки ESP8266

Шаг 9. Установка драйвера CH340

Установка драйвера CH340

Последнее, что нужно установить, – это драйвер устройства, чтобы наш компьютер мог общаться с ESP.

Скачайте и установите драйвер на ваш компьютер. Ссылки для скачивания можно найти в статье «Работа под Windows с китайскими клонами Arduino (с преобразователем CH340G)». В этой же статье вы найдете инструкцию по установке. На NodeMCU ESP используются те же CH340/CH341, что и на клонах Arduino.

Шаг 10. Загрузка кода

Мы почти на месте…

  1. Скачайте и распакуйте последнюю версию Morphing Clock (анимированных часов) с Github, либо резервную копию версии от 20 ноября 2018 г. с данного сайта
    • Если вы не знакомы с интерфейсом Github, то посмотрите изображение ниже
      Скачивание кода с github
    • Распакуйте загруженный zip архив и дважды кликните по файлу MorphingClock.ino
  2. Скомпилируйте и загрузите прошивку
    • Перед подключением NodeMCU к своему компьютеру вы дважды проверили, всё ли правильно разведено? 🙂
    • Убедитесь, что выводы на NodeMCU не закорочены какими-либо металлическими объектами на вашем столе.
    • Когда вы подключите USB кабель, то услышите обычный звуковой сигнал о том, что Windows узнала USB устройство, которое было подключено.
    • Установите опции в Arduino IDE > Инструменты (Tools), как показано на скриншоте.
      • Номер COM порта может отличаться.
      • Я изменил размер флэш-памяти на 4M(1M SPIFFS), для вашего модуля ESP этот параметр может отличаться.
      Настройки платы в Arduino IDE
    • Кликните Загрузка (Upload). Это займет некоторое время (около 30 секунд), и будут предупреждения, но в конечном итоге код будет загружен в модуль NodeMCU.
      Прошивка ESP8266

Решение проблем:

  • Если загрузка закончилась неудачей из-за отсутствия подключения, убедитесь, что выбрали порт, к которому подключен модуль ESP, в Инструменты (Tools) > Порт (Port).
  • Если в Инструменты (Tools) > Порт (Port) нет активных опций
    • убедитесь, что установили драйвер CH340;
    • убедитесь, что используете кабель для передачи данных / синхронизации. Проверьте это, подключив к компьютеру свой телефон. Если вы сможете видеть файлы на компьютере со своего телефона, то кабель нормальный.
  • Если компиляция завершилась не удачей до попытки загрузки, прокрутите окно с черным фоном вверх, а затем медленно спускайтесь обратно вниз, обращая внимание на сообщения об ошибках. Если вы не знаете, что могла бы значить найденная ошибка, то добавьте ее в комментарий, попробуем разобраться. В журнале будет несколько предупреждений, но это нормально, они не останавливают компиляцию.
  • Если вы получили во время компиляции ошибку, связанную с JSON, используйте JSON библиотеку версии 5.13.2 вместо последней версии (6-beta).
  • Если компиляция завершилась успешно, загрузка тоже успешна, но часы не работают, откройте монитор последовательного порта в Arduino IDE, нажмите сброс (RESET) на модуле ESP. Если ошибки – это куча hex-чисел, попробуйте изменить размер флэш-памяти на 4M(1M SPIFFS) и загрузить снова.
  • Матрица работает, но ESP ничего не показывает как точку доступа. Я встречал это на меньших NodeMCU на базе ESP-12E и 1M SPIFF, используйте версию MorphClk для ESP-12E (резервная копия на RadioProg). К сожалению, я решил проблему, только уменьшив частоту обновления дисплея, поэтому дисплей будет не таким ярким по сравнению с оригинальной версией.

Шаг 11. Настройка

После завершения прошивки вы должны увидеть на дисплее слово «Connecting».

Дисплей включения часов

ESP пытается подключиться к вашему WiFi, чтобы получить текущее время. Однако он еще не знает пароля к вашей точке доступа (AP) WiFi.

  • Нажмите на ESP кнопку сброса (RST) дважды с интервалом примерно в одну секунду.
    Кнопка сброса на модуле ESP
  • Дисплей должен будет показать вам AP: MorphClk,Pwd: HariFun и 192.168.4.1.
    Дефолтные настройки сети в часах
  • Сейчас ESP действует как точка доступа WiFi с названием MorphClk и паролем HariFun.
  • Перейдите к своему компьютеру/телефону, чтобы изменить свое WiFi подключение с вашего WiFi на MorphClk.
  • Чтобы переключить сеть WiFi, на Windows используется иконка в нижнем правом углу, на Mac – в верхнем правом.
  • Вы можете увидеть предупреждение, что ваш телефон не может найти интернет. Это нормально. Ваш телефон сейчас подключен только к ESP, а ESP не подключен к интернету (пока).
  • Используя вэб-браузер на своем компьютере/телефоне, откройте 192.168.4.1, это сайт, обслуживаемый ESP.
    Точка доступа WiFi от часов
    Вэб-интерфейс часов
  • Нажмите «Configure WiFi» и выберите ВАШУ точку доступа WiFi и введите пароль от своей WiFi сети. Это сохранит данную информацию в постоянной памяти, поэтому вам не придется повторять это снова.
  • Также выберите часовой пояс.
  • Введите Y в поле 24Hr, чтобы часы отображались в 24-часовом формате, или N, если предпочитаете 12-часовой форма. Но я еще не сделал индикатора AM/PM.
    Страница настроек часов
    Страница настроек часов
  • Не забудьте переключить свой компьютер/телефон обратно на свою обычную точку доступа WiFi, иначе у вас не будет доступа в интернет.
Настройки сохранены
Переход в нормальный режим работы
Всё работает

Шаг 12. Всё готово!

Всё, что осталось, – поместить часы в нормальный корпус.

Вам больше не нужен компьютер/телефон. Для питания ESP вы можете использовать обычное зарядное устройство для телефона.

Удачи в сборке!

Теги

Arduino IDEESP8266NodeMCUWi-FiWi-Fi модульСветодиодная матрицаЧасыИспользуемые источники:

  • https://pikabu.ru/story/umnyie_chasyi_svoimi_rukami_na_esp8266_1_4676364
  • https://habr.com/post/388033/
  • https://radioprog.ru/post/520

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации