Вай фай часы своими руками
Очень простые часы с WiFi Автор: himikat123
Опубликовано 14.05.2019
Создано при помощи КотоРед.
Простейшие часы с WiFi на ESP8266 и TM1637 Недавно я вдруг обнаружил, что у меня в спальне совершенно нет часов, а так же их нет в коридоре и в ванной. Пойти в магазин и купить часы — слишком просто. К тому же, такие часы нужно иногда подстраивать, переводить на летнее время.. Пришлось собрать свои часы, которые всегда ходят правильно, без моего вмешательства. Итак, основные требования к проектируемым часам:
- Часы должны быть очень простыми.
- Часы должны быть очень дешевыми.
- Часы должны очень точно ходить.
- Часы должны сами знать время, даже после отключения питания.
- Часы не должны мешать спать по ночам.
- У часов должны быть интуитивно понятные настройки.
На итог получились такие часы:
- Минимум деталей. 2 модуля и 7 SMD деталей.
- Прошивка без программатора и без необходимости что-то компилировать.
- Точный ход часов, при наличии доступа в интернет. Благодаря синхронизации с NTP сервером.
- Автоматический переход на летнее время, только если нужно.
- Пониженая яркость дисплея в ночном режиме.
- Возможность задания времени и яркости ночного и дневного режима.
- Отображение температуры и влажности в доме.
- Возможность коррекции показаний температуры и влажности.
- Автоподключение к одной из 10-и сохраненных в памяти часов WiFi сетей.
- Дистанционный доступ к настройкам часов.
- Простые и понятные даже неподготовленному человеку настройки.
- Возможность обновления прошивки по воздуху.
Схема получилась неприлично простой. Сердцем часов является модуль Wemos D1 mini — U1, это модуль на микросхеме ESP8266 со всей необходимой обвязкой, к тому же в данный модуль встроен преобразователь USB->UART и стабилизатор на 3,3V.
Дисплей U3 — светодиодный семисегментный дисплейный модуль, 0.56 дюймов, со встроенной микросхемой управления дисплеем TM1637. Конечно, можно применить дисплей и меньшего размера, но плата сделана под этот размер.
Резисторы R1, R2, а так же диод D1 служат для защиты выводов ESP8266 от перегрузки, можно заменить перемычками, но нежелательно. Фильтрующие конденсаторы C1-C4 можно не устанавливать, но тогда возможна нестабильная работа часов, зависания, сбои. Кнопки S1, S2 нужны сответственно для сброса и ввода часов в режим настроек. Кнопки, как вы уже догадались тоже можно не устанавливать.. Разъем J1 предназначен для подключения датчика (датчиков) температуры и влажности. Датчик(и) нужно расположить на расстоянии хотя бы 10 см от часов, так как часы в работе немного нагреваются, а датчики очень чувствительные. Если показания температуры и/или влажности вам не нужны, то датчики можно не устанавливать, соответственно разъем J1 тоже не будет нужен.
Питать часы можно например зарядкой от телефона, напряжением 5В, током 500 мА, с разъмом USB-micro.
Часы поддерживают следующие датчики: DS18B20, BME280 и SHT21 (HTU21D). Можно подключить один, а можно и сразу все датчики. В настройках можно выбрать каким датчиком что измерять. Датчик(и) подключае(ю)тся к разъему J1, назначение выводов указано на схеме. Можно подключить все поддерживаемые датчики параллельно и одновременно.
Плата изготовлена на заводе в Китае, заказывал ее на сайте http://jlcpcb.com, не реклама. С «лазерным утюгом» возиться не стал, так как нужно было сделать сразу много плат. К тому же платы обошлись совсем не дорого, 2$ за изготовление и 5$ за доставку. За эти деньги я получил 10 высококачественных плат, с паяльной маской и шелкографией.
После сборки, часы необходимо прошить. Воспользуйтесь инструкцией по прошивке http://esp8266.atwebpages.com/?p=flashing
Или посмотрите видеоролик о сборке и прошивке часов.
После сборки и прошивки часы нуждаются в настройке. При первом включении они сами входят в режим настроек. В дальнейшем, чтоб войти в настройки, нажмите и удерживайте кнопку SETTINGS, пока на дисплее не появится надпись «SEtt». Далее подключите Ваш ноутбук или телефон к сети «Clock» пароль «1234567890» и в браузере перейдите по адресу http://192.168.4.1
Имя пользователя по умолчанию «admin», пароль «1111».
Страница настроек имеет максимально дружественный интерфейс, все настройки поделены на категории, каждая категория снабжена справкой.
Ну и на последок несколько фоток получившегося гаджета
Интернет часы на NodeMCU ESP8266 и OLED дисплее с определением времени по протоколу NTP
Модули часов реального времени (Real Time Clock, RTC) находят широкое применение в современной электронике для определения текущего времени и даты. Но недостатком данных модулей является то, что они не всегда обеспечивают требуемую точность определения даты и времени. При этом они могут определять только время на локальном устройстве. В данном случае использование решений, основанных на получении точного времени с серверов NTP, обеспечивает большую точность измерения времени и позволяет производить определение точного времени в любой точке земного шара.
Для реализации этой идеи можно использовать Wi-Fi модуль, который будет подключаться к сети интернет и определять время в любой точке Земли с помощью серверов NTP. В данной статье мы рассмотрим использование платы NodeMCU ESP8266 (будет выполнять роль Wi-Fi модуля) для считывания текущего времени и даты с серверов NTP и их отображения на экране OLED дисплея.
Также на нашем сайте вы можете посмотреть все проекты с использованием систем реального времени.
Необходимые компоненты
- NodeMCU ESP8266 (купить на AliExpress).
- SSD1306 0.96” OLED дисплей с 7 контактами (купить на AliExpress).
- Кабель micro USB.
- Макетная плата.
- Соединительные провода «папа-папа».
Протокол NTP
Протокол сетевого времени (Network Time Protocol, NTP) – это самый старый протокол, который появился в IP сетях для синхронизации времени между компьютерными сетями. Он был разработан ученым David L. Mills в университете Delaware в 1981 году. Данный протокол может быть использован для синхронизации времени различных сетей к всеобщему скоординированному времени (Coordinated Universal Time, UTC) с точностью до нескольких миллисекунд. UTC – это основной стандарт времени в современном мире, который регулирует время и дату. Протокол NTP использует UTC в качестве системного времени и обеспечивает точное синхронизированное время во всей сети Интернет.
Протокол NTP работает на основе иерархической модели клиент-сервер. На самом верхнем уровне этой модели используются системные часы известные как “stratum0”, в качестве которых могут использоваться атомные часы, радиоволны, GPS, GSM, которые получают сигналы времени от спутника. Серверы, которые получают сигналы времени от stratum0, называются “stratum1”, а серверы, которые получают сигналы времени от stratum1, называются “stratum2” и т.д. Это приводит к тому, что точность времени уменьшается при переходе вниз по уровням модели. При этом протокол NTP автоматически выбирает самый лучший из доступных серверов времени для синхронизации, что обеспечивает хорошую отказоустойчивость данного протокола.
В данном проекте мы будем получать точное время от сервера NTP с помощью платы NodeMCU ESP8266 и показывать его на экране OLED дисплея. Также на нашем сайте вы можете прочитать статью о подключении OLED дисплея к NodeMCU ESP8266.
Модуль ESP8266 может получать доступ к серверам NTP для считывания с них точного времени используя доступ к сети интернет. В нашем случае мы будем использовать протокол NTP в режиме клиент-сервер. NodeMCU ESP8266 будет работать в качестве клиентского устройства и соединяться с серверами NTP с помощью протокола UDP (User Datagram Protocol – протокол передачи дейтаграмм пользователя). Клиент передает пакет запроса на сервер NTP, который в ответ передает ему пакет с временной меткой, содержащий информацию о точности, временной зоне, временной метке UNIX и т.д. Затем клиент выделяет из этой совокупности информации необходимую ему дату и время и далее использует эту информацию по своему усмотрению (в нашем случае отображает на экране OLED дисплея).
Схема проекта
Схема интернет часов на NodeMCU ESP8266 и OLED дисплее представлена на следующем рисунке.
OLED дисплей в нашем проекте подключается к NodeMCU ESP8266 по протоколу SPI. Полная схема соединений между NodeMCU ESP8266 и OLED дисплеем представлена в следующей таблице.
OLED дисплей | NodeMCU ESP8266 |
GND | GND |
VDD | 3.3V |
SCK | D5 |
MOSI (SPI) или SDA (I2C) | D7 |
RESET | D3 |
DC | D2 |
CS | D8 |
Более подробно о подключении OLED дисплея к NodeMCU ESP8266 можно прочитать в этой статье.
Объяснение программы для модуля ESP8266
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Сначала в программе нам необходимо скачать и установить библиотеку NTP для модуля ESP8266 – таких библиотек достаточно много, вы можете использовать любую из них. Мы в данном проекте использовали библиотеку NTPClient от разработчика Taranais (скачать ее можно по этой ссылке) – она достаточно проста в использовании и содержит функции для получения времени и даты с серверов NTP. Плату ESP8266 NodeMCU мы будем программировать с помощью Arduino IDE.
Для установки библиотеки NTPClient скачайте ее по вышеприведенной ссылке, затем в Arduino IDE откройте пункт меню to Sketch > Include Library > Add .ZIP Library и укажите путь к папке, куда вы скачали Zip архив библиотеки. После этого перезагрузите Arduino IDE.
Библиотека NTPClient содержит примеры, открыть которые можно в пункте меню Examples > NTPClient > Advanced. Код в скетче данного примера позволяет считывать время с NTP сервера и отображать его в окне монитора последовательной связи. Мы возьмем код этого скетча за основу программы для нашего проекта и будем отображать текущее время и дату на OLED дисплее.
Библиотека ESP8266WiFi содержит Wi-Fi функции, позволяющие модулю ESP8266 подключаться к сети интернет. WiFiUDP.h содержит функции для передачи и приема UDP пакетов. Поскольку OLED дисплей мы подключаем к нашей плате NodeMCU ESP8266 по интерфейсу SPI, то нам необходимо в программе подключить библиотеку “SPI.h”. Библиотеки “Adafruit_GFX.h” и “Adafruit_SSD1306.h” будут использоваться для взаимодействия с OLED дисплеем.