Orodha ya maudhui:

Joto na Unyevu Kutumia ESP32-DHT22-MQTT-MySQL-PHP: Hatua 7
Joto na Unyevu Kutumia ESP32-DHT22-MQTT-MySQL-PHP: Hatua 7

Video: Joto na Unyevu Kutumia ESP32-DHT22-MQTT-MySQL-PHP: Hatua 7

Video: Joto na Unyevu Kutumia ESP32-DHT22-MQTT-MySQL-PHP: Hatua 7
Video: JINSI YA KUSET JOTO NA UNYEVU KWENYE INCUBATOR | JOTO NA UNYEVU UNAHITAJIKA KATIKA INCUBATOR 2024, Julai
Anonim
Joto na Unyevu Kutumia ESP32-DHT22-MQTT-MySQL-PHP
Joto na Unyevu Kutumia ESP32-DHT22-MQTT-MySQL-PHP

Msichana wangu alitaka glasshouse, kwa hivyo nikamtengeneza. Lakini nilitaka sensorer ya joto na unyevu ndani ya glasshouse. Kwa hivyo, nilienda kwa mifano na nikaanza kujaribu.

Hitimisho langu ni kwamba mifano yote ambayo niligundua sio hasa nilitaka kujenga. Nilichukua sehemu nyingi ndogo za nambari na kuzichanganya. Ilinichukua muda kabisa kumaliza ujenzi wangu wa kwanza wa kazi kwa sababu nyaraka za mifano mingi zilikuwa ngumu sana kwangu kuelewa au walidhani sehemu ambayo nipaswa kujua? Lakini sikujua chochote (bado) ☹

Ndiyo sababu ninajenga hii inayoweza kufundishwa. Mafunzo ya "mwanzo-hadi mwisho" kwa kila mtu kuelewa. (Angalau natumai?)

Inavyofanya kazi …

Bidhaa ya mwisho ni ESP32-CAM na sensorer ya DHT22 iliyoambatanishwa nayo ambayo inapata nguvu kutoka kwa betri ya 18650. Kila dakika tatu inasoma joto na unyevu na hutuma hii kwa WiFi kwa seva ya nje ya MQTT kisha inalala (kwa dakika tatu) kutumia betri kidogo kama inahitajika

Kwenye seva ya Debian, (ambayo inaweza pia kuwa pi ya rasiberi nadhani) nina python3, seva ya MQTT, seva ya MySQL na seva ya wavuti

Hati ya python3 inaendesha kama huduma na wakati wowote inapokea ujumbe wa MQTT, inahesabu nambari ya awali ya viingilio (nambari ya nambari) na inaongeza hii kwa moja. Halafu inasoma maadili ya joto na unyevu kutoka kwa ujumbe wa MQTT. Inatafuta maadili ya uwongo na wakati wowote maadili ni sahihi, hutuma maadili pamoja na nambari mpya ya faharisi na tarehe na wakati wa sasa kwa seva ya MySQL

Seva ya wavuti ina hati ya PHP ambayo inasoma maadili kutoka kwa seva ya MySQL na inafanya grafu nzuri kutoka kwayo kwa kutumia Chati za Google. (mfano)

Vifaa

Sehemu nilizotumia ni zifuatazo:

  • ESP32-CAM (Sababu nilitumia toleo la cam ni kwa sababu ina kiunganishi cha antena ya nje juu yake. Pengine kuna zingine za ESP32 unazoweza kutumia)
  • Antena ya nje
  • Sensor ya AM2302 DHT22 (Hii ina kontena iliyojengwa, kwa hivyo unahitaji waya tatu tu)

    https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…

  • Ngao ya betri 18650 v3
  • Betri ya 18650 (NCR18650B)
  • Cable ya zamani ya USB ndogo (ya kuunganisha ESP32 na ngao ya betri)
  • Baadhi ya waya fupi za kuruka

Ziada inahitajika:

  • USB kwa kontakt TTL (picha)

    https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…

  • Chuma cha kulehemu
  • Printa ya 3D (inahitajika tu kwa kesi ya makazi)

Hatua ya 1: Pakia Nambari ya Arduino kwenye ESP32-CAM

Pakia Nambari ya Arduino kwenye ESP32-CAM
Pakia Nambari ya Arduino kwenye ESP32-CAM

Basi hebu tuanze!

Ili kupakia nambari ya Arduino kwenye ESP32-CAM, lazima uunganishe kiunganishi cha USBtoTTL kwa ESP32 ukitumia skimu zilizo hapo juu.

Nambari ya Arduino ni:

/ * Programu ndogo tu ya kusoma joto na unyevu kutoka kwa sensorer ya DHT22 na

