Orodha ya maudhui:

Kituo cha Hali ya Hewa: ESP8266 Na Usingizi Mzito, SQL, Kupiga picha kwa Flask & Plotly: Hatua 3
Kituo cha Hali ya Hewa: ESP8266 Na Usingizi Mzito, SQL, Kupiga picha kwa Flask & Plotly: Hatua 3

Video: Kituo cha Hali ya Hewa: ESP8266 Na Usingizi Mzito, SQL, Kupiga picha kwa Flask & Plotly: Hatua 3

Video: Kituo cha Hali ya Hewa: ESP8266 Na Usingizi Mzito, SQL, Kupiga picha kwa Flask & Plotly: Hatua 3
Video: Je, unatamani kuwa mtaalam wa hali ya hewa? Jiunge sasa na Chuo cha Taifa cha Hali ya Hewa Kigoma. 2024, Julai
Anonim
Kituo cha Hali ya Hewa: ESP8266 Na Usingizi Mzito, SQL, Uchoraji na Flask & Plotly
Kituo cha Hali ya Hewa: ESP8266 Na Usingizi Mzito, SQL, Uchoraji na Flask & Plotly

Je! Hiyo itakuwa ya kufurahisha kujua hali ya joto, unyevu, au kiwango cha mwanga kwenye balcony yako? Najua ningependa. Kwa hivyo nilifanya kituo rahisi cha hali ya hewa kukusanya data kama hizo. Sehemu zifuatazo ni hatua nilizochukua kujenga moja.

Tuanze!

Hatua ya 1: Kituo cha hali ya hewa na sensorer za Nuru, Joto na Unyevu

Kituo cha hali ya hewa na sensorer za Nuru, Joto na Unyevu
Kituo cha hali ya hewa na sensorer za Nuru, Joto na Unyevu
Kituo cha hali ya hewa na sensorer za Nuru, Joto na Unyevu
Kituo cha hali ya hewa na sensorer za Nuru, Joto na Unyevu
Kituo cha hali ya hewa na sensorer za Nuru, Joto na Unyevu
Kituo cha hali ya hewa na sensorer za Nuru, Joto na Unyevu
Kituo cha hali ya hewa na sensorer za Nuru, Joto na Unyevu
Kituo cha hali ya hewa na sensorer za Nuru, Joto na Unyevu

Wakati nilipanga kujenga kituo cha hali ya hewa, nilikuwa naota kuwa na kituo kamili cha hali ya hewa ambacho kina kasi ya upepo, kipimo cha mvua, sensa ya jua kamili, lakini ikawa, hiyo haitakuwa rahisi, na gharama ya ununuzi inaweza kumalizika hadi angalau $ 100. Niliacha chaguzi kamili na kuanza kujenga moja kwa $ 10, zaidi au chini. $ 10 ni gharama ya vifaa vya msingi vya kituo cha hali ya hewa kama sehemu zilizo chini.

Hapa kuna sehemu:

1. Chapa ya Wemos ya ESP8266 hugharimu pcs $ 2.39 kwenye Aliexpress. Napenda kupendekeza chapa ya Wemos kwa sababu EPS8266 yake ni rahisi kupanga, kusasisha, na kuwa na 4MB flash au zaidi.

2. Wemos Chaja-Boost Shield inagharimu $ 1.39 pcs. Hii ni faida nyingine ya kutumia chapa hii. Ina bodi ya kuongeza kwa betri ya Lithium (voltage ya jina = 3.7V) hadi 5V ya ESP8266. Bodi pia inakuja na chaguo la kuchaji na sasa ya kuchaji max = 1M.

* Kumbuka: Kuna chaguo rahisi kwa Lithium kuchaji / kuongeza betri. Hii inagharimu $ 1.77 kwa 5pcs. Walakini, wakati nilitumia bodi hii kwa ESP8266 (iwe ya Wemos au ESP8266 wazi), hali ya usingizi mzito wa ESP8266 ilisababisha kuweka upya baada ya kuifanya ESP8266 katika kitanzi cha kulala-kulala-usingizi, ambayo inakera sana. Ikiwa unajua kinachotokea, tafadhali inbox me.

3. Wemos pia wana ngao kadhaa za joto na unyevu lakini nitajenga kutoka kwa vifaa vya kibinafsi. Photoresistor (au kontena inayotegemea mwanga - ldr, bei rahisi), sensa ya mwangaza kama BH1780 au TSL2561 (karibu 0.87-0.89c pcs), sensa ya joto kama DS18B20 (75c kila moja), na unyevu na joto kama vile DHT22 ($ 2.35 hapa) au SHT21 ($ 2.20 hapa). Gharama ya jumla ya sensor ~ $ 4.

4. Betri ya lithiamu. Niliokoa moja kutoka kwa Battery ya Canon ya 7.4V ambayo ni betri mbili 3.7V mfululizo au 18650 Lithium battery. Kila 18650 hugharimu karibu $ 5 moja. Nina picha inayoonyesha kubomoa kifurushi cha betri ya kamera. Kuwa mwangalifu ingawa, mzunguko mfupi wakati wa kukata kifuniko cha plastiki kunaweza kutoa joto kali, na kuwaka.

5. Bodi ya PCB, jumper, waya, soldering, wakati wako, labda ujuzi wa utatuzi.

Acha vifaa vya waya pamoja ifuate skimu juu.

Kisha, angalia kazi hiyo kwenye kitanzi cha usanidi. Ni kazi moja tu na inaisha kwa amri ya kulala.

kuanzisha batili () {Serial.begin (115200); Serial.println ("Kuanzia Nodi inayoitwa" + String (SENSORNAME)); kuanzisha_wifi (); kuchelewesha (100); Wire.begin (); pinMode (ldrPin, INPUT); Anza (); ikiwa (! tsl.anza ()) {Serial.print ("TSL2561 haipatikani"); wakati (1); } kuchelewa (100); ldr = AnalogSoma (ldrPin); tsl. AableAutoRange (kweli); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); kuchelewesha (100); sensorer_tukio_tukio; kupataTukio (& tukio); ikiwa (event.light) lux = event.light; mwingine Serial.println ("Sensor overload");

h = SHT21.get Humidity ();

t = SHT21.pata Joto (); tempSensor.setWaitForConversion (uwongo); kuanza (); kuchelewesha (100); ikiwa (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 haipatikani kwenye pini% d / n", ds18b20); Serial.flush (); kuchelewesha (1000); } kuchelewa (100); ombi la tempSensor.maombi ya Joto (); t18 = tempSensor.getTempCByIndex (0); Serial.printf ("\ nUtaa:% 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); kuchelewesha (100); mteja.setServer (mqtt_server, mqtt_port); mteja.setCallback (kupiga simu tena); unganisha tena (); kuchelewesha (100); Kulala kwa ESP (3e8); // sekunde ndogo milioni 300, sekunde 300, dakika 5; }

Wakati wa utatuaji au usanidi, amuru ESP.deeps sleep () kuwa na kusoma kwa Serial kila wakati. Kama kawaida, nambari kamili ya kupakia kwenye ESP8266 inakaribishwa hapa (GitHub).

Kumbuka kuweka jumper kati ya RST na D0 / GPIO16 kwa kuchochea kuamka baada ya kipindi cha usingizi mzito.

Sasa, wakati wa kupakia nambari ukitumia Arduino IDE kwenye ESP8266.

Hatua ya 2: MQTT: Medium Flexible Kuchapisha na Kujiunga na Takwimu

MQTT: Medium Flexible Kuchapisha na Kujiunga na Takwimu
MQTT: Medium Flexible Kuchapisha na Kujiunga na Takwimu
MQTT: Medium Flexible Kuchapisha na Kujiunga na Takwimu
MQTT: Medium Flexible Kuchapisha na Kujiunga na Takwimu

Kwanza, napenda kutumia MQTT kutuma na kupokea data kwa sensorer tofauti na wateja nyumbani kwangu. Hiyo ni kwa sababu kubadilika kwa kutuma data isiyo na kikomo iliyoainishwa na mada, na wateja wasio na kikomo kujiunga na mada moja kutoka kwa broker wa MQTT. Pili, sina sifa ya kujadili MQTT kwa kina. Nilijua MQTT wakati mwingine mwaka jana (2017) wakati wa kufuata mafunzo ya kuanzisha kituo cha hali ya hewa na sensorer kutumia Node-RED. Kwa vyovyote vile, nitajaribu kadiri niwezavyo kuwasilisha kwako maelezo. Sehemu nyingine nzuri ya kuanza ni Wikipedia.

Ikiwa huna wakati wa kusoma juu ya nadharia, na nilitaka kuanzisha broker ya MQTT, nilichapisha mafunzo mengine ili kufanya hivyo. Tafuta chapisho hili, na utembeze chini hadi Hatua ya 4.

Ili kuelezea ni nini Usafirishaji wa Telemetry Telegraph (MQTT) katika uelewa wangu, niliandaa mchoro kama hapo juu. Kwa kifupi, MQTT ni kiwango cha ISO, na bidhaa kama mbu na mteja wa mbu, vifurushi viwili nilivyotumia kujenga broker ya MQTT kwenye Raspberry Pi, inapaswa kuzingatia kiwango hicho. Dalali wa MQTT basi anakuwa njia ya wachapishaji kushinikiza ujumbe ndani na wanachama ili kusikiliza mada lengwa.

Mchanganyiko wa maktaba ya Arduino PubSubclient na ArduinoJson, shukrani kwa muundaji wake knolleary na bblanchon, inafanya iwe rahisi kwa watengenezaji na watengenezaji kwa seti ya zana kutoka kwa sensorer hadi vifaa vya kulenga au mteja wa mwisho.

Wacha tuendelee na kuunda Hifadhidata na kuonyesha data zingine.

Hatua ya 3: Hifadhi Data kwa SQL na Uionyeshe kwenye Seva ya Wavuti

Hifadhi Data kwa SQL na Uionyeshe kwenye Seva ya Wavuti
Hifadhi Data kwa SQL na Uionyeshe kwenye Seva ya Wavuti
Hifadhi Data kwa SQL na Uionyeshe kwenye Seva ya Wavuti
Hifadhi Data kwa SQL na Uionyeshe kwenye Seva ya Wavuti

Nilitumia sqlite3 kuunda hifadhidata ya seva ya wavuti. Sakinisha sqlite3 katika Rapberry Pi na:

Sudo apt-get kufunga sqlite3

imeunda hifadhidata na meza kwa kuandika kwenye terminal:

hali ya hewa ya sqlite3.db

Tengeneza meza ya hali ya hewa (id INT KEY YA MUHIMU, wakati wa wakati, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);

.toka // kutoka kwa mstari wa amri ya sqlite na kurudi kwenye terminal ya Linux

Kusikiliza mada iliyochapishwa na kituo cha hali ya hewa, nilitumia maktaba ya Paho na Python:

#! / usr / bin / python3 # iliyopitishwa kutoka: > # 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.

Ilipendekeza: