Оглавление:

Домашняя метеостанция ESP-Now: 9 шагов (с изображениями)
Домашняя метеостанция ESP-Now: 9 шагов (с изображениями)

Видео: Домашняя метеостанция ESP-Now: 9 шагов (с изображениями)

Видео: Домашняя метеостанция ESP-Now: 9 шагов (с изображениями)
Видео: Домашняя метеостанция [ESPHome, Home Assistant, LCD2004, ESP8266] 2024, Ноябрь
Anonim
Домашняя метеостанция ESP-Now
Домашняя метеостанция ESP-Now

Я давно хотел иметь домашнюю метеостанцию, чтобы каждый член семьи мог легко проверить температуру и влажность. Помимо наблюдения за внешними условиями, я хотел также контролировать отдельные комнаты в доме и свою гаражную мастерскую. Это даст нам знать, когда наступит подходящее время для проветривания дома или включения осушителя (зимой здесь много дождей). Я создал сенсорную систему на основе ESP-Now, которая передает отчеты на локальный веб-сервер, который любой может проверить со своего компьютера или телефона. Для телефона я написал простое приложение для Android, чтобы сделать это еще проще.

Шаг 1. Детали дизайна

Детали дизайна
Детали дизайна

Я хотел иметь различные сенсорные станции, которые я мог бы разместить в разных местах, и чтобы они отчитывались на одной главной станции (или хабе), которая сохраняла бы информацию. Попробовав различные идеи, я решил использовать протокол Espressif ESP-Now, поскольку он позволяет осуществлять быструю связь напрямую между устройствами. Вы можете немного прочитать об ESP-Now здесь, и это репозиторий GitHub был большой частью моего вдохновения.

На первом рисунке показана схема системы. Каждый датчик сообщает свои измерения на устройство шлюза, которое пересылает данные на главный сервер по проводному последовательному соединению. Причина этого в том, что протокол ESP-Now не может быть активен одновременно с подключением WIFI. Чтобы пользователь мог получить доступ к веб-странице, Wi-Fi должен быть включен постоянно, а это делает невозможным использование связи ESP-Now на том же устройстве. В то время как устройство шлюза должно быть устройством на основе Espressif (поддерживающим ESP-Now), основным сервером может быть любое устройство, способное запускать веб-страницу.

Некоторые сенсорные станции будут работать от батарей (или от солнечных батарей), а другие просто будут иметь питание от сети. Однако я хотел, чтобы все использовали как можно меньше энергии, и именно здесь функция «глубокого сна», доступная для устройств ESP8266 и ESP32, оказывается чрезвычайно полезной. Сенсорные станции периодически просыпались, производили измерения, отправляли их на шлюзовое устройство и возвращались в спящий режим на некоторый заранее запрограммированный период времени. Их период пробуждения всего около 300 мс каждые 5 минут (в моем случае) значительно снижает их энергопотребление.

Шаг 2: датчики

Датчики
Датчики
Датчики
Датчики

Есть различные датчики на выбор для измерения параметров окружающей среды. Я решил использовать только датчики, поддерживающие связь I2C, так как они позволяют проводить быстрые измерения и работают с любым из имеющихся у меня устройств. Вместо того, чтобы работать с микросхемами напрямую, я искал готовые к использованию модули с одинаковыми выводами, чтобы упростить мои разработки. Я начал с того, что хотел измерить только температуру и влажность, поэтому выбрал модуль на основе SI7021. Позже мне понадобился датчик, который мог бы также измерять давление, и я решил попробовать сенсорные модули на базе BME280. В некоторых местах я даже хотел контролировать уровень освещенности, и модуль BH1750 идеально подходил для этого в качестве отдельного сенсорного модуля. Я купил свои сенсорные модули на ebay, и это те модули, которые я получил:

  • BME280 (GY-BMP / E280), измеряет температуру, влажность и давление
  • SI7021 (GY-21), измеряет температуру и влажность
  • BH1750 (GY-302), измеряет свет

Можно найти два стиля модулей печатной платы GY-BMP / E280. Оба имеют один и тот же вывод для контактов с 1 по 4. Один модуль имеет два дополнительных контакта, CSB и SDO. Эти два контакта предварительно подключены к 4-контактной версии модуля. Уровень вывода SDO определяет адрес I2C (Земля = по умолчанию 0x76, VCC = 0x77). Вывод CSB должен быть подключен к VCC, чтобы выбрать интерфейс I2C. Я предпочитаю 4-контактный модуль, так как он готов к использованию для моих целей.