pitisha kwa MQTT. B. Duijnhouwer Juni, 8th 2020 * / # pamoja na # pamoja na #jumuisha #fasili wifi_ssid "*** WIFI_SSID ***" // wifi ssid #fafanua neno la wifi "*** WIFI_PASSWORD ***" // nywila ya wifi #fafanua mqtt_server "*** SERVER_NAME ***" // jina la seva au IP #fasili mqtt_user "*** MQTT_USER ***" // jina la mtumiaji #fafanua mqtt_password "*** MQTT_PASSWORD ***" // password #fafanua mada "glasshouse / dhtreadings "#fasili debug_topic" glasshouse / deug " kwa dakika 5 (kwa sekunde) * / bool debug = kweli; // Onyesha ujumbe wa kumbukumbu ikiwa Kweli #fafanua DHT22_PIN 14 dht DHT; Mteja wa WiFi espClient; Mteja wa PubSubClient (espClient); data ya char [80]; kuanzisha batili () {Serial.begin (115200); kuanzisha_wifi (); // Unganisha kwa mteja wa mtandao wa Wifi.setServer (mqtt_server, 1883); // Sanidi uunganisho wa MQTT, badilisha bandari ikiwa inahitajika. ikiwa (! mteja.meunganishwa ()) {unganisha tena (); } // SOMA DATA YA int chk = DHT.read22 (DHT22_PIN); kuelea t = DHT. joto; kuelea h = DHT. unyevu; Kamba dhtReadings = "{" joto / ": \" "+ Kamba (t) +" / ", \" unyevu / ": \" "+ Kamba (h) +" / "}"; dhtReadings.toCharArray (data, (dhtReadings.length () + 1)); ikiwa (utatuaji) {Serial.print ("Joto:"); Printa ya serial (t); Printa ya serial ("| Unyevu:"); Serial.println (h); } // Chapisha maadili kwa mteja wa mada ya MQTT.chapisha (mada, data); // Chapisha usomaji kwenye mada (glasshouse / dhtreadings) ikiwa (utatuaji) {Serial.println ("Masomo yaliyotumwa kwa MQTT."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // nenda kulala Serial.println ("Sanidi ESP32 kulala kwa kila" + String (TIME_TO_SLEEP) + "Sekunde"); Serial.println ("Kwenda kulala kama kawaida sasa."); esp_deep_sleep_start (); } // Kuweka unganisho kwa wifi batili setup_wifi () {kuchelewesha (20); Serial.println (); Serial.print ("Kuunganisha kwa"); Serial.println (wifi_ssid); Anza WiFi (wifi_ssid, wifi_password); wakati (WiFi.status ()! = WL_CONNECTED) {kuchelewa (100); Printa ya serial ("."); } Serial.println (""); Serial.println ("WiFi iko sawa"); Serial.print ("=> ESP32 anwani mpya ya IP ni:"); Rekodi ya serial (WiFi.localIP ()); Serial.println (""); } // Unganisha tena kwa wifi ikiwa unganisho limepotea unganisha tena () {wakati (! Mteja.meunganishwa ()) {Serial.print ("Kuunganisha kwa broker wa MQTT…"); ikiwa (mteja.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } mwingine {Serial.print ("[Kosa] Haijaunganishwa:"); Serial.print (mteja.state ()); Serial.println ("Subiri sekunde 5 kabla ya kujaribu tena."); kuchelewesha (5000); }}}} kitanzi batili () {}

Na tena, usisahau kubadilisha sifa na sifa zako mwenyewe

Hatua ya 2: Waya Up

Waya Up!
Waya Up!

Kwa nguvu, nilitumia kebo ya zamani ya USB ambayo nilikata kiunganishi cha USB-A. Kuna waya nne kwenye kebo ya USB, tunahitaji tu nyeusi na nyekundu.

Kwa hivyo, unganisha kila kitu kulingana na ratiba hapo juu.

Hatua ya 3: Hati ya Python3

Hati ya Python3 huenda mahali ambapo inapatikana kwa mtumiaji wa mizizi.

Nilitumia /root/script/glasshouse/glasshouse.py kwa hati hii. Yaliyomo kwenye hati ya chatu ni:

Hati ya # Python3 kuungana na MQTT, soma maadili na uandike kwenye MySQL

