Jam antaŭ longe mi kunfuŝis etan veterstacion. Ĝi kapablas mezuri temperaturon, relativan humidecon, kaj aerpremon. Aldone, mi intertempe ricevis mezurilon por la lumkvanto.

La stacio en ĝia natura medio.

La tuta sistemo funkcias surbaze de ESP8266 mikrokontrolilo. Tiuj mikrokontroliloj estas tre oportunaj, ĉar ili povas komuniki per ‚normala‘ sendrata reto. Mi uzas la softvaron NodeMCU sur ĝi, ĉar ĝi estas facile uzebla kaj kunportas kodotekojn por multaj mezuriloj, inklude por la du de mia projekteto: La TSL 2561, kiu mezuras la lumkvanton, kaj la BME280, kiu mezuras ĉion alian.

La kodo konsistas al efektive tri dosieroj: init.lua kaj credentials.lua estas pli-malpli kopiitaj de la ekzemploj de la NodeMCU dokumentaro. Ili simple zorgas, ke la sistemo startas kaj konektas al mia loka sendrata reto; kaj poste ĝia programfluo iras al application.lua, kiu enhavas la ‚veran‘ kodon.

Do, jes, ĉio estas skribata en la programlingvo Lua. Mi ne vere regas ĝin, ĝi estas tamen sufiĉe simpla. Ĝenerale, kun tiaj projektoj, mi kopias iaspecan ekzemplon kaj evoluigas ĝin al kion iajn mi volas havi.

Jen la tuta programo:

bme280.init(3, 4, nil, nil, nil, 0) -- initialize to sleep mode

status = tsl2561.init(3, 4, tsl2561.ADDRESS_FLOAT, tsl2561.PACKAGE_T_FN_CL)
if status == tsl2561.TSL2561_OK then
    status = tsl2561.settiming(tsl2561.INTEGRATIONTIME_101MS, tsl2561.GAIN_1X)
end

srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
	conn:on("receive",function(conn)
		bme280.startreadout(0, function ()
			T, P, H = bme280.read()
			lux = tsl2561.getlux()
			lux_bs, lux_ir, lux_st = tsl2561.getrawchannels()
			conn:send(string.format([[HTTP/1.1 200 OK
Content-Type: application/json
Access-Control-Allow-Origin: *
Connection: close

{"temperature": %s, "pressure": %s, "humidity": %s,
"lux": %s, "lux_ir": %s, "lux_bs": %s}]], T, P, H, lux, lux_ir, lux_bs))
		end)
	end)
	conn:on("sent", function(conn)
		conn:close()
	end)
end)

Do komence mi agordas la mezurilojn. Ambaŭ mezuriloj kapablas komuniki per la protokolo I2C, kaj tio simpligas la projekton, ĉar mi simple povas konekti ambaŭ al la dratoj 3 kaj 4, kaj mi ne bezonas pliajn (krom elektro, kompreneble).

Poste mi kreas etan TCP servilon, kiu, kiam venas iu ajn demando, ĝi tuj respondas per iom da HTTP. Ĝi estas tre baza, kaj sufiĉe fuŝa, sed tamen funkcias.

Ĝi respondas per la datumformato JSON, kiu en nia kazo simple enhavas la valorojn tiel, kiel ili ‚falas‘ el la mezuriloj.

Vi povas vidi, ke mi metis tre vastan CORS kaplinion Access-Control-Allow-Origin: *. Mi poste volas uzi la informojn en loka HTML dosiero por montri al mi la nunan staton de la vetero. Mi ankaŭ metas Connection: close, ĉar ĝi vere ne scipovas iun ajn alian moduson ;-)

Mi fiksis la mikrokontrolilon per du ŝraŭboj kaj poste metis la mezurilojn per gluaĵo al la alia flanko de lignopeco. Estas mirinda, ke nenio forfalis ĝis nun kvankam ĝi staris ekstere dum sufiĉe longa tempo kaj ofte kaptis la sunon.

Feliĉe por ni, sed malfeliĉe por la stacio, nia balkono estas ĉe la suda flanko de la konstruaĵo, do la valoroj ne ĉiam respegulas la ‚ombran veron‘. Tamen estas sufiĉe interesa.

Ĉiukaze, hieraŭ mi kreis etan HTML paĝon, kiu povas ensuĉi la informojn kaj elsputi la ion legeblan.

Ekranfoto de la retpaĝo, ĉio en la germana, pardonu :)

Se la ĉefa valoro de la lummezurilo iras sub iu nombro (500, en mia kazo), la paĝo ŝanĝas la aspekton tiel, ke ĝi estas pli oportune legebla en malheleco.

Mi faris filmeton de tiu efekto, la filmeto estas iom pli rapida ol la realo por ne esti teda :)

Transiro de malhela al hela aspekto, kaj reen.

La stato antaŭ unu jaro

Dum longa tempo ĝi ne funkciis, ĉar mi ne bone zorgis pri la infrastrukturo malantaŭ la tuta sistemo. Jen tri bildoj montrante la datumojn de iu tago en septembro pasintjare:

La tri valoroj de la lummezurilo.

La temperaturo de la nun kaj la antaŭa tago.

La relativa humideco de la nuna kaj antaŭa tago.

Malfeliĉe mi ne havas bildon de la aerpremo, sed ĝi estis ankaŭ mezurita.

La estonto

Nu, mi volas iom plibonigi la nunan staton; kaj eble ankaŭ denove kolekti la informojn den iu datumbazo. Estas sufiĉe interesa vido, kiel la valoroj ŝanĝiĝas kaj kiel ili estas interligataj.

Fino

Se vi interesiĝas, la kodo por la tutaĵo troveblas ĉi tie.

Mi esperas, ke tiu ĉi teksto estis interesa kaj eble eĉ helpos al vi eviti la damnan sunon!