Բովանդակություն:
- Պարագաներ
- Քայլ 1: Վերբեռնեք Arduino ծածկագիրը ESP32-CAM- ում
- Քայլ 2: Լարվիր:
- Քայլ 3: Python3 Script
- Քայլ 4: MySQL Server
- Քայլ 5: Վեբ սերվեր
- Քայլ 6: 3D տպագիր բնակարան
- Քայլ 7: Վերջնական արդյունքը:
Video: ESP32-DHT22-MQTT-MySQL-PHP- ի միջոցով ջերմաստիճան և խոնավություն. 7 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:46
Իմ ընկերուհին ցանկանում էր ջերմոց օգտագործել, ուստի ես նրան պատրաստեցի: Բայց ես ուզում էի, որ ջերմոցի և խոնավության ցուցիչն ապակու ներսում լիներ: Այսպիսով, ես գուգլեցի օրինակներ և սկսեցի փորձարկել:
Իմ եզրակացությունն այն էր, որ իմ գտած բոլոր օրինակներն այն չէին, ինչ ես ուզում էի կառուցել: Ես բռնեցի կոդի շատ փոքր մասեր և համատեղեցի դրանք: Ինձ բավական ժամանակ պահանջվեց ավարտելու իմ առաջին աշխատանքային կառուցվածքը, քանի որ շատ օրինակների փաստաթղթերը ինձ համար չափազանց դժվար էր հասկանալ, կամ նրանք ենթադրում էին, որ ես պետք է իմանայի: Բայց ես ոչինչ չգիտեի (դեռ)
Ահա թե ինչու ես կառուցում եմ սա ուսանելի: «Սկիզբ-մինչև վերջ» ձեռնարկ ՝ բառացիորեն բոլորի համար հասկանալի: (Գոնե հույս ունե՞մ)
Ինչպես է դա աշխատում …
Վերջնական արտադրանքը ESP32-CAM- ն է, որին կցված է DHT22 սենսոր, որն իր էներգիան ստանում է 18650 մարտկոցից: Ամեն երեք րոպեն մեկ կարդում է ջերմաստիճանը և խոնավությունը և WiFi- ով այն ուղարկում արտաքին MQTT սերվեր, այնուհետև քնում (երեք րոպե) `անհրաժեշտության դեպքում այնքան քիչ մարտկոց օգտագործելու համար:
Debian սերվերի վրա (որը ենթադրաբար կարող է լինել նաև ազնվամորու pi) ես ունեմ python3, MQTT սերվեր, MySQL սերվեր և վեբ սերվեր:
Python3 սցենարը գործում է որպես ծառայություն և ամեն անգամ, երբ ստանում է MQTT հաղորդագրություն, հաշվում է գրառումների նախորդ թիվը (ինդեքսի համարը) և ավելացնում այն մեկով: Այնուհետև այն կարդում է ջերմաստիճանի և խոնավության արժեքները MQTT հաղորդագրությունից: Այն ստուգում է կեղծ արժեքները և երբ արժեքները ճիշտ են, այն արժեքները ուղարկում է նոր ինդեքսի համարի և ընթացիկ ամսաթվի և ժամի հետ MySQL սերվեր:
Վեբ սերվերն ունի PHP սցենար, որը կարդում է MySQL սերվերի արժեքները և դրանից գրաֆիկ է պատրաստում ՝ օգտագործելով Google Charts- ը: (օրինակ)
Պարագաներ
Իմ օգտագործած մասերը հետևյալն են.
- ESP32-CAM (Տեսախցիկի տարբերակը օգտագործելու պատճառն այն է, որ դրա վրա արտաքին ալեհավաքի միակցիչ կա: Հավանաբար կան նաև այլ ESP32- ներ, որոնք կարող եք օգտագործել)
- Արտաքին ալեհավաք
-
AM2302 DHT22 տվիչ (սա ունի ներկառուցված դիմադրություն, այնպես որ ձեզ հարկավոր է ընդամենը երեք լար)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 մարտկոցի վահան v3
- 18650 մարտկոց (NCR18650B)
- Հին միկրո USB մալուխ (ESP32 մարտկոցի վահանին միացնելու համար)
- Որոշ կարճ ցատկող լարեր
Լրացուցիչ անհրաժեշտ.
-
USB- ից TTL միակցիչ (նկար)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Sոդման երկաթ
- 3D տպիչ (անհրաժեշտ է միայն բնակարանային պատյանների համար)
Քայլ 1: Վերբեռնեք Arduino ծածկագիրը ESP32-CAM- ում
Այսպիսով, եկեք սկսենք!
Arduino ծածկագիրը ESP32-CAM- ում վերբեռնելու համար պետք է USBtoTTL միակցիչը միացնել ESP32- ին ՝ օգտագործելով վերը նշված սխեմաները:
Arduino- ի ծածկագիրն է.
/*Ընդամենը մի փոքր ծրագիր ՝ DHT22 տվիչից ջերմաստիճանը և խոնավությունը կարդալու համար և
փոխանցեք այն MQTT- ին: B. Duijnhouwer Հունիս, 8 -րդ 2020 թ. "*** SERVER_NAME ***" // սերվերի անուն կամ IP #սահմանել mqtt_user "*** MQTT_USER ***" // օգտվողի անուն #սահմանել mqtt_password "*** MQTT_PASSWORD ***" // գաղտնաբառ #թեմայի սահմանում "ջերմոցի /dhtreadings "#define debug_topic" glasshouse /debug "// Topb debugging /* definitions for deepsleep* / #սահմանել uS_TO_S_FACTOR 1000000 /* Փոխակերպման գործոնը միկրո վայրկյաններից վայրկյանների համար* / #սահմանել TIME_TO_SLEEP 180 /* Timeամանակը ESP32- ը քնելու է 5 րոպե (վայրկյանների ընթացքում) */ bool debug = true; // Displayուցադրել տեղեկամատյանային հաղորդագրություն, եթե True #define DHT22_PIN 14 dht DHT; WiFiClient espClient; PubSubClient հաճախորդ (espClient); char տվյալներ [80]; void setup () {Serial.begin (115200); setup_wifi (); // Միացեք Wifi ցանցի client.setServer- ին (mqtt_server, 1883); // Կարգավորեք MQTT կապը, անհրաժեշտության դեպքում փոխեք պորտը: if (! client.connected ()) {նորից միանալ (); } // ԿԱՐԴԱԼ ՏՎՅԱԼՆԵՐ int chk = DHT.read22 (DHT22_PIN); բոց t = DHT. ջերմաստիճան; բոց h = DHT. խոնավություն; String dhtReadings = "{" ջերմաստիճան / ": \" " + Լար (t) +" / ", \" խոնավություն / ": \" " + Լար (h) +" / "}"; dhtReadings.toCharArray (տվյալներ, (dhtReadings.length () + 1)); if (կարգաբերում) {Serial.print ("Temերմաստիճանը."); Serial.print (t); Serial.print ("| Խոնավություն."); Serial.println (h); } // Հրապարակել արժեքներ MQTT թեմաներին client.publish (թեմա, տվյալներ); // Հրապարակել ընթերցումներ թեմայի վերաբերյալ (ջերմոց/dhtreadings) եթե (կարգաբերում) {Serial.println ("Ընթերցումները ուղարկվել են MQTT."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // գնա քնելու Serial.println («Կարգավորեք ESP32- ը յուրաքանչյուրի համար քնելու համար» + լարային (TIME_TO_SLEEP) + «վայրկյաններ»); Serial.println («Հիմա նորմալ քնելու եմ»); esp_deep_sleep_start (); } // Կարգավորել կապը wifi void- ի հետ setup_wifi () {հետաձգում (20); Serial.println (); Serial.print («Միացում»); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid, wifi_password); while (WiFi.status ()! = WL_CONNECTED) {ուշացում (100); Serial.print ("."); } Serial.println (""); Serial.println («WiFi- ն կարգին է»); Serial.print ("=> ESP32 նոր IP հասցեն է` "); Serial.print (WiFi.localIP ()); Serial.println (""); } // Միացեք wifi- ին, եթե կապը կորել է, անվավեր միացեք () {մինչ (! Client.connected ()) {Serial.print ("Միացում MQTT բրոքերին …"); if (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } else {Serial.print ("[Սխալ] Միացված չէ."); Serial.print (client.state ()); Serial.println («Սպասեք 5 վայրկյան ՝ նորից փորձելուց առաջ»); ուշացում (5000); }}} void loop () {}
Եվ կրկին, մի մոռացեք հավատարմագրերը փոխարինել ձեր հավատարմագրերով:
Քայլ 2: Լարվիր:
Էլեկտրաէներգիայի համար ես օգտագործեցի հին USB մալուխ, որից կտրեցի USB-A միակցիչը: USB մալուխի մեջ կա չորս լար, մեզ պետք են միայն սևերն ու կարմիրները:
Այսպիսով, ամեն ինչ միացրեք վերը նշված ժամանակացույցի համաձայն:
Քայլ 3: Python3 Script
Python3 սցենարը մտնում է այնպիսի վայր, որտեղ այն հասանելի է արմատային օգտագործողին:
Այս սցենարի համար ես օգտագործել եմ /root/scripts/glasshouse/glasshouse.py: Պիթոնի սցենարի բովանդակությունը հետևյալն է.
# Python3 սցենար ՝ MQTT- ին միանալու, արժեքները կարդալու և դրանք MySQL- ում գրելու համար
# # B. Duijnhouwer # հունիսի, 8 -րդ 2020 # # տարբերակ ՝ 1.0 # # import paho.mqtt.client as mqtt import json import pymysql pymysql.install_as_MySQLdb () import MySQLdb from datetime import datetime db = MySQLdb.connect ("local "glasshouse", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") կուրսորը = db.cursor () broker_address = "localhost" #Broker address port = 1883 #Միջնորդ նավահանգստի օգտվող = "** *MQTT_USERNAME *** " #Միացման օգտվողի գաղտնաբառ =" *** MQTT_PASSWORD *** " #Միացման գաղտնաբառ def_connect- ում (հաճախորդ, օգտվողի տվյալներ, դրոշներ, rc). արդյունքի կոդով {0} ". ձևաչափ (str (rc))) # Տպել միացման փորձի արդյունքը client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (client, userdata, msg): # Հետադարձ կապ երբ ՀՐԱՊԱՐԱԿԵԼ հաղորդագրությունը ստացվում է սերվերից: cursor.execute ("select * from sensordata") numrows = int (cursor.rowcount) newrow = numrows + 1 now = datetime.now () formatatted_date = now.strftime ('%Y-%m-%d%H:% M:%S ') payload = json.loads (msg.payload.decode (' utf-8 ')) print ("New row:"+str (newrow)) temperature = float (payload ["temperature"]) խոնավություն = float (payload ["խոնավություն"]) print ("Temperature:"+str (temperature)) print ("Humidity:"+str (խոնավություն)) print ("DateTime:"+str (formatatted_date)) if ((temperature > -20) և (ջերմաստիճան = 0) և (խոնավություն <= 100)). (newrow)+","+str (ջերմաստիճան)+","+str (խոնավություն)+", %s)", (formatted_date)) db.commit () print ("MySQL- ում ստացված և ներմուծված տվյալները") այլ: print ("տվյալները գերազանցել են սահմանները և ՉԻ ներմուծվում MySQL- ում") հաճախորդ = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (օգտվող, գաղտնաբառ = գաղտնաբառ) client.on_connect = on_connect # Սահմանել հետադարձ կապի գործառույթը համար հաջողակ կապի client.on_message = on_message # Սահմանել հետադարձ կապի գործառույթը ՝ հաղորդագրություն ստանալու հաճախորդի համար: միացեք (միջնորդի հասցե, նավահանգիստ = նավահանգիստ) # միացեք բրոքերային հաճախորդին: loop_forever () # Սկսեք ցանցային դև
Մի մոռացեք MySQL օգտվողի անունն ու գաղտնաբառը և MQTT օգտվողի անունն ու գաղտնաբառը փոխարինել ձեր սեփական հավատարմագրերին:
Դուք կարող եք այնպես անել, որ սցենարը գործարկվի որպես ծառայություն ՝ ստեղծելով երկու ֆայլ:
Առաջինը «/etc/init/glasshouse.conf» - ն է ՝ հետևյալ բովանդակությամբ.
սկսել runlevel- ից [2345]
կանգ առնել runlevel- ում [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Երկրորդը «/etc/systemd/system/multi-user.target.wants/glasshouse.service» է ՝ հետևյալ բովանդակությամբ.
[Միավոր]
Նկարագրություն = Glasshouse Monitoring Service After = multi-user.target [Service] Type = simple Restart = always RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Install] WantedBy = multi-user.թիրախ
Դուք կարող եք այն գործարկել որպես ծառայություն ՝ օգտագործելով հետևյալ հրամանը.
systemctl միացնել ջերմոցը
և սկսեք օգտագործել ՝
systemctl start glasshouse
Քայլ 4: MySQL Server
Դուք պետք է ստեղծեք նոր MySQL տվյալների բազա ՝ ընդամենը մեկ աղյուսակով:
Աղյուսակի ստեղծման ծածկագիրն է.
Ստեղծել աղյուսակ `sensordata` (`idx` int (11) ՄԱՍՆԱԳԻՏԱԿԱՆ ՆՈLԼ,« ջերմաստիճանը »բոց ՊԱՇՏՊԱՆԱԿԱՆ ՆՈLԼ,« խոնավությունը »լողում է ՊԱՇՏՊԱՆՈULԹՅԱՆ ՆՈLԼ,« ժամանակային դրոշմակնիքի »ամսաթվերը ՝ ՀԵՌԱԳՈՐ ԱՌԱՆՈ)ԹՅՈՆ) Շարժիչ = InnoDB ՊԱՇՏՊԱՆՈARԹՅՈARՆ ARԱՐԳ = utf8;
Քայլ 5: Վեբ սերվեր
Վեբ սերվերն ունի երկու ֆայլ ՝ index.php և մեկ config.ini ֆայլ
Config.ini ֆայլի բովանդակությունը հետևյալն է.
[տվյալների բազա]
db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Որտեղ, իհարկե, դուք փոխարինում եք *** DATABASE_USER *** և *** DATABASE_PASSWORD *** սեփական հավատարմագրերով:
google.charts.load ('ընթացիկ', {'փաթեթներ': ['corechart']}); google.charts.setOnLoadCallback (drawChart); function drawChart () {var data = google.visualization.arrayToDataTable ([// ['Timestamp', 'Temperature', 'Humidity', 'Heat Index'], ['Timestamp', 'Temperature,' Humidity '], հարցում ($ sql); # This while - հանգույցի ձևաչափեր և տեղադրված բոլոր տվյալները տեղադրեք ['timestamp', 'temperature', 'խոնավություն'] way. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ row ["timestamp"], 10, 6); echo "['". $ timestamp_rest. "',". $ row ['temperature']. ",". $ row ['խոնավություն']: "],"; // echo "['". $ timestamp_rest. "',". $ row ['temperature']. ",". $ row ['խոնավություն']. ",". $ row ['heatindex ']. "],";}?>]); // Curved line var options = {title: 'Temperature and խոնավություն', curveType: 'function', legend: {position: 'bottom'}, hAxis: {slantedText: true, slantedTextAngle: 45}}; // Curved chart var chart = new google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (տվյալներ, ընտրանքներ); } // ավարտի փակագծերը drawChart- ից //
Քայլ 6: 3D տպագիր բնակարան
Բնակարանի համար ես օգտագործել եմ երկու առանձին պատյան ՝ մեկը ESP32-CAM- ի և DHT22- ի համար միասին, և մեկը 18650 մարտկոցի վահանի համար:
Քայլ 7: Վերջնական արդյունքը:
Վերջնական արդյունքը ցուցադրվում է նաև վերևի նկարներում:
Եվ երբ մարտկոցը դատարկ է, այն կարող եք լիցքավորել մինի USB մալուխով:
Խորհուրդ ենք տալիս:
LCDուցադրել խոնավություն և ջերմաստիճան LCD- ով ARDUINO NANO- ով. 5 քայլ
ARDUINO NANO- ով ցուցադրել խոնավություն և ջերմաստիճան LCD- ում. Հետևյալ հրահանգավոր գործարքները վերաբերում են arduino nano- ի հետ պարզ LCD ինտերֆեյսի ստեղծմանը:
LoRa- ով ջերմոցի ավտոմատացում: (Մաս 1) -- Սենսորներ (ջերմաստիճան, խոնավություն, հողի խոնավություն) ՝ 5 քայլ
LoRa- ով ջերմոցի ավտոմատացում: (Մաս 1) || Սենսորներ (ջերմաստիճան, խոնավություն, հողի խոնավություն). Այս նախագծում ես ձեզ ցույց կտամ, թե ինչպես եմ ավտոմատացրել ջերմոցը: Դա նշանակում է, որ ես ձեզ ցույց կտամ, թե ինչպես եմ կառուցել ջերմոցը և ինչպես եմ միացրել էներգիայի և ավտոմատացման էլեկտրոնիկան: Նաև ձեզ ցույց կտամ, թե ինչպես ծրագրավորել Arduino տախտակ, որն օգտագործում է L
Շաբաթվա օր, օրացույց, ժամանակ, խոնավություն/ջերմաստիճան մարտկոցի խնայարարով. 10 քայլ (նկարներով)
Շաբաթվա օր, օրացույց, ժամանակ, խոնավություն/ջերմաստիճան մարտկոցի խնայարարով. Էներգախնայողության ռեժիմն այստեղ այն է, ինչ այս հրահանգը առանձնացնում է շաբաթվա օրը, ամիսը, ամսվա օրը, ժամանակը, խոնավությունը և ջերմաստիճանը ցուցադրող այլ օրինակներից: Այս հնարավորությունն է, որ թույլ է տալիս այս նախագիծը գործարկել մարտկոցից ՝ առանց տ
ESP8266 NodeMCU Access Point (AP) վեբ սերվերի համար DT11 ջերմաստիճանի տվիչով և տպման ջերմաստիճան և խոնավություն դիտարկիչում ՝ 5 քայլ
ESP8266 NodeMCU Access Point (AP) վեբ սերվերի համար DT11 ջերմաստիճանի տվիչով և տպման ջերմաստիճան և խոնավություն դիտարկիչում. Բարև տղերք, նախագծերի մեծ մասում մենք օգտագործում ենք ESP8266 և նախագծերի մեծ մասում մենք օգտագործում ենք ESP8266- ը որպես վեբ սերվեր, որպեսզի տվյալները հասանելի լինեն: WIFI- ով ցանկացած սարք ՝ մուտք գործելով ESP8266- ի կողմից տեղադրված Վեբ սերվեր, բայց միակ խնդիրն այն է, որ մեզ անհրաժեշտ է աշխատող երթուղիչ
WEMOS D1 ջերմաստիճան/Խոնավություն IoT ՝ 6 քայլ
WEMOS D1 pերմաստիճան/Խոնավություն IoT. Սա պարզ հավաքում, միացում, կազմում է նախագիծ, որը հնարավորություն կտա ձեզ գնալ IoT ջերմաստիճանի և խոնավության սենսորով, որը միանում է WiFi- ին և ձեր տվյալները «հաղորդում» Blynk IoT հարթակին: Ձեր սմարթֆոնից մոնիտորինգը դյուրին դարձնելով: Բացի այդ