# # B. Duijnhouwer # Juni, 8th 2020 # # toleo: 1.0 # # kuagiza paho.mqtt.client kama mqtt kuagiza json kuagiza pymysql pymysql.install_as_MySQLdb () kuagiza MySQLdb kutoka wakati wa kuingiza wakati wa db = MySQLdb.connect ("localhost", "glasshouse", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") mshale = db.cursor () broker_address = "localhost" #Broker anuani port = 1883 # Broker port user = "** * " na nambari ya matokeo {0} ". fomati (str (rc))) # Chapisha matokeo ya jaribio la unganisho mteja. jiandikishe (" glasshouse / dhtreadings / # ") def on_message (mteja, userdata, msg): # Kupigiwa simu kwa wakati PARLISH ujumbe ni kupokea kutoka server. cursor. M:% S ') payload = json.loads (msg.payload.decode (' utf-8 ')) chapa ("Safu mpya:" + str (newrow)) joto = kuelea (payload ["joto"]) unyevu = kuelea (malipo ya kulipia ["unyevu"]) chapisha ("Joto:" + str (joto)) chapisha ("Unyevu:" + str (unyevu)) chapisha ("DateTime:" + str (formatted_date)) ikiwa ((joto > -20) na (joto = 0) na (unyevu <= 100)): cur = db.cursor () cur.execute ("INSERT IN glasshouse.sensordata (idx, joto, unyevu, timestamp) MAADILI (" + str (newrow) + "," + str (joto) + "," + str (unyevu) + ",% s)", (formatted_date)) db.commit () chapa ("data iliyopokelewa na kuletwa katika MySQL") nyingine: chapa ("data ilizidi mipaka na HAIINGIWI katika MySQL") mteja = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (user, password = password) mteja.on_connect = on_connect # Fafanua kazi ya kupiga simu tena kwa mteja wa unganisho aliyefanikiwa.on_message = on_message # Fafanua kazi ya kupiga simu kwa kupokea mteja wa ujumbe. unganisho (broker_address, port = port) # unganisha kwa mteja wa broker.loop_forever () # Anza mtandao wa daemon

Usisahau kuchukua nafasi ya jina la mtumiaji na nywila ya MySQL na jina la mtumiaji na nenosiri la MQTT kwa sifa zako

Unaweza kufanya hati kuendeshwa kama huduma kwa kuunda faili mbili.

Ya kwanza ni "/etc/init/glasshouse.conf" na yaliyomo yafuatayo:

anza kwenye runlevel [2345]

simama kwenye runlevel [! 2345] exec /root/script/glasshouse/glasshouse.py

Ya pili ni “/etc/systemd/system/multi-user.target.wants/glasshouse.service” na yaliyomo yafuatayo:

[Kitengo]

Maelezo = Huduma ya Ufuatiliaji wa Glasshouse Baada ya = multi-user.target [Huduma] Aina = rahisi kuanzisha upya = kila wakati Anzisha upyaSec = 1 ExecStart = / usr / bin / python3 / root/script/glasshouse/glasshouse.py [Sakinisha] WantedBy = watumiaji wengi lengo

Unaweza kuendesha hii kama huduma kwa kutumia amri ifuatayo:

systemctl kuwezesha glasshouse

na uanze kutumia:

systemctl kuanza glasshouse

Hatua ya 4: Seva ya MySQL

Lazima uunde hifadhidata mpya ya MySQL na meza moja tu ndani yake.

Nambari ya kuunda meza ni:

Unda Jedwali `sensordata` (`idx` int (11) DEFAULT NULL,` joto` kuelea DEFAULT NULL, `humidity` kuelea DEFAULT NULL,` timestamp` datetime DEFAULT NULL) INGINE = InnoDB DEFAULT CHARSET = utf8;

Hatua ya 5: Webserver

Seva ya wavuti ina faili mbili, faili ya index.php na faili moja ya config.ini

Yaliyomo kwenye faili ya config.ini ni:

[hifadhidata]

db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"

Ambapo kosa unachukua nafasi ya *** DATABASE_USER *** na *** DATABASE_PASSWORD *** na hati zako mwenyewe.

google.charts.load ('sasa', {'vifurushi': ['corechart']}); google.charts.setOnLoadCallback (Chati ya kuteka); kazi DrawChart () {var data = google.visualization.arrayToDataTable ([// ['Timestamp', 'Temperature', 'Humidity', 'Heat Index'], ['Timestamp', 'Temperature', 'Humidity'], swala ($ sql); # Wakati huu - fomati za kitanzi na uweke data zote zilizopatikana katika njia ya 'timestamp', 'joto', 'humidity'] wakati ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ row ["timestamp"], 10, 6); echo "['". $ timestamp_rest. "',". $ row ['joto']. ",". $ safu ['unyevu']. "],"; // echo "['". $ timestamp_rest. "',". $ row ['temperature']. ",". $ row ['humidity']. ",". $ row ['heatindex " ']. "],";}?>]; // Mstari uliopindika chaguzi var = Chati iliyopigwa var chati = mpya google.visualization. LineChart (hati.getElementById ('curve_chart')); chati.draw (data, chaguzi); } // Mwisho wa mabano kutoka kwa Chora //

Hatua ya 6: Nyumba ya Kuchapishwa ya 3D

Kwa makazi, nilitumia nyumba mbili tofauti, moja kwa ESP32-CAM na DHT22 pamoja na moja kwa ngao ya betri ya 18650.

Hatua ya 7: Matokeo ya Mwisho

Matokeo ya Mwisho!
Matokeo ya Mwisho!
Matokeo ya Mwisho!
Matokeo ya Mwisho!
Matokeo ya Mwisho!
Matokeo ya Mwisho!
Matokeo ya Mwisho!
Matokeo ya Mwisho!

Matokeo ya mwisho pia yanaonyeshwa kwenye picha hapo juu.

Na wakati wowote betri haina kitu, unaweza kuchaji na kebo ndogo ya USB.

Ilipendekeza: