Obsah:
- Krok 1: Meteostanica so snímačmi svetla, teploty a vlhkosti
- Krok 2: MQTT: flexibilné médium na publikovanie a predplatné údajov
- Krok 3: Uložte údaje na server SQL a zobrazte ich na webovom serveri
Video: Meteorologická stanica: ESP8266 s hlbokým spánkom, SQL, grafy podľa banky a vykresľovania: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:56
Bolo by zábavné poznať teplotu, vlhkosť alebo intenzitu svetla na vašom balkóne? Viem, že by som. Vytvoril som teda jednoduchú meteorologickú stanicu na zber týchto údajov. Nasledujúce časti predstavujú kroky, ktoré som vykonal pri jej zostavení.
Začnime!
Krok 1: Meteostanica so snímačmi svetla, teploty a vlhkosti
Keď som plánoval postaviť meteorologickú stanicu, snívalo sa mi o plnohodnotnej meteorologickej stanici, ktorá bude mať rýchlosť vetra, meranie dažďa, širokospektrálny solárny senzor, ale ukázalo sa, že to nebude lacné a náklady na nákup sa môžu skončiť. najmenej 100 dolárov. Vzdal som sa všetkých možností a začal som stavať jeden s viac alebo menej dolármi. 10 dolárov je cena základných komponentov meteorologickej stanice, ako sú uvedené nižšie.
Tu sú diely:
1. Značka ESP8266 Wemos stojí na Aliexpresse 2,39 dolárov. Odporúčam značku Wemos, pretože jej EPS8266 sa ľahšie programuje, aktualizuje a má 4 MB flash alebo viac.
2. Štít Wemos Charger-Boost Shield stojí 1,39 dolára. To je ďalší prínos pre používanie tejto značky. Má posilňovaciu dosku pre lítiovú batériu (nominálne napätie = 3,7 V) na 5 V pre ESP8266. Doska je dodávaná aj s možnosťou nabíjania s maximálnym nabíjacím prúdom = 1M.
*Poznámka: Existuje lacnejšia možnosť nabíjania/zosilnenia lítiovej batérie. Tento stojí 5 ks 1,77 dolára. Keď som však použil túto dosku pre ESP8266 (buď Wemosovu alebo holú ESP8266), režim hlbokého spánku ESP8266 spustil reset hneď po tom, ako sa ESP8266 dostal do slučky spánok-reset-spánok, čo je veľmi nepríjemné. Ak viete, čo sa deje, pošlite mi správu.
3. Wemos má tiež niekoľko štítov na teplotu a vlhkosť, ale chystám sa stavať z jednotlivých komponentov. Fotorezistor (alebo svetlo závislý rezistor-ldr, lacný), snímač svietivosti ako BH1780 alebo TSL2561 (asi 0,87-0,89c ks), teplotný snímač ako DS18B20 (každý 75c) a kombinácia vlhkosti a teploty, ako napr. DHT22 (2,35 dolárov tu) alebo SHT21 (2,20 dolárov tu). Celkové náklady na snímač ~ 4 doláre.
4. Lítiová batéria. Jednu som zachránil zo 7,4 V batérie Canon, čo sú dve 3,7 V batérie v sérii alebo lítiová batéria 18650. Každý 18650 stojí asi 5 dolárov za kus. Mám obrázok, ktorý ukazuje strhnutie batérie fotoaparátu. Buďte však opatrní, skratovanie pri rezaní plastovým krytom môže spôsobiť extrémne teplo a popálenie.
5. Doska plošných spojov, prepojka, drôt, spájkovanie, váš čas, možno nejaké ladiace schopnosti.
Nechajte komponenty drôtu dohromady podľa vyššie uvedenej schémy.
Potom sa pozrite na úlohu v nastavovacej slučke. Je to jednoducho jeden beh úloh a končí príkazom spánku.
void setup () {Serial.begin (115200); Serial.println („Počiatočný uzol s názvom“+ reťazec (SENSORNAME)); setup_wifi (); oneskorenie (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21.begin (); if (! tsl.begin ()) {Serial.print ("TSL2561 not found"); pričom (1); } oneskorenie (100); ldr = analogRead (ldrPin); tsl.enableAutoRange (true); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); oneskorenie (100); sensor_event_t udalosť; tsl.getEvent (& event); if (event.light) lux = event.light; else Serial.println ("Preťaženie senzora");
h = SHT21.getHumidity ();
t = SHT21.getTemperature (); tempSensor.setWaitForConversion (false); tempSensor.begin (); oneskorenie (100); if (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 not found on pin %d / n", ds18b20); Serial.flush (); oneskorenie (1000); } oneskorenie (100); tempSensor.requestTemperatures (); t18 = tempSensor.getTempCByIndex (0); Serial.printf ("\ nSvetlo: %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); oneskorenie (100); client.setServer (mqtt_server, mqtt_port); client.setCallback (spätné volanie); znova pripojiť (); oneskorenie (100); ESP.deepSleep (3e8); // 300 miliónov mikrosekund, 300 sekúnd, 5 minút; }
Počas ladenia alebo nastavovania zadajte príkaz ESP.deepsleep (), aby mal sériové čítanie neustále. Ako vždy je tu uložený úplný kód na nahranie do ESP8266 (GitHub).
Nezabudnite zapojiť prepojku medzi RST a D0/GPIO16, aby sa prebudilo po období hlbokého spánku.
Teraz je čas nahrať kód pomocou Arduino IDE do ESP8266.
Krok 2: MQTT: flexibilné médium na publikovanie a predplatné údajov
Po prvé, stále viac sa mi páči používanie MQTT na odosielanie a prijímanie údajov prostredníctvom rôznych senzorov a klientov v mojom dome. Dôvodom je flexibilita odosielania neobmedzených údajov kategorizovaných podľa témy a neobmedzené množstvo klientov, ktorí sa môžu prihlásiť na jednu tému od makléra MQTT. Za druhé, nie som kvalifikovaný diskutovať o MQTT do hĺbky. S MQTT som sa zoznámil niekedy minulý rok (2017), keď som nasledoval návody na nastavenie meteorologickej stanice a senzorov pomocou Node-RED. V každom prípade sa pokúsim poskytnúť vám niekoľko informácií. Ďalším dobrým začiatkom je Wikipedia.
Ak nemáte čas čítať o teórii a chceli ste založiť makléra MQTT, zverejnil som ďalší návod, ako to urobiť. Pozrite sa na tento príspevok a posuňte sa nadol na krok 4.
Aby som vysvetlil, čo je v mojom ponímaní prenos telemetrie do frontu správ (MQTT), pripravil som diagram ako je uvedené vyššie. Stručne povedané, MQTT je štandard ISO a produkt, ako sú mosquitto a mosquitto-client, dva balíky, ktoré som použil na zostavenie brokera MQTT na Raspberry Pi, musí vyhovovať tejto norme. Sprostredkovateľ MQTT sa potom stane médiom pre vydavateľov, ktorým chce poslať správu, a pre predplatiteľov, aby si vypočuli cieľovú tému.
Kombinácia knižnice Arduino PubSubclient s ArduinoJson vďaka svojmu tvorcovi knolleary a bblanchon uľahčuje drotárom a vývojárom sadu nástrojov od senzorov po cieľové zariadenie alebo koncového klienta.
Poďme ďalej s vytvorením databázy a zobrazením niektorých údajov.
Krok 3: Uložte údaje na server SQL a zobrazte ich na webovom serveri
Na vytvorenie databázy pre webový server som použil sqlite3. Nainštalujte sqlite3 do Rapberry Pi podľa:
sudo apt-get install sqlite3
vytvoril databázu a tabuľku zadaním do terminálu:
meteorologická stanica sqlite3.db
VYTVORIŤ TABUĽKU údaje o počasí (id INT PRIMÁRNY KĽÚČ, čas DATETIME, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);
.exit // opustí príkazový riadok sqlite a vráti sa do terminálu Linux
Na počúvanie témy publikovanej meteorologickou stanicou som použil knižnicu Paho s jazykom Python:
#! /usr/bin/python3# prevzaté z: > # 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.
Odporúča:
Vytvárajte krásne grafy zo živých údajov Arduino (a ukladajte ich do programu Excel): 3 kroky
Vytvárajte krásne obrázky zo živých údajov Arduino (a ukladajte údaje do Excelu): Všetci sa radi hráme s našou funkciou P … lotter v Arduino IDE. Napriek tomu, že to môže byť užitočné pre základné aplikácie, údaje sa vymažú ako ďalšie. body sa sčítajú a nie je to obzvlášť príjemné pre oči. Plotr Arduino IDE
Senzor pohybu ESP-01 s hlbokým spánkom: 5 krokov
Senzor pohybu ESP-01 s hlbokým spánkom: Pracoval som na výrobe domácich pohybových senzorov, ktoré pri spustení odošlú e-mailovú správu. Existuje mnoho príkladov pokynov a ďalších príkladov, ako to urobiť. Nedávno som to potreboval urobiť s batériovým snímačom pohybu PIR a ESP
ESP8266 NodeMCU + LM35 + Blynk (meteorologická stanica IOT/ digitálny snímač teploty): 4 kroky
ESP8266 NodeMCU + LM35 + Blynk (meteorologická stanica IOT/ snímač digitálnej teploty): Ahoj chlapci! V tomto návode sa naučíme prepojiť snímač LM35 s NodeMCU a zobrazovať tieto informácie o teplote cez internet na smartfóne s aplikáciou Blynk. (Aj v tomto projekte budeme používať miniaplikáciu SuperChart v programe Bl
Vytvorte si vlastné grafy pre moje údaje IOT na Raspberry PI: 3 kroky
Vytvorte si vlastné grafy pre moje údaje IOT na Raspberry PI: Prečítajte si, ak chcete mať možnosť vytvárať vlastné grafy IOT pomocou 7 riadkov kódu. Chcel som vytvoriť grafy na zobrazenie údajov v grafickom formáte z mojich senzorov IOT na webovej stránke. Predtým som na to používal služby tretích strán (niektoré pa
Úspora batérie s hlbokým spánkom: 20 krokov
Úspora batérie s hlbokým spánkom: Máte záujem používať batériu vo svojom ESP32? Ak je to tak, dnes budem diskutovať o niektorých dôležitých technických informáciách týkajúcich sa tejto témy. Vieme, že tento mikrokontrolér vynakladá veľa energie na prenos informácií. Konzumuje