ዝርዝር ሁኔታ:

የአየር ሁኔታ ጣቢያ - ESP8266 በጥልቅ እንቅልፍ ፣ ኤስ.ሲ.ኤል. ፣ በፍላስክ እና በችሎታ: 3 ደረጃዎች
የአየር ሁኔታ ጣቢያ - ESP8266 በጥልቅ እንቅልፍ ፣ ኤስ.ሲ.ኤል. ፣ በፍላስክ እና በችሎታ: 3 ደረጃዎች

ቪዲዮ: የአየር ሁኔታ ጣቢያ - ESP8266 በጥልቅ እንቅልፍ ፣ ኤስ.ሲ.ኤል. ፣ በፍላስክ እና በችሎታ: 3 ደረጃዎች

ቪዲዮ: የአየር ሁኔታ ጣቢያ - ESP8266 በጥልቅ እንቅልፍ ፣ ኤስ.ሲ.ኤል. ፣ በፍላስክ እና በችሎታ: 3 ደረጃዎች
ቪዲዮ: Arduino Nano, BME280 and SSD1306 OLED Weather Station 2024, ሀምሌ
Anonim
የአየር ሁኔታ ጣቢያ - ESP8266 በጥልቅ እንቅልፍ ፣ ኤስ.ሲ.ኤል ፣ በፍላስክ እና በፕሎግራፊ
የአየር ሁኔታ ጣቢያ - ESP8266 በጥልቅ እንቅልፍ ፣ ኤስ.ሲ.ኤል ፣ በፍላስክ እና በፕሎግራፊ

በረንዳዎ ላይ ያለውን የሙቀት መጠን ፣ የእርጥበት መጠን ወይም የብርሃን መጠኑን ማወቅ ያስደስታል? እንደምሆን አውቃለሁ። ስለዚህ እንዲህ ዓይነቱን መረጃ ለመሰብሰብ ቀለል ያለ የአየር ሁኔታ ጣቢያ ሠራሁ። የሚከተሉት ክፍሎች አንድ ለመገንባት የወሰድኳቸው እርምጃዎች ናቸው።

እንጀምር!

ደረጃ 1 የአየር ሁኔታ ጣቢያ በብርሃን ፣ በሙቀት እና በእርጥበት ዳሳሾች

የአየር ሁኔታ ጣቢያ በብርሃን ፣ በሙቀት እና በእርጥበት ዳሳሾች
የአየር ሁኔታ ጣቢያ በብርሃን ፣ በሙቀት እና በእርጥበት ዳሳሾች
የአየር ሁኔታ ጣቢያ በብርሃን ፣ በሙቀት እና በእርጥበት ዳሳሾች
የአየር ሁኔታ ጣቢያ በብርሃን ፣ በሙቀት እና በእርጥበት ዳሳሾች
የአየር ሁኔታ ጣቢያ በብርሃን ፣ በሙቀት እና በእርጥበት ዳሳሾች
የአየር ሁኔታ ጣቢያ በብርሃን ፣ በሙቀት እና በእርጥበት ዳሳሾች
የአየር ሁኔታ ጣቢያ በብርሃን ፣ በሙቀት እና በእርጥበት ዳሳሾች
የአየር ሁኔታ ጣቢያ በብርሃን ፣ በሙቀት እና በእርጥበት ዳሳሾች

የአየር ሁኔታ ጣቢያን ለመገንባት ባሰብኩ ጊዜ የነፋስ ፍጥነት ፣ የዝናብ መጠን ፣ የሙሉ የፀሐይ ብርሃን ዳሳሽ ያለው ግን የተሟላ የአየር ሁኔታ ጣቢያ እንዲኖረኝ እያሰብኩ ነበር ፣ ያ ርካሽ አይሆንም ፣ እና የግዢው ወጪ ሊያበቃ ይችላል ቢያንስ 100 ዶላር። ሙሉ አማራጮቹን ትቼ በ 10 ወይም ከዚያ በላይ በሆነ አንድ መገንባት ጀመርኩ። ከዚህ በታች ያሉት ክፍሎች የአየር ንብረት ጣቢያው መሠረታዊ ክፍሎች ዋጋ 10 ዶላር ነው።

ክፍሎች እዚህ አሉ

1. ESP8266 የዌሞስ ብራንድ በአሊክስፕስ ላይ 2.39 pcs ዶላር ያስከፍላል። የእሱ EPS8266 ለፕሮግራም ፣ ለማዘመን እና 4 ሜባ ብልጭታ ወይም ከዚያ በላይ ስላለው የዌሞስን ብራንድ እመክራለሁ።

2. ዌሞስ ቻርጀር-ቦስት ጋሻ 1.39 ዶላር ያወጣል። ይህንን የምርት ስም ለመጠቀም ይህ ሌላ ጥቅም ነው። ለሊቲየም ባትሪ (ስመ ቮልቴጅ = 3.7V) እስከ 5V ለ ESP8266 የማሳደጊያ ሰሌዳ አለው። ቦርዱ ከከፍተኛው የኃይል መሙያ የአሁኑ = 1 ሜ ጋር የመሙላት አማራጭ አለው።

*ማስታወሻ ለሊቲየም ባትሪ መሙላት/ከፍ ለማድረግ ርካሽ አማራጭ አለ። ይህ ለ 5pcs 1.77 ዶላር ያስከፍላል። ሆኖም ፣ ይህንን ሰሌዳ ለ ESP8266 (ወይ ዌሞስ ወይም ባዶ ESP8266) ስጠቀም ፣ የ ESP8266 ጥልቅ እንቅልፍ ሁኔታ ESP8266 ን በእንቅልፍ-ዳግም ማስጀመር-እንቅልፍ ዙር ውስጥ ካደረገ በኋላ ወዲያውኑ ዳግም ማስጀመርን አስነስቷል ፣ ይህም በጣም የሚያበሳጭ ነው። ምን እንደ ሆነ ካወቁ እባክዎን በ inbox ይላኩልኝ።

3. ዌሞስ እንዲሁ ለአየር ሙቀት እና እርጥበት በርካታ ጋሻዎች አሉት ግን እኔ ከግለሰብ አካላት እገነባለሁ። Photoresistor (ወይም በብርሃን ላይ የተመሠረተ ተከላካይ-ldr ፣ ርካሽ) ፣ እንደ BH1780 ወይም TSL2561 (ስለ 0.87-0.89c pcs) የመብራት ዳሳሽ ፣ እንደ የሙቀት ዳሳሽ እንደ DS18B20 (እያንዳንዳቸው 75 ሐ) ፣ እና እንደ እርጥበት እና የሙቀት ጥምር DHT22 ($ 2.35 እዚህ) ወይም SHT21 (እዚህ $ 2.20)። ለአነፍናፊው አጠቃላይ ወጪ ~ $ 4።

4. ሊቲየም ባትሪ። አንዱን ከ 7.4 ቪ ካኖን ባትሪ ከተከታታይ ሁለት ወይም 3.6 ቪ ባትሪ ወይም 18650 ሊቲየም ባትሪ ነው። እያንዳንዱ 18650 እያንዳንዳቸው 5 ዶላር ገደማ ያስወጣሉ። የካሜራውን የባትሪ እሽግ መበታተን የሚያሳይ ስዕል አለኝ። ይጠንቀቁ ፣ በፕላስቲክ ሽፋን በኩል በሚቆርጡበት ጊዜ አጭር ማዞሪያ ከፍተኛ ሙቀትን ሊያስከትል እና ሊቃጠል ይችላል።

5. የፒ.ሲ.ቢ. ቦርድ ፣ ዝላይ ፣ ሽቦ ፣ ብየዳ ፣ ጊዜዎ ፣ ምናልባት አንዳንድ የማረም ችሎታዎች።

የሽቦ አካላት አንድ ላይ ሆነው ከላይ ያለውን መርሃግብር ይከተሉ።

ከዚያ በማዋቀሪያ ዑደት ውስጥ ያለውን ተግባር ይፈልጉ። እሱ በቀላሉ የአንድ ሥራ ተግባራት ነው እና በእንቅልፍ ትእዛዝ ያበቃል።

