Nodemcu v3 lua wi fi esp8266 ch340 подключение датчика температуры
Вы когда-нибудь хотели, чтобы датчики были разбросаны по всему вашему дому и саду, регулярно сообщая о своей температуре центральному серверу? Тогда этот IoT проект может стать для вас хорошей отправной точкой! Данный проект использует ESP8266 NodeMCU в качестве управляющего устройства, которое легко подключается к существующей сети Wi-Fi и создает веб-сервер. Когда какое-либо подключенное устройство получает доступ к этому веб-серверу, ESP8266 NodeMCU считывает температуру и относительную влажность с датчика DHT11, DHT22/AM2302 и отправляет его в красивом виде в веб-браузер этого устройства. Интересно? Давайте начнем!
Взаимодействие ESP8266 NodeMCU с датчиками температуры и влажности DHT11 и DHT22 и вывод показаний, используя веб-сервер
Это может показаться пугающим, но прежде чем углубляться в данное руководство, есть несколько концепций, с которыми вы должны быть знакомы. Если какое-либо из представленных ниже понятий звучит для вас незнакомо, попробуйте сначала прочитать (хотя бы вскользь) следующие статьи:
Подключение датчика BME280 к плате ESP8266 NodeMCU
Подключение довольно простое. Начните с подключения вывода VIN к выводу 3.3V на ESP8266 NodeMCU и соедините выводы GND на данных платах.
Затем подключите вывод SCL к тактовому выводу I2C D1 на вашей плате ESP8266 и подключите вывод SDA к выводу данных I2C D2 на ESP8266.
На следующей схеме показано, как всё подключить.
Рисунок 3 – Схема подключения датчика температуры, влажности и давления BME280 к ESP8266 NodeMCU
Стилизация веб-страницы
Далее идет немного CSS кода для стилизации внешнего вида веб-страницы. Мы выбираем шрифт Helvetica, определяем контент, который будет отображаться в виде inline-block и выровнен по центру.
Следующий код устанавливает цвет, шрифт и поля вокруг элементов body , H1 и p .
Динамическая загрузка данных датчиков с помощью AJAX
Если ваша веб-страница много весит, то полное ее обновление не слишком практично. Лучше использовать асинхронный Javascript и Xml (AJAX), чтобы мы могли запрашивать данные с сервера асинхронно (в фоновом режиме), не обновляя страницу.
- запрашивать данные с сервера после загрузки страницы;
- получать данные с сервера после загрузки страницы;
- отправлять данные на сервер в фоновом режиме.
Ниже приведен скрипт AJAX, который мы будем использовать. Поместите этот скрипт непосредственно перед закрывающим тегом .
Скрипт начинается с тега , так как AJAX-скрипт – это не что иное, как javascript, и поэтому нужно писать его в теге . Чтобы данная функция вызывалась повторно, мы будем использовать функцию javascript setInterval() . Она принимает два параметра: функцию для выполнения и интервал времени (в миллисекундах), через который выполнять указанную функцию.
- 0: запрос не инициализирован;
- 1: установлено подключение к серверу;
- 2: запрос получен;
- 3: обработка запроса;
- 4: запрос завершен, и ответ готов.
- 200: OK;
- 403: запрещено;
- 404: страница не найдена.
Когда readyState равен 4, а status – 200, ответ готов. Теперь обновляется содержимое элемента body (содержащего значения температуры, влажности, давления и высоты).
Всем добрый день.
В акции про Esp-wroom-02 были вопросы для чего можно использовать подобные модули. В сегодняшнем обзоре «сделай сам» мы познакомимся с датчиком температуры DS18B20 в защищенном корпусе, а так же приделаем к нему WiFi, научимся собирать телеметрию и строить графики. Цена в 12$ за пучок датчиков из 10 штук.
Доступ к веб-серверу
Рисунок 6 – Монитор последовательного порта – сервер запущен
Затем загрузите браузер и введите IP адрес, указанный в мониторе последовательного порта. ESP8266 NodeMCU должен выдать веб-страницу, показывающую температуры со всех датчиков DS18B20.
Рисунок 7 – Показания с нескольких датчиков DS18B20 на странице веб-сервера ESP8266 (без CSS)
Внутренности функции setup()
Теперь нам нужно подключиться к сети Wi-Fi с помощью функции WiFi.begin() . Данная функция принимает в качестве параметров SSID (имя сети) и пароль.
Пока ESP8266 пытается подключиться к сети, мы проверяем статус подключения с помощью функции WiFi.status() .
После подключения ESP8266 к сети скетч выводит IP-адрес, назначенный ESP8266, напечатав значение результата метода WiFi.localIP() в монитор последовательного порта.
Теперь, чтобы запустить сервер, вызываем метод begin() для объекта server .
Подробное объяснение кода
Скетч начинается с включения следующих библиотек:
Затем мы создаем объекты, необходимые для датчика температуры, и переменные для хранения показаний температуры. Датчик температуры подключен к GPIO D2.
Далее вводим адреса, которые были ранее выяснены, для каждого датчика температуры. В нашем случае имеем следующее.
Поскольку мы настраиваем ESP8266 в режиме станции (STA), он подключится к существующей сети Wi-Fi. Следовательно, нам необходимо предоставить ему SSID и пароль вашей сети. Затем мы запускаем веб-сервер на порту 80.
Подключение датчика DHT11, DHT22/AM2302 к плате ESP8266 NodeMCU
Подключить датчик DHT11/DHT22/AM2302 к ESP8266 NodeMCU довольно просто. Начните с установки NodeMCU на макетную плату, чтобы каждая сторона платы NodeMCU была на отдельной стороне макетной платы.
Теперь установите датчик на макетную плату, в стороне от NodeMCU. Подключите вывод VCC датчика к выводу 3,3V на NodeMCU и соедините выводы земли датчика и платы. Также подключите вывод данных датчика к выводу D8 платы ESP8266 NodeMCU. Наконец, нам нужно установить подтягивающий резистор 10 кОм между линией VCC и линией данных, чтобы на ней поддерживался высокий логический уровень для корректной связи между датчиком и NodeMCU. Если у вас датчик установлен на отдельную плату, возможно, вам не нужно добавлять какие-либо внешние подтягивающие резисторы. В этом случае датчик поставляется уже со встроенным подтягивающим резистором.
Когда вы закончите, у вас должно получиться что-то похожее на рисунок ниже.
Рисунок 1 – Подключение DHT11, датчика температуры и влажности, к ESP8266 NodeMCU Рисунок 2 – Подключение DHT22, датчика температуры и влажности, к ESP8266 NodeMCU
Стилизация веб-страницы, чтобы она выглядела более профессионально
Программисты, подобные нам, часто боятся дизайна – но небольшое усилие может сделать вашу веб-страницу более привлекательной и профессиональной. Скриншот, приведенный ниже, даст вам базовое представление о том, что мы собираемся делать.
Рисунок 8 – Показания с нескольких датчиков DS18B20 на странице веб-сервера ESP8266 (с CSS)
Довольно красиво, правда? Давайте без лишних слов, применим стиль к нашей предыдущей HTML-странице. Для начала скопируйте и вставьте приведенный ниже код, чтобы заменить в приведенном выше скетче функцию SendHTML() .
Если вы попытаетесь сравнить эту функцию с предыдущей, то увидите, что они похожи, за исключением следующих изменений.
На нашей веб-странице мы будем использовать шрифт Open Sans от Google. Обратите внимание, что вы не можете видеть шрифт Google, без активного подключения к интернету на устройстве, с которого вы собираетесь получить доступ к странице. Шрифты Google загружаются на лету.
Иконки, используемые для отображения показаний температуры, на самом деле является масштабируемой векторной графикой (SVG), определенной в теге . Создание SVG не требует каких-либо специальных навыков программирования. Для создания графики для вашей страницы вы можете использовать любой редактор SVG. Мы использовали эти иконки SVG.
Рисунок 9 – SVG иконки
Отображение показаний температуры на веб-странице
Чтобы динамически отображать показания температуры, мы помещаем эти значения в теги параграфов. Для отображения символа градуса мы используем сущность HTML ° .
Создание веб-сервера NodeMCU ESP8266, используя Wi-Fi режим Station (STA)
Теперь перейдем к более интересному!
Как следует из заголовка, мы собираемся настроить наш ESP8266 NodeMCU в режим Station (STA) и создать веб-сервер для выдачи веб-страниц любому подключенному к существующей сети клиенту.
Прежде чем приступить к загрузке скетча, чтобы он у вас заработал, необходимо внести одно изменение. Чтобы ESP8266 NodeMCU мог установить соединение с существующей сетью, вам необходимо изменить следующие две переменные в соответствии с учетными данными вашей сети.
Как только вы это сделаете, попробуйте загрузить скетч, и мы рассмотрим его подробнее.
Подробное объяснение кода
Далее нам нужно определить тип используемого датчика DHT. Раскомментируйте одну из строк ниже!
Поскольку мы настраиваем ESP8266 NodeMCU в режиме станции (STA), он подключится к существующей сети Wi-Fi. Следовательно, нам необходимо предоставить SSID и пароль вашей сети.
Затем нам нужно определить номер вывода ESP8266 NodeMCU, к которому подключен вывод данных датчика, и создать объект DHT, чтобы было можно получить доступ к специальным функциям, связанным с библиотекой DHT.
Две переменные типа float , а именно Temperature и Humidity объявляются для хранения значений соответственно температуры и влажности.
Создание веб-сервера NodeMCU ESP8266, используя Wi-Fi режим Station (STA)
Теперь мы собираемся настроить ESP8266 в режим станции (STA) и создать веб-сервер для выдачи веб-страниц любому подключенному клиента в существующей сети.
Если вы хотите узнать о создании веб-сервера с ESP8266 NodeMCU в режиме AP/STA, ознакомьтесь с этим руководством:
Прежде чем начать загружать скетч, вам нужно внести в него некоторые изменения, чтобы он заработал у вас.
Чтобы ESP8266 NodeMCU мог установить соединение с существующей сетью, вам необходимо изменить следующие две переменные в соответствии с учетными данными вашей сети.
Перед выдачей веб-страницы ESP8266 считывает температуру с каждого DS18B20 по заданному адресу, поэтому вам необходимо изменить адреса датчиков DS18B20 на те, что вы выяснили в предыдущем скетче.
После внесения этих изменений, попробуйте загрузить скетч.
Отображение показаний на веб-странице
Чтобы динамически отображать показания температуры, влажности, давления и высоты, мы помещаем эти значения в теги параграфов. Для отображения символа градуса мы используем сущность HTML ° .
Подключение нескольких датчиков 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
Стилизация веб-страницы, чтобы она выглядела более профессионально
Программисты, подобные нам, часто боятся дизайна – но небольшое усилие может сделать вашу веб-страницу более привлекательной и профессиональной. Скриншот, приведенный ниже, даст вам базовое представление о том, что мы собираемся делать.
Рисунок 7 – Профессиональный внешний вид веб-страницы с сервера ESP8266 с температурой и влажностью от DHT11/DHT22/AM2302
Довольно красиво, правда? Давайте без лишних слов, применим стиль к нашей предыдущей HTML странице. Для начала скопируйте и вставьте приведенный ниже код, чтобы заменить в приведенном выше скетче функцию SendHTML() . Попробуйте новый скетч, а затем мы выполним его детальный разбор.
Мы уже знаем, что объявление сообщает браузеру, что мы отправляем HTML код, а элемент viewport делает веб-страницу адаптивной. Единственное дополнение здесь заключается в том, что мы будем использовать шрифты google. Google имеет сотни веб-шрифтов и бесплатен для коммерческого и личного использования. Прекрасно!
На нашей веб-странице мы будем использовать шрифт Open Sans. Шрифт Google встраивается с помощью тега link в блоке HTML документа. Для нашей страницы мы выбрали следующие веса (толщину) шрифта: 300 (легкий), 400 (обычный) и 600 (жирный). Вы можете выбрать столько, сколько захотите, но имейте в виду, что выбор ненужных весов шрифтов затрудняет загрузку страницы. Вы также можете добавить курсивный стиль, просто добавив символ i в конце веса шрифта, например, 400i встроит курсивный стиль.
Обратите внимание, что вы не можете видеть шрифт Google, без активного подключения к интернету на устройстве, с которого вы собираетесь получить доступ к странице. Шрифты Google загружаются на лету.
Далее мы собираемся применить шрифт "Open Sans" для всего нашего HTML кода. Мы также должны указать sans-serif в качестве нашего резервного шрифта, чтобы обеспечить максимальную совместимость между браузерами/операционными системами. Если браузер не поддерживает первый шрифт, он попытается использовать следующий шрифт.
Далее нам нужно применить CSS для иконок, заголовков и фактических значений влажности и температуры. Все эти три вещи сделаны строчными и выровнены по вертикали. Фон иконок выполнен круглым с помощью 50% радиуса границы и сделан 30px высотой и шириной.
Затем мы покажем показания температуры с помощью этого красивого маленького значка
Значок температуры на самом деле является масштабируемой векторной графикой (SVG), определенной в теге . Создание SVG не требует каких-либо специальных навыков программирования. Для создания графики для вашей страницы вы можете использовать любой редактор SVG. После этой иконки мы собираемся показать фактическое значение температуры датчика.
Далее мы покажем показания влажности с помощью этого значка
Опять же это SVG. После печати значений влажности мы закрываем все открытые теги, такие как body и html .
Установка библиотеки датчиков DHT
Связь с датчиками DHT11, с датчиками DHT22/AM2302 – это сложная задача, поскольку для передачи данных они используют собственный однопроводный протокол. Этот протокол требует точной синхронизации. К счастью, нам не нужно беспокоиться об этом, потому что мы собираемся использовать библиотеку DHT от Adafruit, которая позаботится почти обо всем. Эта библиотека настолько мощна, что работает как на архитектуре Arduino, так и на архитектуре ESP.
Чтобы установить библиотеку, перейдите в меню Скетч (Sketch) → Подключить библиотеку (Include Library) → Управлять библиотеками… (Manage Libraries. ). Подождите, пока менеджер библиотек загрузит индекс библиотек и обновит список установленных библиотек.
Рисунок 3 – Установка библиотеки Arduino – выбор управления библиотеками в Arduino IDE
Отфильтруйте результаты поиска, введя « DHT sensor ». Должна остаться пара записей. Найдите DHT sensor library by Adafruit. Нажмите на эту запись, а затем выберите Установить (Install).
Рисунок 4 – Установка библиотеки Adafruit DHT
Библиотека датчиков DHT использует Adafruit Sensor support backend. Поэтому поищите в менеджере библиотек Adafruit Unified Sensor и установите его тоже (возможно, придется немного прокрутить).
Подробное объяснение кода
Скетч начинается с включения следующих библиотек:
Затем мы создаем объект датчика и переменные для хранения температуры, влажности, давления и высоты.
Поскольку мы конфигурируем ESP8266 в режим станции (STA), он присоединится к существующей сети Wi-Fi. Следовательно, нам необходимо предоставить ему SSID и пароль вашей сети. Затем мы запускаем веб-сервер на порту 80.
Отображение веб-страницы HTML
Функция SendHTML() отвечает за создание веб-страницы всякий раз, когда веб-сервер ESP8266 получает запрос от веб-клиента. Она просто объединяет HTML-код в большую строку и возвращает ее в функцию server.send() , которую мы обсуждали ранее. Данная функция в качестве параметров для динамического генерирования HTML контента принимает значения температур.
Первый текст, который вы всегда должны отправлять, – это объявление , которое указывает, что мы отправляем HTML-код.
Затем элемент viewport делает веб-страницу адаптивной в любом веб-браузере. Далее тег title устанавливает заголовок страницы.
Улучшение кода – автоматическое обновление страницы
Одно из улучшений, которое вы можете сделать с нашим кодом, – это автоматическое обновление страницы для обновления показаний датчика.
Добавив один мета-тег в ваш HTML документ, вы можете дать браузеру команду автоматически перезагружать страницу с заданным интервалом.
Поместите этот код в тег вашего документа, и этот мета-тег укажет браузеру обновлять страницу каждые две секунды. Довольно изящно!
Муки выбора
Датчиков для измерения температуры большое множество (DHT11, DHT22, DS18B20, CC2D23S, SHT21, BME280) сравнивать их друг с другом не буду, это давно уже сделано и легко гуглится. Выбор пал на DS18B20 потому как был найден в защитном корпусе пучком и по вполне адекватной цене, ну и скорее всего что с DHT11 и DHT22 уже игрался, их надежность и точность оставляет желать лучшего, а BME280 слишком дорогой.
Доступ к веб-серверу
Рисунок 6 – Монитор последовательного порта – сервер запущен
Затем откройте браузер и укажите ему IP-адрес, выведенный в мониторе последовательного порта. ESP8266 должен выдать веб-страницу с показаниями температуры, влажности, давления и высоты от BME280.
Рисунок 7 – Показания BME280 на веб-сервере ESP8266
Внутренности функции setup()
Прежде всего, мы инициализируем последовательную связь с ПК и инициализируем объект BME с помощью функции begin() . Она инициализирует интерфейс I2C с заданным адресом I2C ( 0x76 ) и проверяет правильность идентификатора чипа. Затем она программно перезапускает микросхему и ждет окончания калибровки датчика после запуска.
Теперь нам нужно подключиться к сети Wi-Fi с помощью функции WiFi.begin() . Данная функция принимает в качестве параметров SSID (имя сети) и пароль.
Пока ESP8266 пытается подключиться к сети, мы проверяем статус подключения с помощью функции WiFi.status() .
После подключения ESP8266 к сети скетч выводит IP-адрес, назначенный ESP8266, напечатав значение результата метода WiFi.localIP() в монитор последовательного порта.
Теперь, чтобы запустить сервер, вызываем метод begin() для объекта server .
Внутренности функции loop()
Далее нам нужно создать функцию, которую мы прикрепили к корневому (/) URL с помощью server.on() . Помните?
В нашем случае мы отправляем код 200 (один из кодов состояния HTTP), который соответствует ответу OK. Затем мы указываем тип контента как " text/html ", и, наконец, мы вызываем пользовательскую функцию SendHTML() , которая создает динамическую HTML-страницу, содержащую значения показаний температуры.
Точно так же нам нужно создать функцию для обработки страницы ошибки 404.
Динамическая загрузка данных датчика с помощью AJAX
Если ваша веб-страница много весит, то полное ее обновление не слишком практично. Лучше использовать асинхронный Javascript и Xml (AJAX), чтобы мы могли запрашивать данные с сервера асинхронно (в фоновом режиме), не обновляя страницу.
- запрашивать данные с сервера после загрузки страницы;
- получать данные с сервера после загрузки страницы;
- отправлять данные на сервер в фоновом режиме.
Ниже приведен скрипт AJAX, который мы будем использовать. Поместите этот скрипт непосредственно перед закрывающим тегом .
Скрипт начинается с тега , так как AJAX-скрипт – это не что иное, как javascript, и поэтому нужно писать его в теге . Чтобы данная функция вызывалась повторно, мы будем использовать функцию javascript setInterval() . Она принимает два параметра: функцию для выполнения и интервал времени (в миллисекундах), через который выполнять указанную функцию.
- 0: запрос не инициализирован;
- 1: установлено подключение к серверу;
- 2: запрос получен;
- 3: обработка запроса;
- 4: запрос завершен, и ответ готов.
- 200: OK;
- 403: запрещено;
- 404: страница не найдена.
Когда readyState равен 4, а status – 200, ответ готов. Теперь обновляется содержимое элемента с id webpage ( div , содержащей значения температуры и влажности).
Вы когда-нибудь хотели, чтобы датчики были разбросаны по всему дому и саду, регулярно сообщая о своей температуре на центральный сервер? Тогда этот IoT проект может стать для вас хорошей отправной точкой!
Отображение показаний с нескольких DS18B20 с помощью веб-сервера на ESP8266 NodeMCU
В этом проекте NodeMCU ESP8266 используется в качестве устройства управления, которое легко подключается к существующей сети Wi-Fi и создает веб-сервер. Когда любое подключенное устройство обращается к этому веб-серверу, ESP8266 считывает температуру с нескольких датчиков температуры DS18B20 и отправляет эти показания веб-браузеру подключенного устройства, выводя их в приятном интерфейсе. Интересно? Давайте начнем!
Динамическая загрузка данных датчиков с помощью AJAX
Если ваша веб-страница много весит, то полное ее обновление не слишком практично. Лучше использовать асинхронный Javascript и Xml (AJAX), чтобы мы могли запрашивать данные с сервера асинхронно (в фоновом режиме), не обновляя страницу.
- запрашивать данные с сервера после загрузки страницы;
- получать данные с сервера после загрузки страницы;
- отправлять данные на сервер в фоновом режиме.
Ниже приведен скрипт AJAX, который мы будем использовать. Поместите этот скрипт непосредственно перед закрывающим тегом .
Скрипт начинается с тега , так как AJAX-скрипт – это не что иное, как javascript, и поэтому нужно писать его в теге . Чтобы данная функция вызывалась повторно, мы будем использовать функцию javascript setInterval() . Она принимает два параметра: функцию для выполнения и интервал времени (в миллисекундах), через который выполнять указанную функцию.
- 0: запрос не инициализирован;
- 1: установлено подключение к серверу;
- 2: запрос получен;
- 3: обработка запроса;
- 4: запрос завершен, и ответ готов.
- 200: OK;
- 403: запрещено;
- 404: страница не найдена.
Когда readyState равен 4, а status – 200, ответ готов. Теперь обновляется содержимое элемента body (содержащего значения температуры).
Не позволяйте погодным приложениям для смартфонов или коммерческим метеостанциям (которые снабжают вас данными со станций, расположенных за много километров) разрушить ваши планы на открытом воздухе. С помощью этого IoT-проекта вы можете сами стать метеорологом!
Создаем простую метеостанцию на ESP8266 с BME280
В данном проекте ESP8266 NodeMCU используется в качестве устройства управления, которое легко подключается к существующей сети Wi-Fi и создает веб-сервер. Когда любое подключенное устройство обращается к этому веб-серверу, ESP8266 считывает температуру, влажность, атмосферное давление и высоту из BME280 и отправляет их в веб-браузер этого устройства, выводя их в приятном интерфейсе. Интересно? Давайте начнем!
Улучшение кода - автоматическое обновление страницы
Одно из улучшений, которое вы можете сделать с нашим кодом, – это автоматическое обновление страницы для обновления показаний датчиков.
Добавив один мета-тег в ваш HTML-документ, вы можете дать браузеру команду автоматически перезагружать страницу с заданным интервалом.
Поместите этот код в тег вашего документа, и этот мета-тег укажет браузеру обновлять страницу каждые две секунды. Довольно изящно!
Улучшение кода – автоматическое обновление страницы
Одно из улучшений, которое вы можете сделать с нашим кодом, – это автоматическое обновление страницы для обновления показаний датчиков.
Добавив один мета-тег в ваш HTML-документ, вы можете дать браузеру команду автоматически перезагружать страницу с заданным интервалом.
Поместите этот код в тег вашего документа, и этот мета-тег укажет браузеру обновлять страницу каждые две секунды. Довольно изящно!
Сделай сам
После регистрации на thingspeak нам необходимо создать новый канал.
Затем нужно открыть вкладку API KEYS и скопировать ключ WRITE API KEY
- ssid — название вашей WiFi
- password — пароль от WiFi
- apiKey — ключ для thingspeak (WRITE API KEY)
- SLEEP_DELAY_IN_SECONDS — каждые сколько секунд отправлять данные. Минимальный интервал для бесплатного использования — 15 секунд.
Что в итоге получим
Данные с указанным вами интервалом будут отправлять на сервер, там по данным будет строиться красивый график.
Кто хочет интегрировать подобные вещи в свои системы умного дома (openhab например), достаточно нужно изменить код для отправки на mqtt-сервер.
К реле от sonoff так же можно подключить данные датчики.
Когда узнал о народном мониторинге, о возможности быть частью этой системы мониторинга погоды, меня охватил азарт, и была сделана простенькая метеостанция на ардуино нано и ethernet модуле.
Передавала она на сайт температуру, давление и влажность. Работала худо бедно, иногда подвисала, необходимо было перезагружать. Потом сдох датчик влажности, и я занялся поиском альтернативного устройства. Долго поглядывал на esp8266, но знал о ней очень немного. Останавливало то, что код для нее надо было писать в незнакомой мне среде esplorer на незнакомом мне языке. Здесь уже публиковался обзор подобного устройства, устройство работало с условно бесплатной прошивкой от Homes Smart, такое решение меня не устроило. Позднее я узнал, что esp8266 можно вполне успешно подружить с arduinoIDE. Я начал усиленно гуглить, и в результате догуглился до устраивающих меня результатов.
Надеюсь, статья окажется полезной. Думаю, ее можно расценивать как обзор-руководство по сборке.
NodeMcu это своего рода отладочная плата для esp8266 (в моем понимании). С помощью нее удобно делать прототипы устройств на макетных платах. Удобно заливать прошивку из ArduinoIDE, все происходит автоматически. Естественно, необходимо подготовить ArduinoIDE к работе с esp8266. Подготовив рабочую среду сразу набросал схему, это было не сложно.
Датчик давления и температуры bmp180 подключен по i2c к SCL(gpio05) и SDA(gpio04).
Датчик влажности и температуры dht22 подключен к gpio02
Дисплей 1602 с припаянным i2c адаптером так же посажен на scl и cda, параллельно с датчиком давления.
Питание датчиков 3.3в, питание дисплея 5в.
фоторезистор подключен к пину А0, он управляет яркостью дисплея, чтобы в ночи дисплей не светился слишком ярко. Питанием подсветки заведует gpio14, на котором реализован программный ШИМ. После транзисторного каскада питание подсветки подходит непосредственно к пятачку А (анод) на дисплее. он находится рядом со светодиодом. Со spi адаптера дисплея необходимо снять перемычку, которая отвечает за подсветку.
Схему и печатку приложу в конце.
Сложнее было с кодом.
Что умеет устройство?
Устройство производит измерение температуры, давления (датчик bmp180) и влажности (датчик dht22), отображает показания на дисплее, и отправляет на сайт народного мониторинга.
При первом после прошивки включении, или при отсутствии знакомых wifi сетей устройство прикидывается точкой доступа открытого типа с именем ESP8266.
В com порт устройство шлет это:
Необходимо подключиться с телефона, ноутбука или планшета к точке с именем ESP8266, и пройти по адресу 192.168.4.1
Откроется такая страничка:
Нажимаем кнопку Configure Wifi, и попадаем на такую страничку
Далее выбираем свою сеть, вводим пароль, жмем Save. Готово, устройство само перезагружается, и начинает работать. Сначала на дисплей и в com порт выводится ip адрес и mac адрес устройства с префиксом ESP, его надо использовать в качестве id датчика при регистрации на сайте народного мониторинга, а через 15 секунд на дисплей, в com порт, и на сайт народного мониторинга выводятся первые показания с датчиков.
T1 — температура с bmp180
T2 — температура с dht22
P — атмосферное давление. На дисплей выводится в мм. рт. ст., на народный мониторинг идет в не помню каких единицах, преобразуется в мм. рт. ст. автоматически.
Н — влажность в процентах.
В строчках Т2 и Н ересь, потому что не подключен датчик dht22
В таком виде конструкция проработала пару недель, пока я потихоньку продумывал готовое устройство.
Готовое устройство решил собирать на модуле esp8266 12e (такой же стоит на nodemcu)
Быстренько развел и вытравил плату.
Код менять не пришлось вообще. Номера портов для датчиков те же, необходимо только подключить голую esp8266 по типовой схеме, чтобы она могла работать, и можно было заливать прошивку. 3.3 вольта получил с помощью стабилизатора ams 1117 3.3v.
Питается устройство от телефонной зарядки 5в. 2А. Но и одного ампера, думаю, будет достаточно.
Для прошивки вывел отдельный 3-pin разъем с контактами RX, TX и GND.
Прошивал готовое устройство с помощью такого адаптера usb — uart. Плюс его в том, что на нем имеется переключатель 5v-3.3v, хотя знающие ребята говорят, что этот переключатель работает только для питания, а уровень rx и tx не меняется. Но у меня все работало без преобразования уровней, наверное потому, что esp8266 толерантна к 5v на rx tx, хоть и работает от 3.3.
Так же на готовой плате был предусмотрен переключатель для ввода в режим прошивки (красный ползунковый, нижний ползунок для ввода в режим прошивки. Верхний ползунок я подключил на gpio12, на всякий случай, возможно для переключения режимов индикации на будущее, а пока он не задействован. Можно не мудрить, и просто поставить перемычку между gpio0 и GND)
Для прошивки нужно подключить usb-uart преобразователь таким образом:
esp rx — uart tx
esp tx — uart rx
esp gnd — uart gnd
Затем подключить gpio0 к земле с помощью нижнего ползунка на переключателе, нажать кнопку «Reset» на плате (находится сверху), в arduinoIDE выбрать нужный com port, скорость загрузки (115200 для большинства плат esp8266), и нажать кнопку «Загрузка».
После окончания загрузки устройство начнет работать, переключатель прошивки нужно возвратить в положение OFF, иначе при следующей перезагрузке или отключении питания устройство опять войдет в режим прошивки.
Вспомним сдохший датчик dht22. Симптомы — постоянно показывает влажность 99.9, в сухую погоду может показывать меньше. Сдох он осенью 2016 года, исправно проработав всю весну и лето. Была неделя постоянных дождей, и мне на электропочту свалилось письмо от народного мониторинга, что, мол, ваш датчик несколько дней подряд показывает одно и то же. Я не стал менять датчик, а просто спрятал его из общего доступа до недавнего момента.
Возможной причиной помирания считаю тесный корпус. В качестве его основы было использовано яйцо от киндерсюрприза. Был разработан новый, более технологичный и просторный корпус из подрозетника и заглушки канализационной трубы. Вот оба корпуса рядом:
Плату датчиков не переделывал, просто заменил дохлый dht22 на живой, покрыл цапонлаком и закрепил термосоплями в верхней части уличного корпуса.
Вот так выглядит схема платы датчиков. Нарисовать можно даже маркером
Закрепил датчики на окне, шлейф завел в комнату. Вынос можно было сделать и побольше, да и от внешнего блока кондиционера убрать, но это проблематично.
Упихал кишочки в мегатехнологичный корпус из распределительной коробки для проводки. С креплением не заморачивался, использовал термосопли.
В собранном виде
Испытание влажностью пройдено успешно. Датчик жив.
Проект в proteus8. схема и печатная плата.
Код
Библиотеки для работы в подготовленной ArduinoIDE
Использовалась ArduinoIDE 1.8.1. рекомендую скачать ее портабл версию, и распаковать в какую нибудь папочку. Туда же накидать приложенные библиотеки, в папку libraries естественно.
Это был полезный опыт для меня, я наконец то пощупал esp8266, и получил стабильно работающее полезное мне устройство.
Надеюсь кому то пригодится эта статья. Если возникнут трудности или вопросы, пишите в личку, отвечу.
Установка библиотеки для BME280
Для связи с модулем BME280 необходимо выполнить кучу работы. К счастью, чтобы скрыть все сложности, была написана библиотека Adafruit BME280, чтобы мы могли выполнять простые команды для считывания данных о температуре, относительной влажности и атмосферном давлении.
Чтобы установить библиотеку, перейдите в раздел Скетч → Подключить библиотеку → Управлять библиотеками…. Подождите, пока менеджер библиотек загрузит индекс библиотек и обновит список установленных библиотек.
Отфильтруйте результаты поиска, набрав «bme280». Там должно быть пара записей. Ищите библиотеку Adafruit BME280 by Adafruit. Нажмите на эту запись, а затем выберите «Установка».
Рисунок 4 – Установка библиотеки BME280 в Arduino IDE
Библиотека датчиков BME280 использует Adafruit Sensor support backend. Поэтому найдите в менеджере библиотек Adafruit Unified Sensor и установите ее тоже (возможно, вам придется немного прокрутить)
Рисунок 5 – Установка библиотеки Adafruit Unified Sensor
Отображение веб-страницы HTML
Функция SendHTML() отвечает за создание веб-страницы всякий раз, когда веб-сервер ESP8266 получает запрос от веб-клиента. Она просто объединяет HTML-код в большую строку и возвращает ее в функцию server.send() , которую мы обсуждали ранее. Данная функция в качестве параметров для динамического генерирования HTML контента принимает показания температуры, влажности, давления и высоты.
Первый текст, который вы всегда должны отправлять, – это объявление , которое указывает, что мы отправляем HTML-код.
Затем элемент viewport делает веб-страницу адаптивной в любом веб-браузере. Далее тег title устанавливает заголовок страницы.
Установка библиотеки для DS18B20
Протокол Dallas 1-Wire несколько сложен и требует много кода для парсинга связи. Чтобы скрыть эту ненужную сложность, мы установим библиотеку DallasTemperature.h, чтобы мы могли выполнять простые команды для получения показаний температуры от датчика.
Чтобы установить библиотеку, перейдите в раздел «Скетч»→ «Подключить библиотеку» → «Управление библиотеками…». Подождите, пока менеджер библиотеки загрузит индекс библиотек и обновит список установленных библиотек.
Чтобы отфильтровать результаты поиска, введите «ds18b20». Там должна быть пара записей. Ищите DallasTemperature от Miles Burton. Нажмите на эту запись, а затем выберите Установка.
Рисунок 3 – Установка библиотеки DallasTemperature в Arduino IDE
Эта библиотека DallasTemperature является аппаратно-зависимой библиотекой, которая обрабатывает функции более низкого уровня. Она должна быть связана с библиотекой OneWire для связи с любым устройством 1-Wire, а не только с DS18B20. Установите и эту библиотеку.
Рисунок 4 – Установка библиотеки OneWire в Arduino IDE
Отображение веб-страницы HTML
Функция SendHTML() отвечает за создание веб-страницы всякий раз, когда веб-сервер ESP8266 получает запрос от веб-клиента. Она просто объединяет HTML код в большую строку и возвращает ее в функцию server.send() , которую мы обсуждали ранее. Данная функция в качестве параметров для динамического генерирования HTML контента принимает значения температуры и влажности.
Первый текст, который вы всегда должны отправлять, - это объявление , которое указывает, что мы отправляем HTML код.
Затем элемент viewport делает веб-страницу адаптивной в любом веб-браузере. Далее тег title устанавливает заголовок страницы.
Стилизация веб-страницы
Далее идет немного CSS кода для стилизации внешнего вида веб-страницы. Мы выбираем шрифт Helvetica, определяем контент, который будет отображаться в виде inline-block и выровнен по центру.
Следующий код устанавливает цвет, шрифт и поля вокруг элементов body , H1 , H3 и p .
Установка заголовка веб-страницы
Далее устанавливаем заголовок на веб-странице; вы можете изменить этот текст на то, что подходит для вашего приложения.
Отображение температуры и влажности на веб-странице
Чтобы динамически отображать значения температуры и влажности, мы помещаем эти значения в тег параграфа. Эти значения преобразуются в целое число с помощью приведения типов. Для отображения символа градуса мы используем HTML сущность ° .
Подготовка IDE Arduino
Существует дополнение для Arduino IDE, которое позволяет программировать ESP8266 NodeMCU. Чтобы подготовить вашу Arduino IDE к работе с ESP8266, следуйте инструкциям, приведенным ниже.
Подготовка IDE Arduino
Существует дополнение для Arduino IDE, которое позволяет вам программировать ESP8266 NodeMCU с помощью Arduino IDE. Чтобы подготовить вашу Arduino IDE к работе с ESP8266, если вы еще этого не сделали, следуйте инструкциям из следующей статьи:
Отображение температуры, влажности, давления и высоты на веб-сервере ESP8266
Теперь мы собираемся настроить ESP8266 в режим станции (STA) и создать веб-сервер для выдачи веб-страниц любому подключенному клиенту в существующей сети.
Если вы хотите узнать о создании веб-сервера с ESP8266 в режимах AP/STA, ознакомьтесь с этим руководством:
Прежде чем вы отправитесь загружать скетч, вам нужно внести одно изменение, чтобы он у вас заработал. Чтобы ESP8266 мог установить соединение с существующей сетью, вам необходимо изменить следующие две переменные в соответствии с учетными данными вашей сети.
Как только вы это сделаете, попробуйте скетч в работе.
BME280 – датчик температуры, влажности и давления
Сначала давайте кратко рассмотрим модуль BME280.
BME280 – это цифровой датчик температуры, влажности и давления нового поколения, производимый Bosch. Это преемник таких датчиков, как BMP180, BMP085 или BMP183.
Рисунок 1 – Чип BME280 на модуле
Рабочее напряжение модуля BME280 составляет от 3,3 В до 5 В – идеально подходит для взаимодействия с микроконтроллерами 3,3 В, такими как ESP8266. Подробности о модуле можно прочитать в этой статье.
Рисунок 2 – Диапазоны измерений датчика BME280
Модуль имеет простой двухпроводной интерфейс I2C для связи. По умолчанию I2C-адрес модуля BME280 – 0x76 и может быть легко изменен на 0x77 с помощью следующей процедуры.
Несколько датчиков DS18B20 на одной шине
Одна из важнейших особенностей DS18B20 заключается в том, что на одной шине 1-Wire могут сосуществовать несколько DS18B20. Поскольку каждый DS18B20 имеет уникальный 64-битный серийный номер, записанный на заводе, их легко отличить друг от друга.
Эта особенность может быть огромным преимуществом, если вы хотите контролировать множество датчиков DS18B20, распределенных по большой площади. В данном руководстве мы это и сделаем.
Фотографии
Пучок датчиков пришел в обычном мягком пакете.
Сам датчик выглядит вот так. Имеет три провода +,- и data.
Датчик + nodemcu v3
Внутренности функции setup()
Теперь нам нужно подключиться к сети Wi-Fi с помощью функции WiFi.begin() . Данная функция принимает в качестве параметров SSID (имя сети) и пароль.
Пока ESP8266 пытается подключиться к сети, мы проверяем состояние подключения с помощью функции WiFi.status() .
Как только ESP8266 будет подключен к сети, скетч печатает IP адрес, присвоенный для ESP8266, отображая значение WiFi.localIP() в мониторе последовательного порта.
Теперь, чтобы запустить сервер, вызываем метод begin() для объекта server .
Особенности DS18B20.
- Для однопроводного интерфейса 1-Wire достаточно одного порта связи с контроллером.
- Каждое устройство имеет уникальный серийный код длиной 64 разряда.
- Возможность подключения нескольких датчиков через одну линию связи.
- Нет необходимости во внешних компонентах.
- Возможность получать питание непосредственно от линии связи. Напряжение питания в пределах 3,0 В … 5,5 В.
- Диапазон измерения температуры -55… +125 °C.
- Погрешность не превышает 0,5 °C в диапазоне -10… +85 °C.
- Разрешение преобразования 9 … 12 бит. Задается пользователем.
- Время измерения, не превышает 750 мс, при максимально возможном разрешении 12 бит.
Внутренности функции loop()
Далее нам нужно создать функцию, которую мы прикрепили к корневому (/) URL с помощью server.on() . Помните?
В нашем случае мы отправляем код 200 (один из кодов состояния HTTP), который соответствует ответу OK. Затем мы указываем тип контента как " text/html ", и, наконец, мы вызываем пользовательскую функцию SendHTML() , которая создает динамическую HTML-страницу, содержащую показания температуры, влажности, давления и высоты.
Точно так же нам нужно создать функцию для обработки страницы ошибки 404.
Стилизация веб-страницы, чтобы она выглядела более профессионально
Программисты, подобные нам, часто боятся дизайна – но небольшое усилие может сделать вашу веб-страницу более привлекательной и профессиональной. Скриншот, приведенный ниже, даст вам базовое представление о том, что мы собираемся делать.
Рисунок 8 – Показания BME280 на странице веб-сервера ESP8266 (более профессиональный вид)
Довольно красиво, правда? Давайте без лишних слов, применим стиль к нашей предыдущей HTML-странице. Для начала скопируйте и вставьте приведенный ниже код, чтобы заменить в приведенном выше скетче функцию SendHTML() .
Если вы попытаетесь сравнить эту функцию с предыдущей, то увидите, что они похожи, за исключением следующих изменений.
На нашей веб-странице мы будем использовать шрифт Open Sans от Google. Обратите внимание, что вы не можете видеть шрифт Google, без активного подключения к интернету на устройстве, с которого вы собираетесь получить доступ к странице. Шрифты Google загружаются на лету.
Иконки, используемые для отображения показаний температуры, на самом деле является масштабируемой векторной графикой (SVG), определенной в теге . Создание SVG не требует каких-либо специальных навыков программирования. Для создания графики для вашей страницы вы можете использовать любой редактор SVG. Мы использовали эти иконки SVG.
Рисунок 9 – SVG иконки
Внутренности функции loop()
В нашем случае мы отправляем код 200 (один из кодов состояния HTTP), который соответствует ответу OK. Затем мы указываем тип контента как " text/html ", и, наконец, мы вызываем пользовательскую функцию SendHTML() , которая создает динамическую HTML страницу, содержащую значения температуры и влажности.
Точно так же нам нужно создать функцию для обработки страницы ошибки 404.
Доступ к веб-серверу
Рисунок 5 – Монитор последовательного порта – сервер запущен
Затем загрузите браузер и введите IP адрес, указанный в мониторе последовательного порта. ESP8266 NodeMCU должен выдать веб-страницу, показывающую температуру и относительную влажность.
Рисунок 6 – Веб-страница с температурой и влажностью с датчика DHT11/DHT22/AM2302 на веб-сервере ESP8266 (без CSS)
Стилизация веб-страницы
Далее идет немного CSS кода для стилизации внешнего вида веб-страницы. Мы выбираем шрифт Helvetica, определяем контент, который будет отображаться в виде inline-block и выровнен по центру.
Следующий код устанавливает цвет, шрифт и поля вокруг элементов body , H1 , H3 и p .
Установка заголовка веб-страницы
Далее устанавливаем заголовок на веб-странице; вы можете изменить этот текст на то, что подходит для вашего приложения.
Установка заголовка веб-страницы
Далее устанавливаем заголовок на веб-странице; вы можете изменить этот текст на то, что подходит для вашего приложения.
Поиск адресов DS18B20 в шине
Мы знаем, что каждому DS18B20 назначен уникальный 64-битный адрес, помогающий отличать их друг от друга. Сначала мы найдем этот адрес, чтобы пометить каждый датчик соответствующим образом. Затем этот адрес можно использовать для считывания показаний каждого датчика по отдельности.
Следующий скетч обнаруживает все датчики DS18B20, присутствующие на шине, и выводит их адреса на шине 1-Wire в монитор последовательного порта.
Чтобы идентифицировать каждый датчик по его адресу, необходимо подключать только один датчик за раз. Затем вы можете пометить каждый датчик.
Теперь откройте монитор последовательного порта. У вас должно получиться примерно следующее.
Рисунок 5 – Нахождение адресов 1-Wire всех датчиков DS18B20 на шине
Скопируйте все адреса по мере необходимости в следующий скетч.
Читайте также: