Появилась необходимость собрать данный комбайн. Условия использования обычные бытовые, грубо говоря в квартире. Более чем уверен, что подобных связок уже должно быть реализовано не мало, но хочется для себя и по-своему. Что хотелось бы видеть на выходе:
• Мониторим параметры: температура, влажность, давление, уровень CO2, PM2.5
• При нахождении дома, и при подключении к локальной сети, чтоб все это можно было видеть в браузере по IP адресу. На этой страничке: дата и время, IP адрес который получила наша ESP, отображаем погоду для данного места с gismeteo, например. Далее список параметров, перечисленных в первом пункте, напротив каждого смайлик, красный-грустный, желтый-нейтральный, зеленый-веселый. В идеале надо иметь закладку на которой для каждого параметра можно выставить диапазон значений, и соответствии с ним показывать определенный смайлик.
• Отправка данных на сайт narodmon.ru, чтобы можно было контролировать обстановку дома из вне.
• На первом этапе, питаться будем из розетки, в последствии возможно добавиться связка литий+ солнечная панель. Поэтому сразу хотелось бы предусмотреть использование спящего режима для датчиков где это возможно, а так же побороться со всякого рода утечками памяти, дабы исключить всевозможные перезагрузки модуля.
Железо, взятое за основу:
• ESP8266 CH340 NodeMcu V3 Lua
• BME280
• MH-Z19B
• PMS5003
Два последних датчика ещё не подключал. Начал с экспериментов над связкой ESP8266
CH340 NodeMcu V3 Lua+ BME280.
О ESP8266 CH340 NodeMcu V3 Lua надо рассказать отдельно, дабы было для потомков. После получения, начал прошивать данный модуль, первые несколько раз прошли удачно, но в очередной раз Windows уведомила что USB устройство не опознано, и как я его больше не подключал результат был один и тот же. Начал читать про данный модуль, много где писали про просадку напряжения, начал копать в эту сторону. В данном модуле, для защиты USB по 5V линии стоит два диода Шотке, первый защищает чтоб не прилетело со стороны стабилизатора, а второй защищает со стороны пина VIN. Так вот после первого 5V превращались в 4,6V, а после второго и вовсе оставалось 2,6V, снял их и кинул перемычку, но моей проблемы это не решило, так как стабилизатор с 4,6М исправно делал 3,3V. Пропаял все что было на плате, не помогло, удалил CH340, взял старый телефонный кабель на PL2101(как выяснилось позднее тоже поддельной), все это дела распаял, пришлось поколдовать с драйверами, но результатом стало то, что появилась возможность прошивать данный модуль и двигаться дальше.
Прошивку для модуля генерировал вот на этом сайте NodeMCU custom builds .
Включил в нее вот такие модули (часть из них на всякий случай): bit, bme280, cron, dht, file, gpio, http, i2c, net, node, pwm, spi, sqlite3, tmr, uart, ucg, wif, на выходе получаем два файла, отличаются окончанием float и integer, в модуль прошиваем с окончанием integer. Прошивку производи при помощи nodemcu-flasher-master.
Для дальнейшей работы используем ESPlorer. Подключаемся к нашему порту на котором висит наш модуль, если все ок, то в консоль получаем вменяемый ответ. Далее форматируем файловую систему, и заливаем нужные нам файлы скриптов.
Структуру скриптов я вижу такую:
• Первым идет init.lua, в нем минимум параметров (и то если они там нужны) а так при помощи его вызываем start.lua он в свою очередь вызывает wifi.lua тут конфигурируем наш ESP и подключаем его к нашей wifi сети, далее идет page.lua тут размещается пока наша простенькая страничка, следующий server.lua, это простенький HTTP сервер, потом data.lua, при помощи которого будут собираться данные с датчиков, далее сами датчики, BME280.lua, Z19B.lua, PMS5003.lua. На данном этапе вот что есть: init.lua
start.lua
wifi.lua
server.lua
page.lua
bme280.lua
Остановился на том что не знаю как правильно передать данные от BME280.lua в поле dat page.lua. Ну и в данном варианте page.lua, то что написано кириллицей, в браузере каркозяблы. Буду благодарен за любую помощь и подсказки в реализации данного проекта.
• Мониторим параметры: температура, влажность, давление, уровень CO2, PM2.5
• При нахождении дома, и при подключении к локальной сети, чтоб все это можно было видеть в браузере по IP адресу. На этой страничке: дата и время, IP адрес который получила наша ESP, отображаем погоду для данного места с gismeteo, например. Далее список параметров, перечисленных в первом пункте, напротив каждого смайлик, красный-грустный, желтый-нейтральный, зеленый-веселый. В идеале надо иметь закладку на которой для каждого параметра можно выставить диапазон значений, и соответствии с ним показывать определенный смайлик.
• Отправка данных на сайт narodmon.ru, чтобы можно было контролировать обстановку дома из вне.
• На первом этапе, питаться будем из розетки, в последствии возможно добавиться связка литий+ солнечная панель. Поэтому сразу хотелось бы предусмотреть использование спящего режима для датчиков где это возможно, а так же побороться со всякого рода утечками памяти, дабы исключить всевозможные перезагрузки модуля.
Железо, взятое за основу:
• ESP8266 CH340 NodeMcu V3 Lua
• BME280
• MH-Z19B
• PMS5003
Два последних датчика ещё не подключал. Начал с экспериментов над связкой ESP8266
CH340 NodeMcu V3 Lua+ BME280.
О ESP8266 CH340 NodeMcu V3 Lua надо рассказать отдельно, дабы было для потомков. После получения, начал прошивать данный модуль, первые несколько раз прошли удачно, но в очередной раз Windows уведомила что USB устройство не опознано, и как я его больше не подключал результат был один и тот же. Начал читать про данный модуль, много где писали про просадку напряжения, начал копать в эту сторону. В данном модуле, для защиты USB по 5V линии стоит два диода Шотке, первый защищает чтоб не прилетело со стороны стабилизатора, а второй защищает со стороны пина VIN. Так вот после первого 5V превращались в 4,6V, а после второго и вовсе оставалось 2,6V, снял их и кинул перемычку, но моей проблемы это не решило, так как стабилизатор с 4,6М исправно делал 3,3V. Пропаял все что было на плате, не помогло, удалил CH340, взял старый телефонный кабель на PL2101(как выяснилось позднее тоже поддельной), все это дела распаял, пришлось поколдовать с драйверами, но результатом стало то, что появилась возможность прошивать данный модуль и двигаться дальше.
Прошивку для модуля генерировал вот на этом сайте NodeMCU custom builds .
Включил в нее вот такие модули (часть из них на всякий случай): bit, bme280, cron, dht, file, gpio, http, i2c, net, node, pwm, spi, sqlite3, tmr, uart, ucg, wif, на выходе получаем два файла, отличаются окончанием float и integer, в модуль прошиваем с окончанием integer. Прошивку производи при помощи nodemcu-flasher-master.
Для дальнейшей работы используем ESPlorer. Подключаемся к нашему порту на котором висит наш модуль, если все ок, то в консоль получаем вменяемый ответ. Далее форматируем файловую систему, и заливаем нужные нам файлы скриптов.
Структуру скриптов я вижу такую:
• Первым идет init.lua, в нем минимум параметров (и то если они там нужны) а так при помощи его вызываем start.lua он в свою очередь вызывает wifi.lua тут конфигурируем наш ESP и подключаем его к нашей wifi сети, далее идет page.lua тут размещается пока наша простенькая страничка, следующий server.lua, это простенький HTTP сервер, потом data.lua, при помощи которого будут собираться данные с датчиков, далее сами датчики, BME280.lua, Z19B.lua, PMS5003.lua. На данном этапе вот что есть: init.lua
Код:
dofile("start.lua")
Код:
dofile("wifi.lua")
dofile("server.lua")
dofile("bme280.lua")
Код:
wifi.setmode(wifi.STATION) -- установка режима
wifi.sta.clearconfig() -- очистка от барахла
local scfg={} -- таблица установок ржима
scfg.auto = true -- входить и поддерживать сеть автоматически
scfg.save = true -- запомнить эти установки во флэше
scfg.ssid = '1111' -- название сетки
scfg.pwd = '123456'-- пароль сетки
wifi.sta.config(scfg) -- конфигурируем сеть
wifi.sta.connect() -- старт соединения
-- через 15 секунд посмотрим что получилось, после отладки уберем:
tmr.create():alarm(15000, tmr.ALARM_SINGLE, function() print('\n', wifi.sta.getip()) end)
Код:
do
dat = {
temp = 100,
humi = "Сухо"
}
local function expand (s)
return (string.gsub(s, "$(%w+)", dat))
end
srv = net.createServer(net.TCP)
function receiver(sck, data)
local function closec()
sck:close()
end
local function send()
if file.open("page.lua", "r") then
repeat
local line = file.readline()
if line then
line = expand(line)
sck:send(line)
end
until line == nil
file.close()
else
sck:close()
end
end
sck:on("sent", closec)
send()
end
srv:listen(80, function(conn)
conn:on("receive", receiver)
end)
end
Код:
<p align="center"><img alt="" height="72" src="https://www.123.com/logo.png" width="148"></p>
<p align="center">Температура в доме: $temp</p>
<p align="center">Влажность в доме : $humi</p>
Код:
alt=280
sda, scl = 3, 4
i2c.setup(0, sda, scl, i2c.SLOW)
bme280.setup()
tmr.create():alarm(20000, 1, function()
local T, P, H, QNH = bme280.read(alt)
local Tsgn = (T < 0 and -1 or 1); T = Tsgn*T
print(string.format("T=%s%d.%02d", Tsgn<0 and "-" or "", T/100, T%100))
print(string.format("QFE=%d.%03d", P/1000, P%1000))
print(string.format("QNH=%d.%03d", QNH/1000, QNH%1000))
print(string.format("humidity=%d.%03d%%", H/1000, H%1000))
D = bme280.dewpoint(H, T)
local Dsgn = (D < 0 and -1 or 1); D = Dsgn*D
print(string.format("dew_point=%s%d.%02d", Dsgn<0 and "-" or "", D/100, D%100))
-- altimeter function - calculate altitude based on current sea level pressure (QNH) and measure pressure
P = bme280.baro()
curAlt = bme280.altitude(P, QNH)
local curAltsgn = (curAlt < 0 and -1 or 1); curAlt = curAltsgn*curAlt
print(string.format("altitude=%s%d.%02d", curAltsgn<0 and "-" or "", curAlt/100, curAlt%100))
end)
Остановился на том что не знаю как правильно передать данные от BME280.lua в поле dat page.lua. Ну и в данном варианте page.lua, то что написано кириллицей, в браузере каркозяблы. Буду благодарен за любую помощь и подсказки в реализации данного проекта.