В целом, эти модули очень удобны в использовании, поскольку в них уже установлены подтягивающие резисторы для линий связи, и все они работают от 3,3 В, поэтому они совместимы с платами на базе ESP8266. Обратите внимание, что контакты на этих микросхемах датчиков, как правило, не устойчивы к 5 В, поэтому их непосредственное сопряжение с чем-то вроде Arduino Uno может привести к их необратимому повреждению.

Шаг 3: сенсорные станции

Сенсорные станции
Сенсорные станции

Как уже упоминалось, все сенсорные станции будут устройствами Espressif, использующими протокол связи ESP-Now. Из предыдущих проектов и экспериментов у меня было несколько различных устройств, доступных для проведения моих первоначальных тестов и включения их в окончательный дизайн. У меня под рукой были следующие устройства:

  • два модуля ESP-01
  • две платы разработки Wemos D1 mini
  • одна плата для разработки Lolin ESP8266
  • одна плата последовательного набора WIFI ESP12E
  • одна плата GOOUUU ESP32 (38-контактная плата разработки)

У меня также была плата для разработки Wemos D1 R2, но с ней были проблемы, которые не позволяли ей просыпаться из глубокого сна, и в качестве устройства для ворот она вылетала и не перезагружалась должным образом. Позже я отремонтировал его, и он стал частью проекта открывания гаражных ворот. Чтобы «глубокий сон» работал, вывод RST ESP8266 должен быть подключен к выводу GPIO16, чтобы таймер сна мог разбудить устройство. В идеале это соединение должно быть выполнено с помощью диода Шоттки (катод к GPIO16), чтобы ручной сброс через соединение USB-TLL во время программирования все еще работал. Тем не менее, резистор малого номинала (300 Ом) или даже прямое проводное соединение все же может быть успешным.

Модули ESP-01 не обеспечивают легкий доступ к выводу GPIO16, и их необходимо припаивать непосредственно к IC. Это непростая задача, и я бы не рекомендовал это всем. Плата ESP12E с последовательным набором WIFI была в некотором роде новинкой и потребовала немало изменений, чтобы она была полезной для моих целей. Самыми простыми в использовании были доски типа Wemos D1 mini и доска Lolin. Устройства ESP32 не требуют никаких модификаций для работы Deepsleep. У Андреаса Списс есть хорошее руководство по этому поводу.

Шаг 4: сенсорная станция ESP-01

Сенсорная станция ESP-01
Сенсорная станция ESP-01
Сенсорная станция ESP-01
Сенсорная станция ESP-01
Сенсорная станция ESP-01
Сенсорная станция ESP-01

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

Платы ESP-01 очень компактны и имеют несколько цифровых выводов ввода-вывода для работы, но этого достаточно для интерфейса I2C. Однако платы требуют сложной модификации, чтобы позволить «глубокому сну» работать. На показанной фотографии провод был припаян от углового контакта (GPIO16) к контакту RST на заголовке. Я использовал изолированный «ремонтный» провод диаметром 0,1 мм. Изоляционное покрытие тает при нагревании, поэтому его можно припаять для ремонта следов и т. Д. На печатных платах, не беспокоясь о возникновении коротких замыканий в местах контакта провода с другими компонентами. Его размер затрудняет работу, и я припаял этот провод под микроскопом (в стиле любителей / коллекционеров марок). Имейте в виду, что разъем на правой стороне имеет расстояние между выводами 0,1 дюйма (2,54 мм). Установить здесь диод Шоттки будет совсем непросто, поэтому я решил просто попробовать провод в одиночку, и оба модуля проработали дольше в месяц без проблем.

Модули были установлены на двух созданных мной прототипах плат. Одна (№1) - это плата программатора, которая также позволяет устанавливать и тестировать модули I2C, а другая (№2) - это плата разработки / тестирования для устройств I2C. Для первой платы я спаял вместе старый USB-штекер и небольшую печатную плату для питания устройства напрямую от настенного USB-адаптера. Другой блок имеет обычное гнездо постоянного тока, модифицированное для установки в разъем с винтовыми клеммами, а также питается от настенного адаптера.

На схеме показано, как они связаны и как работает программатор. Других модулей ESP-01 у меня нет, так что срочно мне не понадобился программист. В будущем, скорее всего, сделаю для них печатную плату. На обеих платах установлен сенсорный модуль SI7021, так как меня не интересовали измерения давления в этих местах.