ባዶነት ማዋቀር () {Serial.begin (115200); Serial.println ("የተሰየመ መስቀለኛ መንገድ" + String (SENSORNAME)); setup_wifi (); መዘግየት (100); Wire.begin (); pinMode (ldrPin ፣ ማስገቢያ); SHT21.begin (); ከሆነ (! tsl.begin ()) {Serial.print ("TSL2561 አልተገኘም"); ሳለ (1); } መዘግየት (100); ldr = analogRead (ldrPin); tsl.enableAutoRange (እውነት); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); መዘግየት (100); ዳሳሾች_ኢቨንት_ቲ ክስተት; tsl.getEvent (& ክስተት); ከሆነ (event.light) lux = event.light; ሌላ Serial.println (“ዳሳሽ ከመጠን በላይ ጭነት”);

ሸ = SHT21.getHumidity ();

t = SHT21.getTemperature (); tempSensor.setWaitForConversion (ሐሰት); tempSensor.begin (); መዘግየት (100); ከሆነ (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 በፒን %d / n" ላይ አልተገኘም ፣ ds18b20); Serial.flush (); መዘግየት (1000); } መዘግየት (100); tempSensor.requestTemperatures (); t18 = tempSensor.getTempCByIndex (0); Serial.printf ("\ n ብርሃን ፦ %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); መዘግየት (100); client.setServer (mqtt_server, mqtt_port); client.setCallback (መልሶ መደወያ); ዳግም ማገናኘት (); መዘግየት (100); ESP.deepSleep (3e8); // 300 ሚሊዮን ማይክሮ ሰከንዶች ፣ 300 ሰከንዶች ፣ 5 ደቂቃዎች; }

በማረም ወይም በማዋቀር ጊዜ ተከታታይ ንባብ እንዲኖርዎት ESP.deepsleep () ን ያዝዙ። እንደተለመደው ፣ ወደ ESP8266 ለመስቀል ሙሉ ኮድ እዚህ (GitHub) ተስተናግዷል።

ጥልቅ እንቅልፍ ከተወሰደ በኋላ መነቃቃትን ለማስነሳት በ RST እና D0/GPIO16 መካከል ያለውን መዝለያ መልበስዎን ያስታውሱ።

አሁን አርዱዲኖ አይዲኢን በመጠቀም ወደ ESP8266 ኮዱን ለመስቀል ጊዜው አሁን ነው።

ደረጃ 2: MQTT - መረጃን ለማተም እና ለመመዝገብ ተጣጣፊ መካከለኛ

MQTT - መረጃን ለማተም እና ለመመዝገብ ተጣጣፊ መካከለኛ
MQTT - መረጃን ለማተም እና ለመመዝገብ ተጣጣፊ መካከለኛ
MQTT - መረጃን ለማተም እና ለመመዝገብ ተጣጣፊ መካከለኛ
MQTT - መረጃን ለማተም እና ለመመዝገብ ተጣጣፊ መካከለኛ

በመጀመሪያ ፣ እኔ በቤቴ ውስጥ በተለያዩ ዳሳሾች እና ደንበኞች ላይ መረጃን ለመላክ እና ለመቀበል MQTT ን በመጠቀም እወዳለሁ። ይህ የሆነበት ምክንያት ያልተገደበ መረጃን በአንድ ርዕሰ ጉዳይ የተከፋፈለ እና ያልተገደበ ደንበኞች ከአንድ ርዕሰ ጉዳይ ከ MQTT ደላላ ለመመዝገብ ነው። ሁለተኛ ፣ ስለ MQTT በጥልቀት ለመወያየት ብቁ አይደለሁም። ኖድ- RED ን በመጠቀም የአየር ሁኔታ ጣቢያ እና ዳሳሾችን ለማቋቋም ትምህርቶችን በሚከተሉበት ጊዜ ባለፈው ዓመት (2017) አንዳንድ ጊዜ MQTT ን አውቃለሁ። ለማንኛውም እኔ የተወሰነ መረጃ ለእርስዎ ለማቅረብ የተቻለኝን ሁሉ እሞክራለሁ። ለመጀመር ሌላ ጥሩ ቦታ ዊኪፔዲያ ነው።

