На предыдущей странице Часы на GPS-модуле GY-NEO6MV2
была поднята тема синхронизировать разные устройства по точному спутниковому времени. Всё вылилось уже в более совершенный проект второй версии. Заодно в этом проекте использован монохромный дисплей GMG12864, а его просили использовать некоторые подписчики сайта. Ещё одним интересным решением было потренироваться в освоении новых микроконтроллеров серии ESP32, имеющий 32 битную шину и двухядерный процессор. В проекте применён МК ESP32-WROOM-32D.
Возможности нового микроконтроллера серии ESP32(ESP32-WROOM-32D) позволили в этих часах воплотить частично погодную станцию и сверхточные часы. МК имеет возможность передавать данные в интернет и возможно проект будет в дальнейшем расширен.
GPS является аббревиатурой, т.е. расшифровывается как: Global Position System. GPS-модуль предназначен для получения сигналов позиционирования со спутников, которые летают над Землёй. Связь, само-собой, осуществляется в одном направлении – на приём. Поэтому при подключении модуля к ESP32 достаточно подключить вывод Tx модуля с Rx ESP32. Преимущество в данном случае ESP32 в том, что у него аппаратно реализованы дополнительные последовательные порты. Для приёма сигналов GPS-модуля использую последовательный порт Rx2/Tx2. Скорость передачи данных с модуля по умолчанию: 9600 бод. Поэтому в скетче для порта устанавливаем такое же значение:
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
По последовательному порту с приёмника GPS-модуля поступают текстовые символы, поля которых отделены запятыми. В конце строки стоит завершающий символ перевода строки. Формат сообщений соответствует стандарту NMEA – National Marine Electronics Association. Несколько подробнее этот формат описан ниже в начале скетча. Отмечу лишь, что посылка с основными данными начинается с кодового слова $GPRMC, поэтому декодировать будем ту сторку, которая имеет вначале это слово.
Для вывода информации, использую дисплей GMG12864/WO12864D3, просили подписчики, конечно можно использовать любой другой дисплей, можно и цветной, или монохромный, но придётся переделать всю программу вывода информации на этот дисплей. Дисплей GMG12864/WO12864D3 по сравнению с Nokia-5110/3310 более надёжен, никаких проблем с плаванием контрастности и его ширина 128 точек, что позволяет более полно отображать информацию. Библиотека для данного дисплея использована следующая:
#include <U8g2lib.h> // Библиотека дисплея WO12864D3
Для ESP32 такая тяжёлая
библиотека хорошо подходит. Она позволяем подключать множество разных шрифтов и в том числе русские, что позволяет легко реализовать двухязыковый интерфейс устройства.
Попутно можно заметить, что ESP32 имеет достаточные ресурсы, чтобы не обращать внимания на размер кода программы, думается, что столько не написать, так, чтобы полностью забить место под программу.
На дисплее GMG12864 выводятся:
Раньше, при проектировании разных устройств, выяснил, что для управления любым устройством достаточно всего три кнопки, в этом проекте это также реализовано. Три кнопки управления:
Так как эти часы должны синхронизировать внешние устройства, то это реализовано так, что при смене часа на выводе PIN_CORR выдаётся импульс коррекции для любых внешних устройств (часов и т.п.). Настройка длительности в меню настроек. Если установлена длительность 0 мс, то импульс не выдаётся.
Для физического управления внешними устройствами к выводу PIN_CORR подключен резистор 510 Ом, который соединён с выводом 1 оптрона PC817. Вывод 2 оптрона PC817 соединён с GND.
Выводы 3, 4 - выход управления на внешнее устройство.
При вкючении устройства вначале идёт загрузка из EEPROM параметров настройки.
Далее идёт тестирование кнопок и светодиодов. На дисплей выводятся соответствующие сообщения. Программа предлагаем последовательно нажимать кнопки, чтобы проверить их исправность. Однако, если некоторое время кнопки не нажаты, то происходит автоматический переход к следующим пунктам проверки. При проверке светодиодов выводятся сообщения о включении индикаторных светодиодов на 1 с.
Далее идёт поиск подключенных датчиков температуры DS18B20 (до 2 шт.). Если датчики найдены, то на дисплей выводится номер датчика, его адрес 8 байт в HEX формате и температура. Если датчики температуры не подключены, то выводится соответствующее сообщение. После проверки подключения DS18B20 идёт переход к проверке датчика давления.
Далее идёт подключение датчика BME280. Если датчик не найден, то стоп программа и соответственное сообщение. Если датчик давления подключен, то на дисплей выводится текущее абсолютное давление в двух системах измерения: мм Рт.ст. и кПа, в которых может работать устройство. Также выводится температура с встроенного датчика температуры и влажность (при условии, что установлен датчик BME280). В заголовке экрана выводится тип используемого датчика давления.
В этом устройстве использована концепция множественности экранов вывода информации. На каждый такой экран выводится определённая информация.
Устройство имеет 5 экранов вывода информации на дисплей.
Если в настройках параметр mode = 0, то при работе происходит автоматическая смена экранов по кругу, время показа экрана устанавливается в настройках.
В левом верхнем углу выводится номер экрана и при mode=0 через / выводится время показа экрана в секундах.
Если mode отличное от 0, то выводится соответствующий экран и в левом верхнем углу дисплея номер экрана.
При mode != 0 возможно быстрое переключение экранов при нажатии кнопок [МИНУС] и [ПЛЮС].
Нажатие продолжительное. При смене экрана происходит запись нового mode в EEPROM.
Синий светодиод используется для контроля выдачи импульса синхронизации коррекции внешних устройств. Красный светодиод используется для индикации записи и обновления в EEPROM. Зелёный светодиод указывает на достаточное количество спутников, что позволяет получать координаты местоположения.
Устройство может работать от встроенного аккумулятора. В этом случае на дисплее выводится пиктограмма батарейки и под ней значение напряжения аккумулятора.
В пиктограмме внутри батарейки есть 4-е линии, которые соответствуют по 30% заряда.
0% – нет линий;
30% – 1-я линия;
60% – 2-я линия;
90% – 3-я линия;
100% – 4-я линия.
Если спутников недостаточно, то на экране в позиции времени выводится поясная поправка и выводится надпись "Мало спутников". Если некоторые спутники находятся, то выводится время и дата. Если найдено достаточное количество спутников, то выводятся координаты местоположения: широта/долгота.
Если найдены 2 датчика, то на экране №3 выводятся у каждого датчика по кругу:
Если нарушена линия подключения датчика, то выводится номер датчика (если их 2) и сообщение "Ошибка данных датчика DS18B20". При восстановлении линии подключения вывод информации возобновляется. Если датчики не были подключены и необходимо их подключть то, чтобы программа установила вновь подключенные датчики требуется перезагрузка устройства. Это можно сделать либо выключением/включением питания, либо нажатием на кнопку Сброс/Reset
.
Переход в настройки и выход из настроек по длительному нажатию на кнопку МЕНЮ/SET. На данный момент 2024-08-25 всего 20 настроек:
Если в настройках не делались изменения, то при выходе к EEPROM нет обращения. Если сделаны изменения, то данные изменения вносятся в EEPROM и красный светодиод на каждый изменённый параметр выдаёт один длительный импульс. После этого происходит обновление в EEPROM и красный светодиод выдаёт серию коротких импульсов. Это сделано из-за того, что ESP32 не имеет спецальной области EEPROM, а её эмулирует. Световая сигнализация записи в EEPROM для удобства контроля этого процесса.
Как Вы могли заметить, устройство может работать на двух системах измерения давления. Также можно установить язык интерфейса либо английский, либо русский.
Дисплей GMG12864/WO12864D3, GPS-модуль, датчики DS18B20, датчик BMP280/BME280, оптрон PS817, внешний АЦП ADS1115 подключаются к ESP32-WROOM-D3
по следующей схеме:
=================== ПОДКЛЮЧЕНИЕ МОДУЛЕЙ =================== GPS-приёмник - часы, дата, координаты ------------------------------------- GY-NEO6MV2 ESP32 VCC 3V3 GND GND TX 16/RXD2 RX не используется LED_GREEN - сигнал приёма координат, подпаять к LED на плате. Через резистор 510 Ом Выход синхонизации ------------------- ESP32 R PS817 - оптрон GPIO2 -[510 Ом]- 1 GND - 2 Датчики температуры (макс 2 шт.) -------------------------------- DS18B20 ESP32 1 GND - GND 2 OUT - 15 -[4.7k]- 3V3 3 VCC - 3V3 Датчик абсолютного давления --------------------------- BME280 ESP32 SCL - 22 SCL SDA - 21 SDA VCC - 3V3 GND - GND Карта использованных контактов ESP32-WROOM ------------------------------------------ 15 - OneWire - DS18B20 16/RXD2 - GPS-reciver TX 17/TXD2 - GPS-reciver No connect 21 - SDA - Датчики/Модули 22 - SCL - Датчики/Модули GMG12864/WO12864D3 5 - LCD_CS 18 - LCD_RSE 19 - LCD_A0 23 - LCD_SCL 32 - LCD_SI 4 - LCD_BL // Подсветка через резистор 220 Ом 13 - KNP_MENU 12 - KNP_MINUS 14 - KNP_PLUS 2 - PIN_CORR LED_BLUE 27 - LED_SAVE_EEPROM LED_RED Внешний АЦП для измерения напряжения аккумулятора ------------------------------------------------- ADS1115 ESP32-WROOM A1 - к делителю R1(9.89 кОм) - R2(3.33 кОм) R1 - к R2 и к входному напряжению (аккумулятору до 4,2В) R2 - к R1 и GND SDA - SDA SCL - SCL G - GND V - 3V3
Схема модуля GPS-модуля GY-NEO6MV2 ниже.
Скетч довольно внушительный и публиковать тут не буду, тем более пока всё в стадии испытаний и доработки программы. Возможны изменения из-за оптимизации или внесения дополнительных возможностей. Для желающих могу за отдельную плату прислать на почту полный (на данный момент) скетч. Обращайтесь либо в ВК, либо на почту.
Реализация проекта начинается с макета, как и любой проект. На панельках безпаячного соединения набирается вся схема и уже постепенно отлаживает программа. Ниже на фото видно, что все модули подключены и идёт включение программы. Первым выводится информация по уровню подсветки дисплея и выводится пиктограммка батарейки с полным зарядом.
После проверок работы кнопок и световой индикации идёт поиск подключенных датчиков температуры DS18B20.
Если датчики температуры подключены и найдены, то выводится информация с них.
Далее идёт подключение модуля измерения давления BMP280/BME280. Соответственно выводится информация.
При mode=1 выводится информация первого экрана. На неё выводится время, дата, координаты местоположения с модуля GPS. Как видим ниже на фото, выведено время и дата, но нет координат, это происходит из-за недостаточного количества обнаруженных спутников. Когда спутники обнаружены, то будут выводится и координаты местоположения.
Если длительно нажать на кнопку [МЕНЮ/SET] то программа перейдёт в меню настроек, где можно произвести настройку 16 параметров устройства. Возвращение к экранам с информацией по длительному нажатию кнопки [МЕНЮ/SET].
Второй экран выводит время и дату. Цифры часов большие. Этот экран можно использовать как просто часы.
На третьем экране выводится информация с датчиков температуры DS18B20. Ниже на фото вывод информации с датчика #0. Замечу, что у него не установлена поправка значения температуры и соответственно нет такого сообщения.
Ниже на фото вывод информации с датчика #1. У этого датчика установлена поправка значения температуры и на экране выведено значение поправки. Изменение поправок температуры осуществляется в меню настроек для каждого датчика.
На четвёртом экране выводится время и дата и дополнительно информация с датчика давления: температура, абсолютное давление и влажность.
Если устройство работает от аккумулятора, то выводится пиктограммка батарейки с линиями заряда и ниже напряжение на аккумуляторе. Удобно контролировать время автономной работы. Однако само устройство может продолжительно работать от внешнего источника питания +5В.
После макетирования и отладки программы переходим уже к реализации самого устройства, как законченной конструкции. Она состоит из двух плат. На первой плате установлены дисплей, ESP32, внешний АЦП, модуль датчика давления, разъём для подключения двух датчиков температуры DS18B20, разъём для подключения синхронизируемых внешних устройств, светодиоды индикации, оптрон PS817, на плате дисплея установлена планка с кнопками управления.
На другой стороне платы №1 установлен разъём под дисплей, светодиоды, оптрон PS817 и разъемы подключения внешних устройств.
На плате №2 установлен модуль GPS с антенной. Так же установлены модуль заряда аккумулятора на мс LP4056 и установлен модуль преобразователя напряжения до +4,5В, которое подаётся на контакт [VIN] платы ESP32-WROOM-32D.
Общие габариты собранного устройства 80*55*46 мм без учёта размеров аккумулятора.
Обзор конструкции с разных сторон.
2024-07-17Процесс включения. Проверка кнопок в автоматическом режиме, если они не нажимаются, то через определённое время программа идёт дальше. Датчики DS18B20 не подключены.
2024-07-17Датчики DS18B20 не подключены, поэтому после показа экрана №2 идёт сразу показ экрана №4. Если подключить датчики DS18B20 и перезагрузить устройство, то информация с них будет выводиться на экран №3.
2024-07-17Подключил два датчика DS18B20 и нажал кнопку Сброс/Reset
. Происходит тестирование подключенных модулей и датчиков. Далее, так как установлен Mode=0 – происходит автоматическая смена 4-х экранов по кругу.
Сейчас, по мере свободного времени, пишу экран №5 с выводом Барографа – графика изменения давления по времени... процесс идёт медленно, хотя основа и написана, но хочется сделать вывод в двух системах измерения...
2024-08-23