Шаг 5: Сенсорная станция ESP 12E Serial WIFI Kit

Сенсорная станция ESP 12E Serial WIFI Kit
Сенсорная станция ESP 12E Serial WIFI Kit
Сенсорная станция ESP 12E Serial WIFI Kit
Сенсорная станция ESP 12E Serial WIFI Kit

Плата ESP12E Serial WIFI Kit предназначалась не для разработки, а для демонстрации того, что можно сделать с этим устройством. Я купил его давно, чтобы немного узнать о программировании ESP8266, и, наконец, решил дать ему новое применение. Я удалил все светодиоды, которые были установлены для демонстрации, и добавил заголовок программирования USB, а также заголовок I2C, подходящий для модулей, которые я использую. К его аналоговому входу был подключен фоторезистор CdS, и я решил оставить его там. Это конкретное устройство собиралось контролировать мою гаражную мастерскую, и фотодатчика, который он имел, было достаточно, чтобы сообщить мне, если свет был случайно оставлен включенным. Для измерения освещенности я нормализовал показания, чтобы получить процентную мощность, и любое значение, превышающее «5» ночью, означало, что свет был оставлен включенным или дверь в дом не была должным образом закрыта. Контакты RST и GPIO16 четко обозначены на печатной плате, а соединяющий их диод Шоттки был установлен на нижней стороне печатной платы. Он питается от платы USB-последовательного порта, которая напрямую подключается к настенному зарядному устройству USB. У меня есть дополнения к этим платам с последовательным USB-портом, и сейчас он мне не нужен.

Я не делал схемы для этой платы и вообще не рекомендую покупать ее для этой цели. Платы Wemos D1 Mini гораздо более подходят, и о них мы поговорим далее. Хотя, если у вас есть один из них и вам нужен совет, я буду рад помочь.

Шаг 6: Миниатюрные сенсорные станции D1

Миниатюрные сенсорные станции D1
Миниатюрные сенсорные станции D1
Миниатюрные сенсорные станции D1
Миниатюрные сенсорные станции D1
Миниатюрные сенсорные станции D1
Миниатюрные сенсорные станции D1

Я предпочитаю использовать платы для разработки ESP8266 типа Wemos D1 Mini, и если бы мне пришлось делать это заново, я бы просто использовал их. Они имеют большое количество доступных контактов ввода-вывода, могут быть напрямую запрограммированы через Arduino IDE и по-прежнему довольно компактны. Выводом D0 на этих платах является GPIO16, и подключить диод Шоттки довольно просто. На схеме показано, как я подключил эти платы, и обе они используют модуль датчика BME2808.

Одна из двух плат используется для наблюдения за погодой на улице и работает от солнечной батареи. Солнечная панель 165 мм x 135 мм (6 В, 3,5 Вт) подключена к модулю зарядки литий-ионного аккумулятора TP4056 (см. Схему установки сенсорной станции на солнечной батарее). Этот конкретный модуль зарядки (03962A) имеет схему защиты аккумулятора, которая необходима, если аккумулятор (блок) не содержит таковой. Литий-ионный аккумулятор был переработан из старого аккумуляторного блока ноутбука, и он все еще может удерживать достаточный заряд для работы платы D1 Mini, особенно с включенным режимом глубокого сна. Плата была помещена в пластиковый корпус, чтобы защитить ее от непогоды. Однако, чтобы внутренняя часть подвергалась воздействию внешней температуры и влажности, на противоположных сторонах были просверлены два отверстия диаметром 25 мм и покрыты (изнутри) черной ландшафтной тканью. Ткань разработана таким образом, чтобы влага могла проникать внутрь, и поэтому влажность можно было измерить. В одном конце корпуса просверлили небольшое отверстие и установили прозрачное пластиковое окно. Здесь разместили модуль светового датчика BH1750. Вся установка размещается на открытом воздухе в тени (не под прямыми солнечными лучами), датчик освещенности должен быть направлен на открытое пространство. Он работал от солнечной батареи почти 4 недели в нашу дождливую / пасмурную зимнюю погоду.

Шаг 7: шлюз и веб-сервер

Шлюз и веб-сервер
Шлюз и веб-сервер
Шлюз и веб-сервер
Шлюз и веб-сервер
Шлюз и веб-сервер
Шлюз и веб-сервер