ስለ ጽንሰ -ሀሳቡ ለማንበብ ጊዜ ከሌለዎት እና የ MQTT ደላላ ለማቋቋም ከፈለጉ ፣ ይህንን ለማድረግ ሌላ አጋዥ ስልጠና ለጥፌያለሁ። ይህንን ልጥፍ ይመልከቱ እና ወደ ደረጃ 4 ወደ ታች ይሸብልሉ።

በእኔ ግንዛቤ ውስጥ የመልዕክት ተጓዥ የቴሌሜትሪ ትራንስፖርት (MQTT) ምን እንደሆነ ለማብራራት ፣ ከላይ እንደተገለፀው ንድፍ አዘጋጀሁ። በአጭሩ ፣ MQTT የ ISO ደረጃ ነው ፣ እና እንደ ትንኝ እና ትንኝ-ደንበኛ ምርት ፣ እኔ የተጠቀምኩባቸው ሁለት ጥቅሎች የ MQTT ደላላን በ Raspberry Pi ላይ ይገነባሉ ፣ ያንን መስፈርት ማክበር አለባቸው። የ MQTT ደላላ ከዚያም አንድ መልእክት ወደ ውስጥ እንዲገቡ እና ተመዝጋቢዎች አንድ ዒላማ ርዕስ ለማዳመጥ መካከለኛ ይሆናሉ።

የ Arduino PubSubclient ቤተ -መጽሐፍት ከአርዱዲኖ ጆንሰን ጋር ፣ ለፈጣሪው ኪኖሌሪ እና ቢብላንቾን ምስጋና ይግባው ፣ ለአስተናጋጆች እና ለገንቢዎች ከመሳሪያዎች ስብስብ እስከ ዒላማ መሣሪያ ወይም የመጨረሻ ደንበኛ ድረስ ያመቻቻል።

የውሂብ ጎታ በመፍጠር ይቀጥሉ እና የተወሰነ ውሂብ ያሳዩ።

ደረጃ 3 - መረጃን ወደ SQL ያስቀምጡ እና በድር አገልጋይ ላይ ያሳዩዋቸው

መረጃን ወደ SQL ያስቀምጡ እና በድር አገልጋይ ላይ ያሳዩዋቸው
መረጃን ወደ SQL ያስቀምጡ እና በድር አገልጋይ ላይ ያሳዩዋቸው
መረጃን ወደ SQL ያስቀምጡ እና በድር አገልጋይ ላይ ያሳዩዋቸው
መረጃን ወደ SQL ያስቀምጡ እና በድር አገልጋይ ላይ ያሳዩዋቸው

ለድር አገልጋዩ የውሂብ ጎታ ለመፍጠር sqlite3 ን እጠቀም ነበር። በ Rapberry Pi ውስጥ sqlite3 ን ይጫኑ በ:

sudo apt-get install sqlite3 ን ይጫኑ

ወደ ተርሚናል በመተየብ የውሂብ ጎታ እና ጠረጴዛን ፈጠረ-

sqlite3 weatherstation.db

ሠንጠረዥ የአየር ሁኔታ መረጃ (id INT PRIMARY ቁልፍ ፣ የጊዜ ቀነ -ገደብ ፣ ldr INT ፣ tls2561 INT ፣ ds18b20 REAL ፣ tsht21 REAL ፣ hsht21 REAL) ፤

.exit // ከ sqlite የትእዛዝ መስመር ለመውጣት እና ወደ ሊኑክስ ተርሚናል ለመመለስ

በአየር ሁኔታ ጣቢያ የታተመውን ርዕስ ለማዳመጥ የፓሆ ቤተ -መጽሐፍት ከፓይዘን ጋር ተጠቀምኩኝ-

#! /usr/bin/python3# ከ ጉዲፈቻ ፦ > # 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.

የሚመከር: