Indholdsfortegnelse:
- Trin 1: Vejrstation med lys-, temperatur- og fugtighedssensorer
- Trin 2: MQTT: et fleksibelt medium til at offentliggøre og abonnere på data
- Trin 3: Gem data i SQL, og vis dem på en webserver
Video: Vejrstation: ESP8266 Med dyb søvn, SQL, tegning efter kolbe og plott: 3 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
Ville det være sjovt at kende temperaturen, fugtigheden eller lysintensiteten på din altan? Jeg ved, jeg ville. Så jeg lavede en simpel vejrstation til at indsamle sådanne data. De følgende afsnit er de trin, jeg tog for at bygge en.
Lad os komme igang!
Trin 1: Vejrstation med lys-, temperatur- og fugtighedssensorer
Da jeg planlagde at bygge en vejrstation, drømte jeg om at have en fuldgyldig vejrstation, der har vindhastighed, regnmåling, fuldspektret solsensor, men det viste sig, at det ikke ville være billigt, og købsomkostningerne kunne ende op til mindst $ 100. Jeg opgav de fulde muligheder og begyndte at bygge en med $ 10, mere eller mindre. $ 10 er prisen på grundlæggende komponenter på vejrstationen som delene herunder.
Her er delene:
1. ESP8266 Wemos mærke koster $ 2,39 stk. På Aliexpress. Jeg vil anbefale Wemos mærke, fordi dets EPS8266 er lettere at programmere, opdatere og have 4 MB flash eller mere.
2. Wemos Charger-Boost Shield koster $ 1,39 stk. Dette er en anden fordel ved at bruge dette mærke. Den har et boost-up-kort til litiumbatteri (nominel spænding = 3,7V) til en 5V til ESP8266. Brættet leveres også med opladningsmulighed med en maksimal ladestrøm = 1M.
*Bemærk: Der er en billigere mulighed for opladning/boost af litiumbatteri. Denne koster 1,77 $ for 5 stk. Men da jeg brugte dette kort til ESP8266 (enten Wemos eller bare ESP8266), udløste ESP8266 dyb dvaletilstand en nulstilling lige efter, at ESP8266 blev foretaget i en loop af sleep-reset-sleep, hvilket er meget irriterende. Hvis du ved, hvad der skete, kan du venligst inboxe mig.
3. Wemos har også flere afskærmninger til temperatur og fugtighed, men jeg vil bygge fra individuelle komponenter. Fotoresistor (eller lysafhængig modstand-ldr, billig), en lysstyrkesensor som f.eks. BH1780 eller TSL2561 (ca. 0,87-0,89c stk.), En temperatursensor som DS18B20 (75c hver) og en fugtigheds- og temperaturkombination som f.eks. DHT22 ($ 2,35 her) eller SHT21 ($ 2,20 her). En samlet pris for sensoren ~ $ 4.
4. Litiumbatteri. Jeg reddede et fra et 7,4V Canon -batteri, som er to 3,7V -batterier i serie eller 18650 litiumbatteri. Hver 18650 koster omkring $ 5 stykket. Jeg har et billede, der viser nedbrydningen af kameraets batteripakke. Vær dog forsigtig, kortslutning, når du skærer gennem plastdækslet, kan generere ekstrem varme og brænde.
5. Printkort, jumper, wire, lodning, din tid, måske nogle fejlfindingsevner.
Lad ledningskomponenter sammen følge skematisk ovenfor.
Så kig efter opgaven i opsætningssløjfen. Det er simpelthen en kørsel af opgaver og ender med en søvnkommando.
ugyldig opsætning () {Serial.begin (115200); Serial.println ("Startnode navngivet" + streng (SENSORNAVN)); setup_wifi (); forsinkelse (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21.begin (); hvis (! tsl.begin ()) {Serial.print ("TSL2561 ikke fundet"); mens (1); } forsinkelse (100); ldr = analogRead (ldrPin); tsl.enableAutoRange (sand); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); forsinkelse (100); sensorer_event_t begivenhed; tsl.getEvent (& event); hvis (event.light) lux = event.light; ellers Serial.println ("Sensoroverbelastning");
h = SHT21.getHumidity ();
t = SHT21.getTemperature (); tempSensor.setWaitForConversion (falsk); tempSensor.begin (); forsinkelse (100); if (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 findes ikke på pin %d / n", ds18b20); Seriel.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 (tilbagekald); tilslut igen (); forsinkelse (100); ESP.deepSleep (3e8); // 300 millioner mikrosekunder, 300 sekunder, 5 minutter; }
Under fejlfinding eller opsætning skal du kommandere ESP.deepsleep () ud for konstant at have seriel aflæsning. Som altid er den fulde kode til upload til ESP8266 hostet her (GitHub).
Husk at tage jumperen på mellem RST og D0/GPIO16 for at udløse et vågne efter en periode med dyb søvn.
Nu er det tid til at uploade koden ved hjælp af Arduino IDE til ESP8266.
Trin 2: MQTT: et fleksibelt medium til at offentliggøre og abonnere på data
For det første bliver jeg glad for at bruge MQTT til at sende og modtage data på tværs af forskellige sensorer og klienter i mit hjem. Det er fordi fleksibiliteten til at sende ubegrænsede data kategoriseret efter et emne og ubegrænsede klienter til at abonnere på et emne fra en MQTT -mægler. For det andet er jeg ikke kvalificeret til at diskutere MQTT i dybden. Jeg lærte MQTT nogle gange at kende sidste år (2017), da jeg fulgte vejledninger til opsætning af en vejrstation og sensorer ved hjælp af Node-RED. Under alle omstændigheder vil jeg gøre mit bedste for at præsentere nogle oplysninger for dig. Et andet godt sted at starte er Wikipedia.
Hvis du ikke har tid til at læse om teorien og ønskede at oprette en MQTT -mægler, lagde jeg endnu en vejledning op for at gøre det. Slå dette indlæg op, og rul ned til trin 4.
For at forklare, hvad der er Message Queuing Telemetry Transport (MQTT) i min forståelse, udarbejdede jeg et diagram som ovenfor. Kort sagt, MQTT er en ISO-standard, og et produkt som myg og myg-klient, to pakker jeg brugte til at bygge MQTT-mægler på en Raspberry Pi, skal overholde denne standard. MQTT -mægleren bliver derefter et medium for udgivere til at skubbe et budskab ind og abonnenter til at lytte til et målemne.
Kombinationen af Arduino PubSubclient -bibliotek med ArduinoJson, takket være dets skaber knolleary og bblanchon, gør det lettere for tinkere og udviklere for et sæt værktøjer fra sensorer til et måludstyr eller en slutklient.
Lad os gå videre med at oprette database og vise nogle data.
Trin 3: Gem data i SQL, og vis dem på en webserver
Jeg brugte sqlite3 til at oprette en database til webserveren. Installer sqlite3 i Rapberry Pi ved at:
sudo apt-get installer sqlite3
oprettet en database og en tabel ved at skrive i terminalen:
sqlite3 weatherstation.db
OPRET TABEL vejrdata (id INT PRIMÆR NØGLE, dengang DATETIME, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);
.exit // for at forlade kommandolinjen sqlite og vende tilbage til Linux -terminalen
For at lytte til et emne udgivet af vejrstationen brugte jeg et Paho -bibliotek med Python:
#! /usr/bin/python3# vedtaget 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.
Anbefalede:
Læsning og tegning af lys- og temperatursensordata med hindbær Pi: 5 trin
Læsning og tegning af lys- og temperatursensordata med Raspberry Pi: I denne instruks kan du lære at læse en lys- og temperatursensor med hindbær pi og ADS1115 analog til digital konverter og tegne den ved hjælp af matplotlib. Lad os starte med de nødvendige materialer
ESP-01 bevægelsessensor med dyb søvn: 5 trin
ESP-01 Bevægelsessensor med dyb søvn: Jeg har arbejdet på at lave hjemmelavede bevægelsessensorer, der sender en e-mail-besked, når de udløses. Der er mange eksempler på instruktioner og andre eksempler på at gøre dette. Jeg havde for nylig brug for at gøre dette med en batteridrevet PIR -bevægelsessensor og en ESP
Sparer batterilevetid med dyb søvn: 20 trin
Sparer batterilevetid med dyb søvn: Er du interesseret i at bruge et batteri med din ESP32? I så fald vil jeg i dag diskutere nogle vigtige tekniske oplysninger om dette emne. Vi ved, at denne mikrokontroller bruger meget energi, når den sender information. Det forbruger
Raspberry Pi menneskelig detektor + kamera + kolbe: 6 trin
Raspberry Pi Human Detector + Camera + Flask: I denne vejledning vil jeg gå igennem trinene for mit Raspberry Pi IoT -projekt - Brug af PIR -bevægelsessensor, Raspberry Camera -modul til at opbygge en simpel IoT -sikkerhedsenhed og få adgang til registreringsloggen med Flask
LEGO Delta Robot Scanning og tegning: 7 trin (med billeder)
LEGO Delta Robot Scanning og tegning: Brug af LEGO NXT til at bygge en Delta Robot. Kombineret scanning og tegning