Esp8266 народный мониторинг два датчика

Содержание

Сообщества › Arduino для автомобиля › Блог › WIFI датчик температуры на базе WIFI модуля ESP8266 и датчика температуры DS18B20

Предисловие: Содержание данного поста на первый взгляд может не подходить для форума «ARDUINO для автомобиля», но если внимательно посмотреть, я думаю найдется, что то полезное…
1. Введение.
По случаю попали ко мне в руки WIFI модуль ESP8266 (ESP-01) и датчик температуры DS18B20. Задача – построить автономный датчик температуры, данные с которого можно посмотреть на компьютере/планшете. В будущем эти данные должны использоваться для контроля в «умном доме»…
Чип ESP8266 очень подходит для этого, так как обладает небольшими размерами, ценой, а самое главное, что его контроллер может заменить Arduino – он может сам выполнять все необходимые действия.
Вариантов модулей на чипе ESP8266 множество — все о ESP8266 можно прочесть тут — esp8266.ru/ больше чем здесь, я думаю вы на русском языке не найдете.

У меня ESP-01 – у которого только два управляемых выхода – GPIO 0 и GPIO 2:

Что касается датчика температуры DS18B20 – тоже достаточно популярное устройство, а главное он цифровой – значит, выдает готовые значения и работает по протоколу 1-Wire – можно будет использовать библиотеку OneWire. Кроме того специально для температурных датчиков Dallas DS18B20 есть Arduino-библиотека DallasTemperature. milesburton.com/Main_Page…mperature_Control_Library

Что касается построения такого WIFI датчика температуры – устройство ни уникальное – в интернете есть описания подобных схем на тех же компонентах, но программируются на языке Lua – вариант geektimes.ru/post/255594/. Но судя по описанию – там тоже все не просто так. Да и не хотелось «учить» еще один язык…
Я к Arduino уже как то привык.
Поэтому решено искать варианты Arduino скетчей. Тем более что и тут есть наработки:
— датчик температуры для проекта «Народный мониторинг» —
arduinolab.pw/index.php/2…o-monitoringa-na-esp8266/ — его я тоже попробовал.
А вот тут от того же автора скетч который позволяет выводить параметры температуры через браузер – именно его я использовал. vk.com/doc148062645_43703…630&dl=4f5f570366aac0e93a
Но оказалось, что бы его загрузить предстоит кое-что сделать.

2. Нужно:
1. Модуль ESP8266 (ESP-01);
2. Датчик температуры DS18B20;
3. USB-UART-TTL адаптер – например CР2102 (+драйвер);
4. Резистор 4,7 кОм;
5. Провода мама – мама/папа;
6. Изолента/термоусадка;

3. Настройка ADRUINO IDE для работы с WIFI ESP8266.
Для того, что бы загружать скетчи через ADRUINO IDE непосредственно на модуль ESP8266 необходимо провести апгрейд ADRUINO IDE – загрузить в него программу «ESP8266» для поддержки модуля (см. ссылку github.com/esp8266/arduino).
Как сказано на одном из сайтов:
«Программа ESP8266 поставляется с библиотеками, которые позволяют через интерфейс WiFi с помощью протоколов IP, TCP, UDP обмениваться данными с WEB, SSDP, mDNS и DNS серверами, использовать flash память для создания файловой системы, обеспечить работу с SD картами, сервоприводами, работать с периферийными устройствами по шинам SPI и I2C.»

Для этого нужно:
1. Зайти в меню «Файл» — выбрать «Настройки».

2. В ячейку «Дополнительные ссылки для Менеджера плат» внести ссылку arduino.esp8266.com/stabl…age_esp8266com_index.json

3. Зайти в меню «Инструменты» в «Плата:…» — выбрать «Менеджер плат…».

4. В закладке «Менеджер плат» нужно найти нужную прошивку — в поле указать например esp8266 – в окне высветится нужная прошивка.

5. Установить выбранную прошивку «esp8266» – щелкнуть на поле с прошивкой – появится кнопка «Установить» — нажать. Установка займет некоторое время – будет скачивать около 153 Мб.
6. После завершения установки в меню «Инструменты» в закладке «Плата:…» ниже перечня плат Arduino появится новые платы – «ESP8266 Modules».

7. Выбрать нужный модуль – в общем случае это «Generic ESP8266 Module».

