- a wifit én a LuaLoader-ben konfigolom, az elmenti maradandóra, többet nem kell vele törődni.
- a kód tetején kell beírni hogy melyik pin az 1w busz, meg a thingspeak API kulcsot
- az futás elején kilistázza a buszon talált ds18b20-akat, olyan alakban mint ahogy a kódba be kell tenni. Innen be kell copy-pasteolni a kód tetején az én négy IDm helyére. Az utolsó után nem kell vessző! Amelyik szenzor itt az első, az lesz a field1, és így tovább. A thingspeak asszem 8 fieldet enged. Ha átírtad, utánna újra fel kell tölteni.
Hiányosságok:
- nem sleepel mérések között. mondjuk ha nem elemről megy, nem sok értelme van
- nem kezeli ha a wifi vagy a hálózat leállt. idővel vissza szokott konnektálni nekem
- egyesével olvassa a szenzorokat, nem használ simultaneous conversiont. ahhoz kellene táp is a szenzoroknak, most nekem parasitic power-ben megy
-- search bus for devices ow.setup(pin) count = 0 ow.reset_search(pin) repeat addr = ow.search(pin) if (addr~=nil) then crc = ow.crc8(string.sub(addr,1,7)) if (crc == addr:byte(8)) then if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then count = count + 1 print (string.format("{%d,%d,%d,%d,%d,%d,%d,%d},",addr:byte(1,8))) end end end tmr.wdclr() until ((addr==nil) or (count>=10))
getTemp=function(sAddr) ow.reset(pin) ow.select(pin, sAddr) ow.write(pin, 0x44, 1) tmr.delay(1000000) present = ow.reset(pin) ow.select(pin, sAddr) ow.write(pin,0xBE,1) data = nil data = string.char(ow.read(pin)) for i = 1, 8 do data = data .. string.char(ow.read(pin)) end crc = ow.crc8(string.sub(data,1,8)) if (crc == data:byte(9)) then t = (data:byte(1) + data:byte(2) * 256) * 625 t1 = math.floor(t / 10000) t2 = t % 10000 return t1.."."..t2 else return nil end tmr.wdclr() end
sendData=function(d) s="" for i=1,#d do s=s.."&field"..i.."="..(d[i]) end conn=net.createConnection(net.TCP, 0) conn:on("receive", function(conn, payload) if (string.find(payload, "Status: 200 OK") ~= nil) then print("Posted OK"); end end) conn:on("connection", function(conn, payload)
print (s) conn:send("GET /update?api_key="..apiKey..s .. " HTTP/1.1rn" .. "Host: api.thingspeak.comrn" .. "Connection: closern" .. "Accept: */*rn" .. "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)rn" .. "rn") end) conn:on("disconnection", function(conn, payload) conn:close(); collectgarbage(); end) conn:connect(80,"api.thingspeak.com") end
tmr.alarm(0, 60000, 1, function() results={} for i = 1,#addrList do results[i]=getTemp(addrList[i]) end sendData(results) end )
Nem sürgős, örülök ha meg tudod oldani és meg is osztod velünk!
Teljesen jó, ha a programba kell beírni, de végülis mindegy, mert feltölti mondjuk az első négyre aztán majd úgy lesz berakva a szenzor amelyik azt méri amit szeretnék. Vagy csak egyszerűen utána nevezem el a mezőket amikor látom, hogy melyiket hova tölti fel.
A programba úgyis bele kell írni a wifi csatlakozás miatt és a write kódot is bele kell rakni.
én most tesztelem. 3 napja megy, egyszer volt hogy 20percre valamiért nem tudott konnektálni, de szerintem csak béna a breadboard, mert pont akkor pakolásztam is.
az egyiken dht11 van, az a szenzor egy rakás szar. a másikon egy 18b20. egy 18650 akkuról percenkénti logolással 24-26 órát ment sleep nélkül. most játszom a deep sleeppel, a mai a negyedik nap és még megy.
a 1wire cuccban esp-ileg nem mélyültem el, a nodemcu api elég low level, az alap busz kommandokat tudja. szoftverileg nem látszik problémásnak a több szenzor elkezelése egy buszon. elektromosan viszont van nyűg rendesen. az esp 3.3V és nem is 5V toleráns, a 1wire meg 5V és a busz meghajtásához kell is neki. Egy szenzor rövid dróttal elmegyeget 3.3V-ról, de nem várnék tőle sokat. Vannak a maximnak i2c buszod meghajtói, azok megoldanák a szintillesztést is asszem. van is valahol, csak kopaszon, nincs hozzá breakout boardom.
Minden példa AVR-re, és STM32-re is. Ami azért külön jó, mert egy csomó mindent pont ellentétesen valósítottak meg bennük. (Kell-e interrupt flag-et törölni, hová menti a state-t, stb.)
Foleg amikor az ipafi szabvanyok egymasnak bekavadnak,es egy rendszeren belul esetleg tobb is elofordul. Ekkor jon az hogy ugyanazokat a buszokat sl keĺl kezdeni szetszedni.
ha lehet debugolni, az maga a menyország. képzeld el ha a szenzor által küldött hőmérséklet bitmintája indít el valamit ami irreleváns. ott kezdődik hogy soha rá sem jössz hogy akkor önállósítja magát a redőny amikor 23.15 fok van a fürdőszobában, csak annyi van hogy néha magától lemegy, télen ritkán, nyáron gyakrabban, és esténként is csinálja néha.
ne azt nézd hogy oda az van írva hogy protokoll: nincs.
a protokoll egy fogalom a szakmában. azt a nyelvet jelenti, amit az adott buszon beszélnek.
nem találhatsz ki egy sajátot, mert véletlenül előfordulhat hogy a te mondatod valamit jelent a többiek nyelvén, vagy fordítva.
kitalálod, hogy az ff 01 01 azt jelenti hogy 1.es relé meghúz. közben meg a többi modul protokolljában az aa a0 c1 ff 01 01 02 ff fc azt jelenti hogy nappali termosztát 22 fokra. megírod a cuccodat, figyeli a buszt, és ha elhangzik hogy ff 01 01 meghúzza a relét. leteszteled, műkszik faszán. aztán beteszed a helyére, és ahányszor 22 fokra állítják a szobatermosztátot mindig lemegy a redőny.
a keret egy olyan fogalom, hogy sablon mondatot találunk ki. fix szerkezettel, szórenddel. óriási az esély hogy a loxone is így működik. és valamelyik szó jelenti hogy kinek szól a mondat. kitalálsz a saját cuccodnak egy azonosítót, és ilyen mondatokkal kommunikál a te cuccod is. így a többiek kicsit értik a mondatod és tudják nem nekik szól, meg te is érted a nekik szólókat és tudod hogy nem neked szólnak.