Логичное продолжение предыдущего поста по настройке ESP8266-07 для работы с датчиками DHT22 и BMP085 при помощи прошивки NodeMCU. Данная метеостанция представляет собою набор из собранных вместе готовых модулей — ESP8266-07, DHT22, BMP180 и DC-DC преобразователя на базе микросхемы LM2596HV. Все компоненты были приобретены в магазине arduino-ua.com. Для корпуса был выбрана коробка из АБС пластика с фланцами для настенного монтажа производства Gainta (модель G203MF).
Устройство содержит такие датчики как BMP180 и AM2302 (DHT22), которые позволяют регистрировать следующие параметры окружающей среды:
- Давление 300…1100 hPa (30…110kPa)
- Температура -40…+80 °C
- Влажность 0…100%
Питание устройства осуществляется при помощи сетевого адаптера AC-DC 220В-9В(5В), напряжение которого после дополнительно преобразуется DC-DC преобразоваетелем в напряжение питания 3,3В.
Все модули (управляющий и датчики, за исключением DHT22) установлены в герметичном пластиковом корпусе. DHT22 установлен на внешней поверхности под защитным пластиковым козырьком (на фото в правом верхнем углу). Подключение датчиков выполнено следующим образом:
- DHT22 dataPin -> pin7 (Node-MCU) GPIO13 (ESP8266-07)
- BMP180 sda -> pin1 (Node-MCU) GPIO5/sdl -> pin2 (Node-MCU) GPIO4
Устройство управляется набором lua-скриптов, их можно найти на моем github. Скрипты не отличаются особой оригинальностью и собраны на основе исходников найденых в сети (ссылки на исходники приведены в описании). За начальную инициализацию устройства и его подключение к WiFi отвечает модуль init.lua (подключение со статическим IP 192.168.0.100), он же запускает веб-сервер server.lua и скрипт основного программного цикла do.lua.
wifi.setmode(wifi.STATION) print("Подключаемся к сети %название_сети%") wifi.sta.config("%название_сети%","%пароль_сети%") wifi.sta.connect() wifi.sta.setip({ip="192.168.0.100",netmask="255.255.255.0",gateway="192.168.0.1"}) print("Настройка ESP8266: " ..wifi.getmode()) print("MAC адрес модуля: " ..wifi.ap.getmac()) print("IP модуля "..wifi.sta.getip()) dofile("server.lua") collectgarbage() dofile("do.lua")
Основной программный цикл do.lua выполняется каждые 30 секунд.
tmr.alarm(1, 30000, 1, function() print("-----------------------------------") print("Читаем датчики") dofile("dht22.lua") collectgarbage() dofile("bmp085.lua") collectgarbage() dofile("string_p.lua") print(string.format("t = %s;h = %s;p = %s",t,h,p)) collectgarbage() dofile("thingspeak.lua") collectgarbage() end )
Этот модуль последовательно опрашивает датчик DHT22, потом BMP180, подготавливает данные полученные от датчика давления (преобразует исходное значение кПа в мм.рт.ст) и отправляет результаты на сервис — thingspeak.com. Работа с датчиками рассмотрена подробнее в посте ESP8266. Привет мир. Данные этой метеостанции (метеограммы) можно увидеть на странице — Метео.
Файлы:
1. Datasheet BMP180
2. Datasheet DHT22
3. Проект на github.com