4. Подключение ESP8266 к компьютеру для перепрошивки.
Как правильно подключить модуль много и хорошо написано – например тут:
esp8266.ru/esp8266-podklu…bnovlenie-proshivki/#full
Я для подключения ESP8266 к компьютеру для перепрошивки использовал USB-UART-TTL адаптер CР2102.

Схема подключения обычная да UART, за исключением двух особенностей:
1. Для включения модуля нужно подать +3,3В на вывод модуля CH_PD. Я припаял перемычку с VCC.
2. На время загрузки скетча необходимо подать «минус» на вывод модуля GPIO 0.

Если речь идет о настройке/отладки нескольких модулей имеет смысл сделать специальный комплект проводов для подключения.

Так же есть особенность с питанием модуля.
Во первых, он должен питаться от 3,3 В.
Во вторых, он очень прожорливый – мощности питания от USB-UART-TTL адаптера ему не хватало – компьютер постоянно сообщал, что к нему «подключено неизвестное устройство, при установке которого возникли проблемы».

Читайте также:  Академия народного хозяйства при правительстве рф фото

Поэтому для питания модуля нужно организовать отдельное питание.
Если предполагается использовать более высокое напряжение — нужно использовать понижающий стабилизатор.
В моем случае я использовал две батареи АА 1,5В соединенные последовательно – но испытания показали хватает не на долго (возможно батареи были севшие).
ВНИМАНИЕ! При подключении внешнего источника питания при прошивке нужно соединить его с минусом USB-UART-TTL адаптера.

5. Загрузка скетча.
Если все сделали – можно начинать загрузку скетча:
vk.com/doc148062645_43703…630&dl=4f5f570366aac0e93a
Но для начала нужно в строчках с именем сети и пароля указать имя и пароль вашей сети:
const char *ssid = «…»;
const char *password = «…»;
Процесс загрузки визуально отличается от привычной загрузки – он будет сопровождаться рядом точек в окне статуса загрузки (см. фото).

Если этого не происходит и появилось сообщение об ошибке – включите и выключите питание модуля WIFI.
Если загрузка прошла успешно, уберите перемычку с GPIO 0 и «массы».
Откройте Serial порт в Arduino IDE и убедитесь, что модуль начал работать и самое важно – запишите IP адрес вашего модуля:
Connected to «Название вашей сети»
IP address: 192.168.ХХ.ХХ
MDNS responder started
HTTP server started Теперь можно отключать USB-UART-TTL адаптер и подключать датчик температуры.

6. Подключение датчика температуры.
Схема подключения датчика температуры типовая (см. рисунок).

Потребуется правда поработать паяльником – припаять сопротивление 4,7 кОм и датчик температуры, а так же перемычку включения питания (см. ранее).

Есть еще один вывод который может пригодится — вывод RST – «Сброс» — для этого нужно подать на него «минус». Пару раз пригодилась эта «кнопка» — возможно потому, что схема собрана на весу…

7. Работа датчика.
Если все прошло правильно датчик начнет помаргивать синим светодиодом и излучать в WIFI эфир температуру. А вот что бы эта температура стала «видима» нужно в браузере указать IP адрес вашего модуля (мы его знаем из пункта 5) и на экране появится вот такая картинка:

Источник

Отображение показаний с нескольких DS18B20 с помощью веб-сервера на ESP8266 NodeMCU

Вы когда-нибудь хотели, чтобы датчики были разбросаны по всему дому и саду, регулярно сообщая о своей температуре на центральный сервер? Тогда этот IoT проект может стать для вас хорошей отправной точкой!

Отображение показаний с нескольких DS18B20 с помощью веб-сервера на ESP8266 NodeMCU

В этом проекте NodeMCU ESP8266 используется в качестве устройства управления, которое легко подключается к существующей сети Wi-Fi и создает веб-сервер. Когда любое подключенное устройство обращается к этому веб-серверу, ESP8266 считывает температуру с нескольких датчиков температуры DS18B20 и отправляет эти показания веб-браузеру подключенного устройства, выводя их в приятном интерфейсе. Интересно? Давайте начнем!

Несколько датчиков DS18B20 на одной шине

Одна из важнейших особенностей DS18B20 заключается в том, что на одной шине 1-Wire могут сосуществовать несколько DS18B20. Поскольку каждый DS18B20 имеет уникальный 64-битный серийный номер, записанный на заводе, их легко отличить друг от друга.

Эта особенность может быть огромным преимуществом, если вы хотите контролировать множество датчиков DS18B20, распределенных по большой площади. В данном руководстве мы это и сделаем.

Подключение нескольких датчиков DS18B20 ESP8266 NodeMCU

Подключить датчики DS18B20 к ESP8266 NodeMCU довольно просто.

Рисунок 1 – Распиновка датчика температуры DS18B20 в корпусе TO-92 и в водонепроницаемом корпусе

Начните с параллельного соединения всех датчиков DS18B20, то есть соединения всех выводов GND, затем всех выводов VDD, и последнее, всех сигнальных выводов. Затем подключите VDD к выходу 3.3V на NodeMCU, GND – к GND на NodeMCU, и сигнальных выводов к цифровому выводу D2 на ESP8266 NodeMCU.

Затем, чтобы обеспечить стабильность передачи данных, необходимо добавить один подтягивающий резистор 4,7 кОм между сигнальной шиной и шиной питания.

Рисунок 2 – Подключение нескольких датчиков температуры DS18B20 к ESP8266

Подготовка IDE Arduino

Существует дополнение для Arduino IDE, которое позволяет программировать ESP8266 NodeMCU. Чтобы подготовить вашу Arduino IDE к работе с ESP8266, следуйте инструкциям, приведенным ниже.

Установка библиотеки для DS18B20

Протокол Dallas 1-Wire несколько сложен и требует много кода для парсинга связи. Чтобы скрыть эту ненужную сложность, мы установим библиотеку DallasTemperature.h, чтобы мы могли выполнять простые команды для получения показаний температуры от датчика.

Чтобы установить библиотеку, перейдите в раздел «Скетч»→ «Подключить библиотеку» → «Управление библиотеками…». Подождите, пока менеджер библиотеки загрузит индекс библиотек и обновит список установленных библиотек.

Чтобы отфильтровать результаты поиска, введите «ds18b20». Там должна быть пара записей. Ищите DallasTemperature от Miles Burton. Нажмите на эту запись, а затем выберите Установка.

Рисунок 3 – Установка библиотеки DallasTemperature в Arduino IDE

Эта библиотека DallasTemperature является аппаратно-зависимой библиотекой, которая обрабатывает функции более низкого уровня. Она должна быть связана с библиотекой OneWire для связи с любым устройством 1-Wire, а не только с DS18B20. Установите и эту библиотеку.

Рисунок 4 – Установка библиотеки OneWire в Arduino IDE

Поиск адресов DS18B20 в шине

Мы знаем, что каждому DS18B20 назначен уникальный 64-битный адрес, помогающий отличать их друг от друга. Сначала мы найдем этот адрес, чтобы пометить каждый датчик соответствующим образом. Затем этот адрес можно использовать для считывания показаний каждого датчика по отдельности.

Читайте также:  Как снять боль при желчнокаменной болезни народными средствами

Следующий скетч обнаруживает все датчики DS18B20, присутствующие на шине, и выводит их адреса на шине 1-Wire в монитор последовательного порта.

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

Теперь откройте монитор последовательного порта. У вас должно получиться примерно следующее.

Рисунок 5 – Нахождение адресов 1-Wire всех датчиков DS18B20 на шине

Скопируйте все адреса по мере необходимости в следующий скетч.

Создание веб-сервера NodeMCU ESP8266, используя Wi-Fi режим Station (STA)

Теперь мы собираемся настроить ESP8266 в режим станции (STA) и создать веб-сервер для выдачи веб-страниц любому подключенному клиента в существующей сети.

Если вы хотите узнать о создании веб-сервера с ESP8266 NodeMCU в режиме AP/STA, ознакомьтесь с этим руководством:

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

Чтобы ESP8266 NodeMCU мог установить соединение с существующей сетью, вам необходимо изменить следующие две переменные в соответствии с учетными данными вашей сети.

Перед выдачей веб-страницы ESP8266 считывает температуру с каждого DS18B20 по заданному адресу, поэтому вам необходимо изменить адреса датчиков DS18B20 на те, что вы выяснили в предыдущем скетче.

После внесения этих изменений, попробуйте загрузить скетч.

Доступ к веб-серверу

