Kazalo:
- Korak: Vremenska postaja s senzorji svetlobe, temperature in vlažnosti
- 2. korak: MQTT: prilagodljiv medij za objavo in naročanje podatkov
- 3. korak: Shranite podatke v SQL in jih prikažite na spletnem strežniku
Video: Vremenska postaja: ESP8266 z globokim spanjem, SQL, grafikoniranje po steklenici in ploskvi: 3 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:03
Bi bilo zabavno vedeti temperaturo, vlažnost ali jakost svetlobe na vašem balkonu? Vem, da bi. Zato sem naredil preprosto vremensko postajo za zbiranje takih podatkov. Naslednji razdelki so koraki, ki sem jih naredil za izdelavo.
Začnimo!
Korak: Vremenska postaja s senzorji svetlobe, temperature in vlažnosti
Ko sem nameraval zgraditi vremensko postajo, sem sanjal o popolni vremenski postaji s hitrostjo vetra, merjenjem dežja, sončnim senzorjem celotnega spektra, vendar se je izkazalo, da to ne bo poceni in stroški nakupa bi se lahko končali vsaj 100 USD. Odpovedal sem se vsem možnostim in začel graditi enega z 10 ali več dolarji. 10 USD so stroški osnovnih sestavnih delov vremenske postaje, kot so navedeni spodaj.
Tu so deli:
1. Blagovna znamka ESP8266 Wemos stane 2,39 USD na kos na Aliexpressu. Priporočam blagovno znamko Wemos, ker je njen EPS8266 lažje programirati, posodabljati in imeti bliskavico 4 MB ali več.
2. Wemos Charger-Boost Shield stane 1,39 USD. To je še ena prednost uporabe te blagovne znamke. Ima ojačevalno ploščo za litijevo baterijo (nazivna napetost = 3,7 V) na 5 V za ESP8266. Plošča ima tudi možnost polnjenja z največjim polnilnim tokom = 1M.
*Opomba: Obstaja cenejša možnost za polnjenje/povečanje litijeve baterije. Ta stane 1,77 USD za 5 kosov. Ko pa sem to ploščo uporabil za ESP8266 (Wemos-ov ali goli ESP8266), je način globokega spanja ESP8266 sprožil ponastavitev takoj po tem, ko je bil ESP8266 v zanki sleep-reset-sleep, kar je zelo nadležno. Če veste, kaj se dogaja, mi pišite v inbox.
3. Wemos ima tudi več ščitnikov za temperaturo in vlago, vendar bom gradil iz posameznih komponent. Foto upor (ali svetlobno odvisen upor-ldr, poceni), senzor svetilnosti, kot sta BH1780 ali TSL2561 (približno 0,87-0,89 c kosov), temperaturni senzor, kot je DS18B20 (vsak po 75 c), ter kombinacija vlažnosti in temperature, npr. DHT22 (2,35 USD tukaj) ali SHT21 (2,20 USD tukaj). Skupni stroški senzorja ~ 4 USD.
4. Litijeva baterija. Enega sem rešil iz 7,4 -voltne Canonove baterije, to sta dve 3,7 -voltni bateriji v seriji ali 18650 litijevih baterij. Vsak 18650 stane približno 5 USD na kos. Imam sliko, na kateri je prikazano rušenje baterije fotoaparata. Bodite previdni: kratek stik pri rezanju plastičnega pokrova lahko povzroči izjemno toploto in opekline.
5. PCB plošča, skakalec, žica, spajkanje, vaš čas, morda nekaj veščin za odpravljanje napak.
Naj žične komponente skupaj sledijo zgornji shemi.
Nato poiščite nalogo v nastavitveni zanki. To je preprosto en tek opravil in se konča z ukazom za spanje.
void setup () {Serial.begin (115200); Serial.println ("Začetno vozlišče z imenom" + niz (SENSORNAME)); setup_wifi (); zamuda (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21.begin (); if (! tsl.begin ()) {Serial.print ("TSL2561 ni mogoče najti"); medtem ko (1); } zamuda (100); ldr = analogRead (ldrPin); tsl.enableAutoRange (true); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); zamuda (100); sensors_event_t dogodek; tsl.getEvent (& event); if (event.light) lux = event.light; else Serial.println ("Preobremenitev senzorja");
h = SHT21.getHumidity ();
t = SHT21.getTemperature (); tempSensor.setWaitForConversion (false); tempSensor.begin (); zamuda (100); if (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 ni na pinu %d / n", ds18b20); Serial.flush (); zamuda (1000); } zamuda (100); tempSensor.requestTemperatures (); t18 = tempSensor.getTempCByIndex (0); Serial.printf ("\ nLuč: %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); zamuda (100); client.setServer (mqtt_server, mqtt_port); client.setCallback (povratni klic); ponovno poveži (); zamuda (100); ESP.deepSleep (3e8); // 300 milijonov mikro sekund, 300 sekund, 5 minut; }
Med odpravljanjem napak ali nastavitvami ukažite na ESP.deepsleep () za neprekinjeno odčitavanje zaporedja. Kot vedno, celotna koda za nalaganje v ESP8266 gostuje tukaj (GitHub).
Ne pozabite namestiti mostička med RST in D0/GPIO16, da sprožite prebujanje po obdobju globokega spanca.
Zdaj je čas, da kodo naložite z uporabo Arduino IDE v ESP8266.
2. korak: MQTT: prilagodljiv medij za objavo in naročanje podatkov
Prvič, vse bolj rad uporabljam MQTT za pošiljanje in sprejemanje podatkov prek različnih senzorjev in odjemalcev v mojem domu. To je zato, ker omogoča fleksibilnost pošiljanja neomejenih podatkov, razvrščenih po temi, in neomejeno število strank, da se na eno temo naročijo pri posredniku MQTT. Drugič, nisem usposobljen za poglobljeno razpravo o MQTT. MQTT sem včasih spoznal lani (2017), ko sem sledil vadnicam za nastavitev vremenske postaje in senzorjev z uporabo Node-RED. Vsekakor se bom potrudil, da vam predstavim nekaj informacij. Še en dober začetek je Wikipedia.
Če nimate časa za branje o teoriji in ste želeli ustanoviti posrednika MQTT, sem za to objavil drugo vadnico. Poiščite to objavo in se pomaknite navzdol do 4. koraka.
Za razlago, kaj je telemetrični transport čakalnih vrst sporočil (MQTT) po mojem razumevanju, sem pripravil zgornji diagram. Na kratko, MQTT je standard ISO in izdelek, kot so komarji in odjemalci proti komarjem, morata biti v skladu s tem standardom dva paketa, ki sem jih uporabil za izdelavo posrednika MQTT na Raspberry Pi. Posrednik MQTT nato postane medij, v katerem lahko založniki pošljejo sporočilo, naročniki pa poslušajo ciljno temo.
Kombinacija knjižnice Arduino PubSubclient z ArduinoJsonom, zahvaljujoč svojemu ustvarjalcu knolleary in bblanchon, olajša oblikovalcem in razvijalcem nabor orodij od senzorjev do ciljne opreme ali končnega odjemalca.
Nadaljujmo z ustvarjanjem zbirke podatkov in prikažemo nekaj podatkov.
3. korak: Shranite podatke v SQL in jih prikažite na spletnem strežniku
Za ustvarjanje baze podatkov za spletni strežnik sem uporabil sqlite3. Namestite sqlite3 v Rapberry Pi tako:
sudo apt-get install sqlite3
ustvaril bazo podatkov in tabelo tako, da v terminal vnese:
sqlite3 weatherstation.db
USTVARI TABELO vremenskih podatkov (ID INT PRIMARNI KLJUČ, čas DATETIME, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);
.exit // za izhod iz ukazne vrstice sqlite in vrnitev na terminal Linux
Za poslušanje teme, ki jo je objavila vremenska postaja, sem uporabil knjižnico Paho s Pythonom:
#! /usr/bin/python3# sprejeto iz: > # 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.
Priporočena:
Vremenska postaja NaTaLia: Vremenska postaja Arduino s sončno energijo Na pravi poti: 8 korakov (s slikami)
Vremenska postaja NaTaLia: Vremenska postaja na sončni pogon Arduino je ravnala pravilno: Po enem letu uspešnega delovanja na dveh različnih lokacijah delim svoje načrte projektov vremenskih postaj na sončno energijo in razložim, kako se je razvila v sistem, ki lahko resnično preživi dolgo časa obdobja iz sončne energije. Če sledite
Senzor gibanja ESP-01 z globokim spanjem: 5 korakov
Senzor gibanja ESP-01 z globokim spanjem: Delal sem na izdelavi domačih senzorjev gibanja, ki ob sprožitvi pošiljajo e-poštno sporočilo. Obstaja veliko primerov navodil in drugih primerov tega. Pred kratkim sem to moral storiti z baterijskim senzorjem gibanja PIR in ESP
Vremenska postaja in senzorska postaja DIY: 7 korakov (s slikami)
Vremenska postaja in senzorska postaja DIY: V tem projektu vam bom pokazal, kako skupaj s senzorsko postajo WiFi ustvariti vremensko postajo. Senzorska postaja meri lokalne podatke o temperaturi in vlažnosti ter jih prek WiFi pošlje vremenski postaji. Vremenska postaja nato prikaže t
ESP8266 NodeMCU + LM35 + Blynk (vremenska postaja IOT/ digitalni senzor temperature): 4 koraki
ESP8266 NodeMCU + LM35 + Blynk (vremenska postaja IOT/ digitalni senzor temperature): Pozdravljeni, fantje! V tem navodilu se bomo naučili, kako povezovati senzor LM35 z NodeMCU in prikazati te podatke o temperaturi prek interneta na pametnem telefonu z aplikacijo Blynk. (Tudi v tem projektu bomo uporabljali pripomoček SuperChart v Bl
ESP8266 - 12 Vremenska postaja: 4 koraki (s slikami)
ESP8266 - 12 Vremenska postaja: Ta projekt govori o izgradnji in preskušanju vremenske postaje na osnovi ESP8266 - 12. Koncept temelji na nizki porabi energije s polnjenjem baterije s sončno celico. Ta navodila temeljijo na mojih prejšnjih 2 projektih polnilnega sistema in esp loggerju. BOM:P