Innholdsfortegnelse:
- Trinn 1: Værstasjon med lys-, temperatur- og fuktighetssensorer
- Trinn 2: MQTT: et fleksibelt medium for publisering og abonnering av data
- Trinn 3: Lagre data i SQL og vis dem på en webserver
Video: Weather Station: ESP8266 With Deep Sleep, SQL, Graphing by Flask & Plotly: 3 Steps
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Ville det vært morsomt å vite temperaturen, fuktigheten eller lysintensiteten på balkongen din? Jeg vet jeg ville. Så jeg lagde en enkel værstasjon for å samle slike data. De følgende avsnittene er trinnene jeg tok for å bygge en.
La oss komme i gang!
Trinn 1: Værstasjon med lys-, temperatur- og fuktighetssensorer
Da jeg planla å bygge en værstasjon, drømte jeg om å ha en fullverdig værstasjon som har vindhastighet, regnmåling, fullspektret solsensor, men det viste seg at det ikke ville være billig, og kjøpskostnaden kan ende opp minst $ 100. Jeg ga opp alle alternativene og begynte å bygge en med $ 10, mer eller mindre. $ 10 er kostnaden for grunnleggende komponenter på værstasjonen som delene nedenfor.
Her er delene:
1. ESP8266 Wemos merkevare koster $ 2,39 stk på Aliexpress. Jeg vil anbefale Wemos -merke fordi EPS8266 er lettere å programmere, oppdatere og ha 4 MB blits eller mer.
2. Wemos Charger-Boost Shield koster $ 1,39 stk. Dette er en annen fordel ved å bruke dette merket. Den har et boost-up-kort for litiumbatteri (nominell spenning = 3,7V) til en 5V for ESP8266. Brettet kommer også med ladealternativ med maks ladestrøm = 1M.
*Merk: Det er et billigere alternativ for litiumbatteri lading/boost opp. Denne koster 1,77 dollar for 5 stk. Men da jeg brukte dette brettet til ESP8266 (enten Wemos eller bare ESP8266), utløste ESP8266 dyp dvalemodus en tilbakestilling rett etter at ESP8266 ble laget i en loop av sleep-reset-sleep, noe som er veldig irriterende. Hvis du vet hva som skjedde, vennligst send meg en innboks.
3. Wemos har også flere skjold for temperatur og fuktighet, men jeg skal bygge fra individuelle komponenter. Fotoresistor (eller lysavhengig motstand-ldr, billig), en lysstyrkesensor som BH1780 eller TSL2561 (ca. 0,87-0,89c stk), en temperatursensor som DS18B20 (75c hver), og en kombinasjon av fuktighet og temperatur som f.eks. DHT22 ($ 2,35 her) eller SHT21 ($ 2,20 her). En total kostnad for sensoren ~ $ 4.
4. Litiumbatteri. Jeg reddet en fra et 7,4V Canon -batteri som er to 3,7V -batterier i serie eller 18650 litiumbatteri. Hver 18650 koster omtrent $ 5 stykket. Jeg har et bilde som viser rive kameraets batteripakke. Vær forsiktig, kortslutning når du skjærer gjennom plastdekselet kan generere ekstrem varme og brenne.
5. PCB -kort, jumper, wire, lodding, din tid, kanskje noen feilsøkingsferdigheter.
La ledningskomponenter sammen følge skjemaet ovenfor.
Se deretter etter oppgaven i oppsettsløyfen. Det er rett og slett en en-oppgave med oppgaver og avsluttes med en hvilekommando.
ugyldig oppsett () {Serial.begin (115200); Serial.println ("Startnode med navn" + String (SENSORNAME)); setup_wifi (); forsinkelse (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21.begin (); if (! tsl.begin ()) {Serial.print ("TSL2561 ikke funnet"); mens (1); } forsinkelse (100); ldr = analogRead (ldrPin); tsl.enableAutoRange (true); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); forsinkelse (100); hendelser sensor_event_t; tsl.getEvent (& event); hvis (event.light) lux = event.light; annet Serial.println ("Sensoroverbelastning");
h = SHT21.getHumidity ();
t = SHT21.getTemperature (); tempSensor.setWaitForConversion (false); tempSensor.begin (); forsinkelse (100); if (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 ikke funnet på pin %d / n", ds18b20); Serial.flush (); forsinkelse (1000); } forsinkelse (100); tempSensor.requestTemperatures (); t18 = tempSensor.getTempCByIndex (0); Serial.printf ("\ nLight: %d lux / t", lux); Serial.printf ("LDR: %d /1024 / t", ldr); Serial.printf ("T: %0.2f *C / t", t); Serial.printf ("H:%0.2f / t", h); Serial.printf ("HIC: %0.2f / t", hic); forsinkelse (100); client.setServer (mqtt_server, mqtt_port); client.setCallback (tilbakeringing); koble til på nytt (); forsinkelse (100); ESP.deepSleep (3e8); // 300 millioner mikrosekunder, 300 sekunder, 5 minutter; }
Under feilsøking eller konfigurering, kommandér ut ESP.deepsleep () for å ha seriell avlesning kontinuerlig. Som alltid er hele koden for å laste opp til ESP8266 vert her (GitHub).
Husk å ta på deg hopperen mellom RST og D0/GPIO16 for å utløse en vekker etter en periode med dyp søvn.
Nå er det på tide å laste opp koden ved hjelp av Arduino IDE til ESP8266.
Trinn 2: MQTT: et fleksibelt medium for publisering og abonnering av data
For det første blir jeg glad i å bruke MQTT til å sende og motta data på tvers av forskjellige sensorer og klienter i hjemmet mitt. Det er fordi fleksibiliteten til å sende ubegrensede data kategorisert etter et emne, og ubegrensede klienter til å abonnere på ett emne fra en MQTT -megler. For det andre er jeg ikke kvalifisert til å diskutere MQTT grundig. Noen ganger ble jeg kjent med MQTT i fjor (2017) da jeg fulgte opplæringsprogrammer for å sette opp en værstasjon og sensorer ved hjelp av Node-RED. Uansett, jeg skal gjøre mitt beste for å presentere litt informasjon for deg. Et annet godt sted å starte er Wikipedia.
Hvis du ikke har tid til å lese om teorien, og ønsket å sette opp en MQTT -megler, la jeg ut en annen opplæring bare for å gjøre det. Slå opp dette innlegget, og bla ned til trinn 4.
For å forklare hva som er Message Queuing Telemetry Transport (MQTT) etter min forståelse, utarbeidet jeg et diagram som ovenfor. I nøtteskall er MQTT en ISO-standard, og et produkt som mygg og myggklient, to pakker jeg brukte, bygde MQTT-megler på en Raspberry Pi, må overholde den standarden. MQTT -megleren blir deretter et medium for utgivere for å skyve en melding inn og abonnenter for å lytte til et målemne.
Kombinasjonen av Arduino PubSubclient -biblioteket med ArduinoJson, takket være skaperen knolleary og bblanchon, gjør det enklere for tinkere og utviklere for et sett med verktøy fra sensorer til et målutstyr eller en sluttklient.
La oss gå videre med å lage en database og vise noen data.
Trinn 3: Lagre data i SQL og vis dem på en webserver
Jeg brukte sqlite3 til å lage en database for webserveren. Installer sqlite3 i Rapberry Pi ved å:
sudo apt-get install sqlite3
opprettet en database og en tabell ved å skrive inn i terminalen:
sqlite3 weatherstation.db
SKAP TABELL værdata (id INT PRIMÆR NØKKEL, tid DATETIME, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);
.exit // for å gå ut av kommandolinjen sqlite og gå tilbake til Linux -terminalen
For å lytte til et emne utgitt av værstasjonen, brukte jeg et Paho -bibliotek med Python:
#! /usr/bin/python3# vedtatt fra: > # binh nguyen, august 04, 2018, from time import localtime, strftime, sleep import paho.mqtt.client as mqtt import sqlite3, json
mqtt_topic = 'balcony/weatherstation'
mqtt_username = "johndoe" mqtt_password = "password" dbfile = "/path/to/databse/weatherstation.db" mqtt_broker_ip = '192.168.1.50'
# the callback for when the client receives a connack response from the server.
def on_connect(client, userdata, flags, rc): print("connected with result code "+str(rc)) client.subscribe(mqtt_topic) # the callback for when a publish message is received from the server. def on_message(client, userdata, msg): thetime = strftime("%y-%m-%d %h:%m:%s", localtime())
topic = msg.topic
payload = json.dumps(msg.payload.decode('utf-8')) sql_cmd = sql_cmd = """insert into weatherdata values ({0}, '{1}', {2[ldr]}, {2[tsl2561]}, {2[ds18b20]}, {2[tsht21]}, {2[hsht21]})""".format(none, time_, payload) writetodb(sql_cmd) print(sql_cmd) return none
def writetodb(sql_cmd):
conn = sqlite3.connect(dbfile) cur = conn.cursor() cur.execute(sql_command) conn.commit()
client = mqtt.client()
client.on_connect = on_connect client.on_message = on_message client.username_pw_set(username=mqtt_username, password=mqtt_password) client.connect(mqtt_broker_ip, 1883, 60) sleep(1) client.loop_forever()
to display data from use another sql command to query data from the database such as:
sql_command = """ select * from weatherdata order by thetime desc limit 1000;"
this sql command is included in the app.py that uses flask framework and plotty to make a web server and plotting a graph.
the complete code is hosted on the github.
if the esp8266 cannot read the ds18b20, it assigned a value of -127 as the temperature which skews the relative range of other readable temperatures. i cleaned up those values by set a null value to those equals to -127:
sqlite3 weatherstation.db
sqlite3> update weatherdata set ds18b20 = null where ds18b20 = -127;
to set up an environment for this mini web server, i used the shared libraries on raspberry pi. a virtualenv is a better option if the web server is hosted on a powerful computer. start the web server by:
python3 app.py
press control + c to stop the server.
the web server is set to auto-refreshed for every 60 seconds. you can change the interval in index.html file:
battery performance:
i did not measure the current between the normal state or sleep state of esp8266. many others did so. the first google search turned to this page. the normal state of esp8266 consumes about 100ma depends on the rate of transmitting and wifi activity. the deep-sleep state needs in the range of micro a, which a thousand times less.
for 5-minute interval between sleeping and waking up, one single lithium 18650 (2000mah) could fuel my weather station for 12 days. the same battery only enough for esp 8266 ran less than a day with a normal working state. the one i took from the camera battery pack (did not know the capacity) was enough to run the weather station with deep sleep for 5-6 days.
thank you for spending time with me to this end.
Anbefalt:
Super Weather Station hengende kurv: 11 trinn (med bilder)
Super Weather Station Hengende kurv: Hei alle sammen! I dette T3chFlicks blogginnlegget viser vi deg hvordan vi lagde en smart hengende kurv. Planter er et friskt og sunt tillegg til ethvert hjem, men kan fort bli slitsomt - spesielt hvis du bare husker å vanne dem når du
Zombie Detecting Smart Security Owl (Deep Learning): 10 trinn (med bilder)
Zombie Detecting Smart Security Owl (Deep Learning): Hei alle sammen, velkommen til T3chFlicks! I denne Halloween -opplæringen viser vi deg hvordan vi setter en superhyggelig vri på en dagligdagsk klassiker: sikkerhetskameraet. Hvordan?! Vi har laget en nattsynugle som bruker bildebehandling for å spore mennesker
Simple Weather Station V2.0: 5 Steps (med bilder)
Simple Weather Station V2.0: Tidligere har jeg delt noen typer værstasjoner som fungerte annerledes. Hvis du ikke har lest disse artiklene, anbefaler jeg at du sjekker det ut her: Enkel værstasjon som bruker ESP8266. Værstasjon på rommet ved hjelp av Arduino &
Arduino Project: Kontrollelektronikk over internett ved hjelp av Nodejs + SQL Database & Website .: 6 trinn
Arduino Project: Control Electronics Over the Internet Using Nodejs + SQL Database & Website .: Project By: Mahmed.techDate Made: 14. juli 2017 Vanskelighetsnivå: Nybegynner med litt programmeringskunnskap. Maskinvarekrav: - Arduino Uno, Nano, Mega (jeg tror de fleste MCU med seriell tilkobling vil fungere) - Single LED & Gjeldende begrensende res
One More Arduino Weather Station (ESP-01 & BMP280 & DHT11 & OneWire): 4 trinn
One More Arduino Weather Station (ESP-01 & BMP280 & DHT11 & OneWire): Her kan du finne en iterasjon av bruk av OneWire med de få pinnene på en ESP-01. valg (du må ha legitimasjon …) Samler sansedata fra en BMP280 og en DHT11