Плата Lolin NodeMCU V3 (ESP8266) использовалась для устройства ESP-Now Gateway, а ESP32 (плата GOOUUU) использовалась для веб-сервера. Почти любая плата ESP8266 или даже ESP32 могла бы служить в качестве устройства шлюза, это была просто плата, которую я «оставил» после того, как использовал все остальные платы, которые у меня были.

Я использовал плату ESP32, так как мне нужна плата с немного большей вычислительной мощностью для сбора данных, их сортировки, сохранения в хранилище и запуска веб-сервера. В будущем он также может иметь собственный сенсор и локальный (OLED) дисплей. Для хранения использовалась SD-карта с индивидуальным адаптером. Я использовал обычный переходник с microSD на SD-карту и припаял 7-контактный штекер (шаг 0,1 дюйма) к контактам с покрытием. Я последовал совету этого GitHub, чтобы выполнить соединения.

Установка для создания прототипа (с проводами Dupont) не включает сенсорный модуль, но готовая печатная плата, которую я разработал, позволяет установить один, а также небольшой OLED-дисплей. Подробности того, как я спроектировал эту печатную плату, являются частью другого руководства.

Шаг 8: Программное обеспечение

Программное обеспечение
Программное обеспечение

ESP8266 (ESP-NOW) Устройства

Программное обеспечение для всех устройств было написано с использованием Arduino IDE (v1.87). Каждая сенсорная станция запускает идентичный код. Они отличаются только тем, какие контакты используются для связи I2C и к какому модулю датчика они подключены. Самое главное, они отправляют идентичный пакет данных измерений на станцию ESP-Now Gateway, независимо от того, есть ли у них один и тот же датчик. Это означает, что некоторые сенсорные станции будут подставлять фиктивные значения для измерений давления и уровня освещенности, если у них нет сенсоров для получения реальных значений. Код для каждой станции и шлюза был адаптирован из примеров Энтони Элдера на этом GitHub.

Код устройства шлюза использовал SoftwareSerial для связи с веб-сервером, поскольку ESP8266 имеет только один полностью функционирующий аппаратный UART. При максимальной скорости 9600 бод он кажется вполне надежным и более чем достаточным для отправки этих относительно небольших пакетов данных. Устройство шлюза также запрограммировано с частным MAC-адресом. Причина этого в том, что если требуется замена, нет необходимости перепрограммировать все сенсорные станции на новый MAC-адрес получателя.

ESP32 (веб-сервер)

Каждая сенсорная станция отправляет свой пакет данных шлюзу, который пересылает его на веб-сервер. Вместе с пакетом данных также отправляется MAC-адрес сенсорной станции для идентификации каждой станции. На веб-сервере есть справочная таблица для определения местоположения каждого датчика и соответствующей сортировки данных. Временной интервал между измерениями был установлен на 5 минут плюс случайный фактор, чтобы датчики не «сталкивались» друг с другом при отправке на устройство прохода.

Домашний маршрутизатор WIFI был настроен на выделение фиксированного IP-адреса веб-серверу при его подключении к Wi-Fi. Для меня это было 192.168.1.111. Ввод этого адреса в любом браузере будет подключаться к веб-серверу метеостанции, пока пользователь находится в зоне действия Wi-Fi (и подключается) к домашней сети. Когда пользователь подключается к веб-странице, веб-сервер отвечает таблицей измерений и включает время последнего измерения каждого датчика. Таким образом, если сенсорная станция перестает отвечать, это можно увидеть из таблицы, если показания более 5-6 минут.

Данные сохраняются в отдельных текстовых файлах на SD-карте, и их также можно загрузить с веб-страницы. Его можно импортировать в Excel или любое другое приложение для построения графиков данных.

Приложение для Android

Чтобы упростить просмотр местной информации о погоде на смартфоне, я создал относительно Android-приложение с помощью Android Studio. Он доступен на моей странице GitHub здесь. Он использует класс webview для загрузки веб-страницы с сервера и, следовательно, с ограниченной функциональностью. Он не может загружать файлы данных, и мне они все равно не нужны на моем телефоне.

Шаг 9: Результаты

Полученные результаты
Полученные результаты

Наконец, вот несколько результатов для моей домашней метеостанции. Данные были загружены на ноутбук и нанесены на график в Matlab. Я прикрепил свои сценарии Matlab, и вы также можете запускать их в GNU Octave. Наружный датчик работает от солнечной батареи почти 4 недели, и в это время года у нас редко бывает солнце. Пока все работает хорошо, и все в семье могут сами посмотреть погоду, а не спрашивать меня сейчас!

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