После загрузки скетча откройте монитор последовательного порта со скоростью 115200 бит/с и нажмите кнопку RST на NodeMCU. Если всё в порядке, он выведет динамический IP адрес, полученный от вашего маршрутизатора, и покажет сообщение о том, что HTTP сервер запущен.

Рисунок 6 – Монитор последовательного порта – сервер запущен

Затем загрузите браузер и введите IP адрес, указанный в мониторе последовательного порта. ESP8266 NodeMCU должен выдать веб-страницу, показывающую температуры со всех датчиков DS18B20.

Рисунок 7 – Показания с нескольких датчиков DS18B20 на странице веб-сервера ESP8266 (без CSS)

Подробное объяснение кода

Скетч начинается с включения следующих библиотек:

Затем мы создаем объекты, необходимые для датчика температуры, и переменные для хранения показаний температуры. Датчик температуры подключен к GPIO D2.

Далее вводим адреса, которые были ранее выяснены, для каждого датчика температуры. В нашем случае имеем следующее.

Поскольку мы настраиваем ESP8266 в режиме станции (STA), он подключится к существующей сети Wi-Fi. Следовательно, нам необходимо предоставить ему SSID и пароль вашей сети. Затем мы запускаем веб-сервер на порту 80.

Внутренности функции setup()

После подключения ESP8266 к сети скетч выводит IP-адрес, назначенный ESP8266, напечатав значение результата метода WiFi.localIP() в монитор последовательного порта.

Внутренности функции loop()

Точно так же нам нужно создать функцию для обработки страницы ошибки 404.

Отображение веб-страницы HTML

Затем элемент viewport делает веб-страницу адаптивной в любом веб-браузере. Далее тег title устанавливает заголовок страницы.

Стилизация веб-страницы

Далее идет немного CSS кода для стилизации внешнего вида веб-страницы. Мы выбираем шрифт Helvetica, определяем контент, который будет отображаться в виде inline-block и выровнен по центру.

Установка заголовка веб-страницы

Далее устанавливаем заголовок на веб-странице; вы можете изменить этот текст на то, что подходит для вашего приложения.

Отображение показаний температуры на веб-странице

Стилизация веб-страницы, чтобы она выглядела более профессионально

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

Рисунок 8 – Показания с нескольких датчиков DS18B20 на странице веб-сервера ESP8266 (с CSS)

Если вы попытаетесь сравнить эту функцию с предыдущей, то увидите, что они похожи, за исключением следующих изменений.

На нашей веб-странице мы будем использовать шрифт Open Sans от Google. Обратите внимание, что вы не можете видеть шрифт Google, без активного подключения к интернету на устройстве, с которого вы собираетесь получить доступ к странице. Шрифты Google загружаются на лету.

Рисунок 9 – SVG иконки

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

Добавив один мета-тег в ваш HTML-документ, вы можете дать браузеру команду автоматически перезагружать страницу с заданным интервалом.

Поместите этот код в тег вашего документа, и этот мета-тег укажет браузеру обновлять страницу каждые две секунды. Довольно изящно!

Динамическая загрузка данных датчиков с помощью AJAX

Если ваша веб-страница много весит, то полное ее обновление не слишком практично. Лучше использовать асинхронный Javascript и Xml (AJAX), чтобы мы могли запрашивать данные с сервера асинхронно (в фоновом режиме), не обновляя страницу.

Источник

Велосипед из энергомонитора PZEM004T и ESP8266, с Народным мониторингом

Задался я вопросом — куда девается ток из проводов? Вроде топим дом газом, в доме все лампы диодные, посудомойку включаем в ночь, бани с электропечкой пока нет, а электричество все время куда-то девается. Непорядок. Надо бы за ним проследить.
Добро пожаловать под кат…

Первый шаг — общий мониторинг потребления

Задачи

Я решил затеять охоту на стадо зайцев. Зайцами были выбраны:

Железо

Для решения поставленных задач было выбрано:

Читайте также:  Зубы чувствуют холодное и горячее народные рецепты

Прошивка

Посмотрел имеющиеся в сети. Как обычно не нашел подходящей и решил написать свою.
За базу взял свой же проект для реле Sonoff (простейший функционал, по HTTP и по кнопке включается и выключается, больше ничего не умеет; используется совместно с MacroDroid для щадящего питания телефона c постоянно включенным экраном — у предыдущего от постоянного заряда аккумулятор вздулся и выдавил экран). Но кроме функционала реле, сборка имеет http сервер, настройки WiFi, NTP, работает с кнопкой GPIO0 — разные действия от длительности нажатия, моргает по-всякому лампочкой (например отсчет секунд нажатия кнопки, отражение состояния реле и WiFi)…

