Turinys:
- Prekės
- 1 veiksmas: įkelkite „Arduino“kodą į ESP32-CAM
- 2 žingsnis: prijunkite laidą
- 3 žingsnis: „Python3“scenarijus
- 4 žingsnis: „MySQL Server“
- 5 veiksmas: tinklalapio serveris
- 6 žingsnis: 3D spausdintas korpusas
- 7 žingsnis: galutinis rezultatas
Video: Temperatūra ir drėgmė naudojant ESP32-DHT22-MQTT-MySQL-PHP: 7 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:45
Mano mergina norėjo šiltnamio, todėl aš ją padariau. Bet aš norėjau temperatūros ir drėgmės jutiklio šiltnamyje. Taigi, ieškojau pavyzdžių ir pradėjau eksperimentuoti.
Mano išvada buvo ta, kad visi mano rasti pavyzdžiai nebuvo tokie, kokių norėjau sukurti. Pagriebiau daug mažų kodo dalių ir jas sujungiau. Prireikė nemažai laiko, kol baigiau savo pirmąjį darbinį darbą, nes daugumos pavyzdžių dokumentaciją man buvo per sunku suprasti arba jie manė, kad turėčiau žinoti ?? Bet aš nieko nežinojau (dar)
Štai kodėl aš kuriu tai pamokomą. Pamoka „nuo pradžios iki pabaigos“, kurią pažodžiui supranta visi. (Bent jau aš tikiuosi?)
Kaip tai veikia …
Galutinis produktas yra ESP32-CAM su DHT22 jutikliu, kuris gauna maitinimą iš 18650 baterijos. Kas tris minutes jis nuskaito temperatūrą ir drėgmę ir siunčia tai per „WiFi“į išorinį MQTT serverį, tada eina miegoti (trims minutėms), kad prireikus sunaudotų mažiau akumuliatoriaus
„Debian“serveryje (kuris, manau, taip pat gali būti „aviečių pi“), turiu „python3“, MQTT serverį, „MySQL“serverį ir žiniatinklio serverį
„Python3“scenarijus veikia kaip paslauga ir kaskart, kai gauna MQTT pranešimą, skaičiuoja ankstesnį įrašų skaičių (indekso numerį) ir padidina jį vienu. Tada jis nuskaito temperatūros ir drėgmės vertes iš pranešimo MQTT. Ji tikrina klaidingas vertes ir, kai vertės yra teisingos, siunčia vertes kartu su nauju indekso numeriu ir dabartine data bei laiku į „MySQL“serverį
Tinklalapio serveris turi PHP scenarijų, kuris skaito vertes iš „MySQL“serverio ir sukuria gražų grafiką iš jo, naudodamas „Google“diagramas. (pavyzdys)
Prekės
Mano naudojamos dalys yra šios:
- ESP32-CAM (Priežastis, kodėl naudojau kumštelio versiją, yra ta, kad joje yra išorinė antenos jungtis. Tikriausiai yra ir kitų ESP32, kuriuos galėtumėte naudoti)
- Išorinė antena
-
AM2302 DHT22 jutiklis (šis turi įmontuotą rezistorių, todėl jums reikia tik trijų laidų)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 akumuliatoriaus skydas v3
- 18650 baterija (NCR18650B)
- Senas mikro USB kabelis (skirtas ESP32 prijungti prie akumuliatoriaus skydo)
- Keletas trumpų jungiamųjų laidų
Papildomai reikia:
-
USB į TTL jungtis (nuotrauka)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Lituoklis
- 3D spausdintuvas (reikalingas tik korpusui)
1 veiksmas: įkelkite „Arduino“kodą į ESP32-CAM
Taigi pradėkime!
Norėdami įkelti „Arduino“kodą į ESP32-CAM, turite prijungti USBtoTTL jungtį prie ESP32 naudodami aukščiau pateiktas schemas.
„Arduino“kodas yra:
/*Tik nedidelė programa, skirta nuskaityti temperatūrą ir drėgmę iš DHT22 jutiklio ir
perduoti jį MQTT. B. Duijnhouwer 2020 m. Birželio 8 d.*/#Include #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // wifi slaptažodis #define mqtt_server "*** SERVER_NAME ***" // serverio pavadinimas arba IP #define mqtt_user "*** MQTT_USER ***" // naudotojo vardas #define mqtt_password "*** MQTT_PASSWORD ***" // slaptažodis #define topic "šiltnamis /dhtreadings "#define debug_topic" glasshouse /debug "// Derinimo tema /* gilaus miego apibrėžimai* /#define uS_TO_S_FACTOR 1000000 /* Konversijos koeficientas mikro sekundėms iki sekundžių* /#define TIME_TO_SLEEP 180 /* Laikas ESP32 užmigs 5 minutes (sekundėmis) */ bool debug = true; // Rodyti žurnalo pranešimą, jei tiesa #define DHT22_PIN 14 dht DHT; „WiFiClient espClient“; „PubSubClient“klientas (espClient); char duomenys [80]; void setup () {Serial.begin (115200); „setup_wifi“(); // Prisijunkite prie „Wifi“tinklo kliento.setServer (mqtt_server, 1883); // Konfigūruokite MQTT ryšį, jei reikia, pakeiskite prievadą. if (! client.connected ()) {reconnect (); } // SKAITYTI DUOMENIS int chk = DHT.read22 (DHT22_PIN); plūdė t = DHT.temperatūra; plūdė h = DHT. drėgmė; Styga dhtReadings = "{" temperatūra / ": \" " + Eilutė (t) +" / ", \" drėgmė / ": \" " + Eilutė (h) +" / "}"; dhtReadings.toCharArray (duomenys, (dhtReadings.length () + 1)); if (derinimas) {Serial.print ("Temperature:"); Serijinis atspaudas (t); Serial.print ("| Drėgmė:"); Serijinis.println (h); } // Skelbti vertes MQTT temose client.publish (tema, duomenys); // Skelbti skaitymus tema (šiltnamis/dhtreadings) if (derinimas) {Serial.println ("Skaitymai išsiųsti MQTT."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // eiti miegoti Serial.println ("Nustatykite ESP32 miegoti už kiekvieną" + eilutė (TIME_TO_SLEEP) + "Sekundės"); Serial.println ("Dabar einu miegoti kaip įprasta."); esp_deep_sleep_start (); } // Nustatyti ryšį su „wifi“void setup_wifi () {delay (20); Serial.println (); Serial.print („Prisijungimas prie“); Serial.println (wifi_ssid); „WiFi.begin“(„wifi_ssid“, „wifi_password“); while (WiFi.status ()! = WL_CONNECTED) {delay (100); Serijinis atspaudas ("."); } Serial.println (""); Serial.println („WiFi yra gerai“); Serial.print ("=> ESP32 naujas IP adresas yra:"); Serial.print („WiFi.localIP ()“); Serial.println (""); } // Prisijunkite iš naujo prie „wifi“, jei ryšys prarastas void reconnect () {while (! Client.connected ()) {Serial.print ("Prisijungimas prie MQTT brokerio …"); if (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println („Gerai“); } else {Serial.print ("[Klaida] Neprisijungta:"); Serial.print (client.state ()); Serial.println („Palaukite 5 sekundes prieš bandydami iš naujo“); vėlavimas (5000); }}} void loop () {}
Ir dar kartą, nepamirškite pakeisti įgaliojimų savo kredencialais
2 žingsnis: prijunkite laidą
Maitinimui naudoju seną USB kabelį, iš kurio nutraukiau USB-A jungtį. USB laide yra keturi laidai, mums reikia tik juodos ir raudonos.
Taigi, prijunkite viską pagal aukščiau pateiktą tvarkaraštį.
3 žingsnis: „Python3“scenarijus
„Python3“scenarijus patenka į vietą, kur jis yra prieinamas pagrindiniam vartotojui.
Šiam scenarijui naudojau /root/scripts/glasshouse/glasshouse.py. „Python“scenarijaus turinys yra:
# „Python3“scenarijus, skirtas prisijungti prie MQTT, skaityti vertes ir įrašyti jas į „MySQL“
# # B. Duijnhouwer # 2020 m. Birželio 8 d. # # Versija: 1.0 # # importuoti paho.mqtt.client as mqtt import json import pymysql pymysql.install_as_MySQLdb () importuoti MySQLdb iš datetime import datetime db = MySQLdb.connect ("localhost", "šiltnamis", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") žymeklis = db.cursor () broker_address = "localhost" #Broker address port = 1883 #Broker port user = "** *MQTT_USERNAME *** "#Connection username password =" *** MQTT_PASSWORD *** "#Connection password def on_connect (klientas, vartotojo duomenys, vėliavos, rc): #Atšaukimas, kai klientas prisijungia prie tarpininko spaudinio (" Prisijungta su rezultato kodu {0} ". format (str (rc))) # Spausdinimo bandymo prisijungti rezultatas client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (klientas, vartotojo duomenys, žinutė): # Atšaukimas, kai PUBLISH pranešimas gautas iš serverio. cursor.execute ("pasirinkite * iš sensorinių duomenų") numrows = int (cursor.rowcount) newrow = numrows + 1 dabar = datetime.now () formatted_date = now.strftime ('%Y-%m-%d%H:% M:%S ') naudingoji apkrova = json.loads (msg.payload.decode (' utf-8 ')) print ("Nauja eilutė:"+str (newrow)) temperatūra = plūdė (naudingoji apkrova ["temperatūra"]) drėgmė = float (naudingoji apkrova ["drėgmė"]) print ("Temperatūra:"+str (temperatūra)) print ("Drėgmė:"+str (drėgmė)) print ("DateTime:"+str (formatuota data)) if ((temperatūra > -20) ir (temperatūra = 0) ir (drėgmė <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, temperatūra, drėgmė, laiko žyma) VALUES ("+str. (newrow)+","+str (temperatūra)+","+str (drėgmė)+", %s)", (formatuota data)) db.commit () print ("gauti ir importuoti MySQL duomenys") else: print ("duomenys viršijo ribas ir NĖRA importuojami į MySQL") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (vartotojas, slaptažodis = slaptažodis) client.on_connect = on_connect # Apibrėžkite atgalinio ryšio funkciją dėl sėkmingas prisijungimas client.on_message = on_message # Apibrėžkite atgalinio ryšio funkciją, kad gautumėte pranešimą.
Nepamirškite pakeisti „MySQL“vartotojo vardo ir slaptažodžio bei „MQTT“vartotojo vardo ir slaptažodžio į savo kredencialus
Galite sukurti scenarijų kaip paslaugą sukurdami du failus.
Pirmasis yra „/etc/init/glasshouse.conf“, kurio turinys yra toks:
pradėti nuo lygio [2345]
stop on runlevel [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Antrasis yra „/etc/systemd/system/multi-user.target.wants/glasshouse.service”, kurio turinys yra toks:
[Vienetas]
Aprašymas = Glasshouse Monitoring Service After = multi-user.target [Service] Tipas = simple Restart = Always RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Install] WantedBy = multi-user.tikslą
Tai galite atlikti kaip paslaugą naudodami šią komandą:
sistema įgalina šiltnamį
ir pradėkite jį naudodami:
systemctl start šiltnamis
4 žingsnis: „MySQL Server“
Turite sukurti naują „MySQL“duomenų bazę, kurioje būtų tik viena lentelė.
Lentelės kūrimo kodas yra:
KURTI LENTELĘ „sensordata“(`idx` int (11) Numatytasis NULL,` temperatūros `plūdis Numatytasis NULL,` drėgmės` plūdė Numatytasis NULL, `laiko žymė` datetime DEFAULT NULL) VARIKLIS = „InnoDB DEFAULT CHARSET“= utf8;
5 veiksmas: tinklalapio serveris
Tinklalapio serveryje yra du failai: index.php failas ir vienas config.ini failas
Failo config.ini turinys yra toks:
[duomenų bazė]
db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Kur nekeičiate *** DATABASE_USER *** ir *** DATABASE_PASSWORD *** savo kredencialais.
google.charts.load ('dabartinis', {'paketai': ['corechart']}); google.charts.setOnLoadCallback (drawChart); function drawChart () {var data = google.visualization.arrayToDataTable ([// ['Laiko žyma', 'Temperatūra', 'Drėgmė', 'Šilumos indeksas'], ['Laiko žyma', 'Temperatūra', 'Drėgmė'], query ($ sql); # This while - ciklas formuoja ir visus gautus duomenis įdeda į ['timestamp', 'temperature', 'drėgmė'] būdą. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ eilutė ["laiko žymė"], 10, 6); echo "['". $ timestamp_rest. "", ". $ eilutė [' temperatūra '].", ". $ eilutė [' drėgmė ']. "],"; // aidas "['". $ timestamp_rest. "", ". $ row [' temperature '].", ". $ row [' drėgmė '].", ". $ row [' heatindex ']. "],";}?>])); // Išlenktos linijos var options = {title: 'Temperatūra ir drėgmė', curveType: 'function', legend: {position: 'bottom'}, hAxis: {slantedText: true, slantedTextAngle: 45}}; // Kreivės diagramos var diagrama = new google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (duomenys, parinktys); } // Pabaigos skliaustas iš drawChart //
6 žingsnis: 3D spausdintas korpusas
Korpusui naudoju du atskirus korpusus, vieną ESP32-CAM ir DHT22 kartu, o kitą-18650 akumuliatoriaus skydui.
7 žingsnis: galutinis rezultatas
Galutinis rezultatas taip pat parodytas aukščiau esančiose nuotraukose.
Ir kai akumuliatorius yra tuščias, galite jį įkrauti naudodami mini USB kabelį.
Rekomenduojamas:
M5STACK Kaip rodyti temperatūrą, drėgmę ir slėgį naudojant „M5StickC ESP32“naudojant „Visuino“- lengva padaryti: 6 žingsniai
„M5STACK“Kaip rodyti temperatūrą, drėgmę ir slėgį „M5StickC ESP32“naudojant „Visuino“- lengva padaryti: šioje pamokoje sužinosime, kaip užprogramuoti „ESP32 M5Stack StickC“su „Arduino IDE“ir „Visuino“rodyti temperatūrą, drėgmę ir slėgį naudojant ENV jutiklį (DHT12, BMP280, BMM150)
Įspėjimas apie temperatūrą ir drėgmę naudojant AWS ir ESP32: 11 žingsnių
Įspėjimas apie temperatūrą ir drėgmę naudojant AWS ir ESP32: Šiame vadove mes išmatuosime skirtingus temperatūros ir drėgmės duomenis naudodami temperatūros ir drėgmės jutiklį. Taip pat sužinosite, kaip siųsti šiuos duomenis į AWS
Šiltnamio automatizavimas naudojant „LoRa“! (1 dalis) -- Jutikliai (temperatūra, drėgmė, dirvožemio drėgmė): 5 žingsniai
Šiltnamio automatizavimas naudojant „LoRa“! (1 dalis) || Jutikliai (temperatūra, drėgmė, dirvožemio drėgmė): Šiame projekte aš jums parodysiu, kaip automatizavau šiltnamį. Tai reiškia, kad aš jums parodysiu, kaip aš pastatiau šiltnamį ir kaip prijungiau maitinimo ir automatikos elektroniką. Taip pat parodysiu, kaip užprogramuoti „Arduino“lentą, kurioje naudojama L
„Arduino“orų stotis naudojant BMP280 -DHT11 - temperatūra, drėgmė ir slėgis: 8 žingsniai
„Arduino“orų stotis naudojant BMP280 -DHT11 - Temperatūra, drėgmė ir slėgis: Šioje pamokoje sužinosime, kaip sukurti orų stotį, kuri TFT 7735 LCD ekrane rodys TEMPERATŪRĄ, DRĖGMĘ IR SLĖGĮ Žiūrėkite demonstracinį vaizdo įrašą
ESP8266 „Nodemcu“temperatūros stebėjimas naudojant DHT11 vietiniame tinklalapyje - Patvirtinkite kambario temperatūrą ir drėgmę naršyklėje: 6 žingsniai
ESP8266 „Nodemcu“temperatūros stebėjimas naudojant DHT11 vietiniame tinklalapyje | Naršyklėje nustatykite kambario temperatūrą ir drėgmę: Sveiki, vaikinai, šiandien mes gaminsime drėgmę ir temperatūros stebėjimo sistema, naudojant ESP 8266 NODEMCU & DHT11 temperatūros jutiklis. Temperatūra ir drėgmė bus nustatyti naudojant DHT11 jutiklį & tai galima pamatyti naršyklėje, kuris tinklalapis bus valdomas