UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
Pytanko dotyczy czujnika BME680 i związków lotnych jakich wartości powinniśmy się tam spodziewać bo w moim przypadku cały czas pokazuje 0,5 co bym pod czujnik nie podsunął :/
0.5 wartość domyślna
prawidłowo skonfigurowany podaje zmieniające się co chwilę wartości.
ehh wszystkie inne wartości podaje prawidłowo tylko tam mu leży na 0.5 :/
Chyba że czujnik tego nie obsługuje albo wada wakas to też będzie wartość domyślna podawać.
więc tak jak podpinam go i wrzucam coś takiego:
--konfiguracja I2C
sda, scl = 2, 1
i2c.setup(0, sda, scl, i2c.SLOW) -- call i2c.setup() only once
--konfiguracja AP
cfg={}
cfg.ssid="Weather station"
wifi.ap.config(cfg)
counter=0
battery=0
--konfiguracja BME680
alt=167 -- altitude of the Mielec airport
sealevel=101325
bme680.setup() --T,P,H oversample, heater_temp, heat_time, IRR, cold_start
--cykliczny pomiar wartosci co 4-ry sek.
tmr.alarm(0, 4000, 1, function()
-- delay for heating (by Bosch: 121 ms), minimum working (empirical): 150 ms
bme680.startreadout()
-- measure all in one step an convert air pressure to sea level pressure
T, P, H,G, QNH = bme680.read(alt)
print(string.format("T=%d.%d", T/100, T%100))
print(string.format("humidity=%d.%d%%", H/1000, H%1000))
print(string.format("QFE=%d.%d", P/100, P%100))
print(string.format("QNH=%d.%d", QNH/100, QNH%100))
print(string.format("IAQ=%d", G))
-- convert to dewpoint (punkt rosy)
D = bme680.dewpoint(H, T)
print(string.format("dew_point=%d.%d", D/100, D%100))
-- altimeter function - calculate altitude from current sea level pressure (QNH) and measure pressure
curAlt = bme680.altitude(P, sealevel)
print(string.format("altitude=%d.%d", curAlt/100, curAlt%100))
battery=adc.read(0)*10
print("Battery voltage (mV):", battery)
counter=counter+4
end)
--lokalny serwer wyswietlajacy pomiary
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
majorVer, minorVer, devVer, chipid, flashid, flashsize, flashmode, flashspeed = node.info()
local buf
buf="HTTP/1.1 200 OK\nContent-Type: text/html\nRefresh: 10\n\n"
buf=buf.."<!DOCTYPE HTML>"
buf=buf.."<html><body>"
buf=buf.."<h1> BME680 environment station </h1>"
buf=buf.."temperature = " .. T/100 ..".".. (T%100)/10 .. " [°C]<br>"
buf=buf.."humidity = " .. H/1000 .. "." .. (H%1000)/100 .." [%]<br>"
if(G)>100000 then buf=buf.."<font color=lime>"
elseif(G)>50000 then buf=buf.."<font color=green>"
elseif(G)>25000 then buf=buf.."<font color=olive>"
elseif(G)>10000 then buf=buf.."<font color=red>"
else buf=buf.."<font color=fuchsia>"
end
buf=buf.."air quality = " .. G .. " [Q]<br></font>"
buf=buf.."pressure = " .. P/100 .. " [hP]<br>"
buf=buf.."sea level pressure = " .. QNH/100 .. " [hP]<br>"
buf=buf.."altitude = " .. curAlt/100 .. "."..(curAlt%100)/10 .. " [mnpm]<br>"
buf=buf.."---- statistic ----<br>"
buf=buf.."battery voltage = " .. battery/1000 ..".".. (battery%1000)/100 .. " [V]<br>"
buf=buf.."online = " .. counter/60 .. " [min]<br>"
buf=buf.."node heap = " .. node.heap() .. " [B]<br>"
buf=buf.."NodeMCU "..majorVer.."."..minorVer.."."..devVer .."<br>"
buf=buf.."</html></body>"
conn:send(buf)
conn:on("sent",function(conn) conn:close()
collectgarbage()
end)
end)
niestety trzeba wrzucić stary firmaware, bo z nowym rozjeżdża się funkcja tmr.alarm(0, 4000, 1, function() tutaj wszystko działa poprawnie najbardziej zależy mi żeby było wyświetlane air quality niestety w ADF nie ma tej funkcji więc kombinuję jak ją wyciągnąć inaczej na razie zatrzymałem się na tym ze za cholerę nie mogę podłączyć esp do sieci po wi fi :/