Естественно несколько доработал настройки:

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

Учел, что PZEM004T считает максимум 9999кВт*ч, потом сбрасывается — реализовал учет переполнений. Реализовал двухтарифный счет. Так же реализовал учет средних значений параметров — показания считываются примерно раз в 2сек, а на Народный мониториг надо передавать данные раз в 5мин, естественно средние.

Добавил в систему работу с массивом датчиков DS18B20. Данные считываются поочередно с периодом 2сек на датчик. Т.е. ищем датчик, нашли — получаем данные, через 2сек ищем следующий и т.д. Кончились датчики — начинаем с начала. Т.е. при использовании только одного датчика период его опроса 4сек. Для этих датчиков так же сделан расчет средних значений.

Актуальные данные энергомонитора можно получить по HTTP:

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

Реализовал публикацию данных по протоколу MQTT/UDP. Добавил поддержку этого протокола и датчика PZEM004T в свой монитор:


Это мой не удавшийся проект контроллера температуры (Фиаско. История одной самоделки IoT), который я решил оставить в качестве только монитора.

Реализовал публикацию данных на Народном мониторинге:

Ребятам из Народного мониторинга большой респект! Передача данных в сервис элементарна, есть средство возможность посмотреть поступающие данные для отладки взаимодействия, можно просто управлять данными датчиков.
Система может строить зачетные графики (ниже — каша из графиков, просто пример):

Так же есть возможность оповещения о состоянии датчиков (временно отключил передачу данных для теста):

Естественно, добавил настройки публикации данных:

Итоги

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

Когда наберется статистика для графиков — буду дальнейшие шаги предпринимать.

Кто захочет заиметь себе такой энергомонитор — велкам в личку за прошивкой (Халява, сэр!).

При разработке девайса столкнулся с мистикой — при питании ESP от USB компа, от любой зарядки телефона — все работает. При питании от встраиваемого БП — не работает. Привлек для расследования логический анализатор и симплескоп — питание от синего блока вроде в порядке, сигналы от ESP идут корректные, а обратно — тишина. Другой блок питания — все отлично работает.

Методом научного тыка осознал, что когда я использую встраиваемый БП — я подключаю его к питанию PZEM004T, то есть в этом случае два устройства стартуют одновременно (с другими БП одновременное включение не возможно). А я для коммуникации использую аппаратный UART, на который ESP при старте выкидывает кучу мусора. PZEM004T не может это переварить при старте и зависает. Если же PZEM004T уже включен — старт ESP и мусор в порту он переживает без проблем.
Решением стало использование SoftwareSerial, с ним все работает отлично.

Источник

Обмен данными между NarodMon.ru и Умным домом

Разобраться с сервисом narodmon.ru меня сподвигла статья Погода с сервиса NarodMon в HomeKit с помощью Node-Red. Раньше я периодически заходил на этот сайт посмотреть реальную температуру с датчика в своем городе.

Что понадобится сделать?

Собираем устройство

Итак, нам понадобятся:

WiFi-IoT

Сразу же переходим на вкладку Main и настраиваем Wi-FI подключение со своим роутером. Указываем:

Приступим к настройке постинга нашей температуры на сервис narodmon.ru. Для этого открываем вкладку Servers и ставим галочку напротив » Enable NarodMon.ru send», время так и оставляем 5 минут. Ниже видим ID нашего устройства, он нам понадобится для добавления датчика на самом сайте NarodMon, поэтому копируем его в буфер обмена.

Добавляем датчик по MQTT

Для добавления датчика по MQTT, необходимо прослушать топик в таком виде: admin/#

Приведу пример конфига для добавления в HomeBridge:

Также могу привести пример и для Home Assistant:

ESP Easy

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

Сразу начну с того, что у нас есть ESP, к ней подключены датчики, и мы хотим отправлять данные на NarodMon.ru. Чтобы было понятнее, приведу скрин с девайсами.

Разберем этот скрипт, а точнее нас интересует только строка, которая начинается: SendToHTTP. Нам необходимо подставить свои данные, а именно:

Далее в квадратных скобках:

Источник

Поделиться с друзьями
Расскажем обо всем понемногу