ዝርዝር ሁኔታ:

ESP32-DHT22-MQTT-MySQL-PHP ን በመጠቀም የሙቀት መጠን እና እርጥበት 7 ደረጃዎች
ESP32-DHT22-MQTT-MySQL-PHP ን በመጠቀም የሙቀት መጠን እና እርጥበት 7 ደረጃዎች

ቪዲዮ: ESP32-DHT22-MQTT-MySQL-PHP ን በመጠቀም የሙቀት መጠን እና እርጥበት 7 ደረጃዎች

ቪዲዮ: ESP32-DHT22-MQTT-MySQL-PHP ን በመጠቀም የሙቀት መጠን እና እርጥበት 7 ደረጃዎች
ቪዲዮ: ESP32 Send Temperature and Humidity Data to localhost XAMPP for Absolute Beginners Step by Step 2024, ሰኔ
Anonim
ESP32-DHT22-MQTT-MySQL-PHP ን በመጠቀም የሙቀት መጠን እና እርጥበት
ESP32-DHT22-MQTT-MySQL-PHP ን በመጠቀም የሙቀት መጠን እና እርጥበት

የሴት ጓደኛዬ የመስታወት ቤት ስለፈለገች እሷን አንድ አደረግኳት። ነገር ግን በመስታወት ቤት ውስጥ የሙቀት እና እርጥበት ዳሳሽ ፈልጌ ነበር። ስለዚህ ፣ ምሳሌዎችን ጎግል አድርጌ ሙከራ ማድረግ ጀመርኩ።

የእኔ መደምደሚያ እኔ ያገኘኋቸው ሁሉም ምሳሌዎች በትክክል መገንባት የፈለግኩት አልነበሩም። ብዙ የኮድ ትናንሽ ክፍሎችን ያዝኩ እና አጣመርኳቸው። የአብዛኞቹን ምሳሌዎች ሰነዶች ለእኔ ለመረዳት አስቸጋሪ ስለሆኑ ወይም እኔ ማወቅ ያለብኝን ክፍል ስለወሰዱ የመጀመሪያውን የሥራ ግንባታዬን ለመጨረስ ብዙ ጊዜ ፈጅቶብኛል? እኔ ግን ምንም አላውቅም (ገና) ☹

ለዚህ ነው ይህንን አስተማሪ የምገነባው። ቃል በቃል ሁሉም እንዲረዳ “መጀመሪያ-እስከ መጨረሻ” አጋዥ ስልጠና። (ቢያንስ ተስፋ አደርጋለሁ?)

እንዴት እንደሚሰራ …

የመጨረሻው ምርት ከ 18650 ባትሪ ኃይል የሚያገኝበት የዲኤችቲ 22 ዳሳሽ ያለው ESP32-CAM ነው። በየሶስት ደቂቃዎች ሙቀቱን እና እርጥበቱን ያነባል እና ይህንን በ WiFi ላይ ወደ ውጫዊ MQTT አገልጋይ ይልካል እና እንደ አስፈላጊነቱ አነስተኛ ባትሪ ለመጠቀም ይተኛል (ለሶስት ደቂቃዎች)።

በዴቢያን አገልጋይ ላይ ፣ (እኔ ደግሞ እገምታለሁ እንጆሪ ፓይ ሊሆን ይችላል) Python3 ፣ MQTT አገልጋይ ፣ MySQL አገልጋይ እና የድር አገልጋይ አለኝ።

የ Python3 ስክሪፕት እንደ አገልግሎት ይሠራል እና የ MQTT መልእክት በተቀበለ ቁጥር የቀደመውን የግቤቶች ብዛት (የመረጃ ጠቋሚ ቁጥር) ይቆጥራል እና ይህንን በአንድ ይጨምራል። ከዚያ የሙቀት መጠኑን እና የእርጥበት እሴቶችን ከ MQTT መልእክት ያነባል። የሐሰት እሴቶችን ይፈትሻል እና እሴቶቹ ትክክል በሚሆኑበት ጊዜ እሴቶቹን ከአዲሱ የመረጃ ጠቋሚ ቁጥር እና የአሁኑን ቀን እና ሰዓት ጋር ወደ MySQL አገልጋይ ይልካል።

የድር አገልጋዩ እሴቶቹን ከ MySQL አገልጋዩ የሚያነብ እና የ Google ገበታዎችን በመጠቀም ከእሱ ጥሩ ግራፍ የሚያደርግ የ PHP ስክሪፕት አለው። (ለምሳሌ)

አቅርቦቶች

እኔ የተጠቀምኳቸው ክፍሎች የሚከተሉት ናቸው

  • ESP32-Cam
  • ውጫዊ አንቴና
  • AM2302 DHT22 ዳሳሽ (ይህ አብሮገነብ ተከላካይ አለው ፣ ስለሆነም ሶስት ገመዶች ብቻ ያስፈልግዎታል)

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

  • 18650 የባትሪ ጋሻ v3
  • 18650 ባትሪ (NCR18650B)
  • አሮጌ ማይክሮ ዩኤስቢ ገመድ (ESP32 ን ከባትሪ ጋሻ ጋር ለማገናኘት)
  • አንዳንድ አጭር ዝላይ ሽቦዎች

ተጨማሪ ያስፈልጋል

  • ዩኤስቢ ወደ TTL አያያዥ (ስዕል)

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

  • የመሸጫ ብረት
  • 3 ዲ አታሚ (ለቤቶች መያዣ ብቻ ያስፈልጋል)

ደረጃ 1 የአርዲኖን ኮድ ወደ ESP32-CAM ይስቀሉ

የአርዲኖን ኮድ ወደ ESP32-CAM ይስቀሉ
የአርዲኖን ኮድ ወደ ESP32-CAM ይስቀሉ

ስለዚህ እንጀምር!

የአርዲኖን ኮድ ወደ ESP32-CAM ለመስቀል ፣ ከላይ ያሉትን መርሃግብሮች በመጠቀም የ USBtoTTL ማገናኛን ከ ESP32 ጋር ማገናኘት አለብዎት።

የአርዱዲኖ ኮድ የሚከተለው ነው-

/*የሙቀት መጠንን እና እርጥበትን ከ DHT22 ዳሳሽ ለማንበብ ትንሽ ፕሮግራም እና

ወደ MQTT ያስተላልፉ። ለ. "*** SERVER_NAME ***" // የአገልጋይ ስም ወይም አይፒ #ዲፊን mqtt_user”*** MQTT_USER ***” // የተጠቃሚ ስም #define mqtt_password”*** MQTT_PASSWORD ***” // የይለፍ ቃል #ገላጭ ርዕስ”የመስታወት ቤት /dhtreadings "#define debug_topic" glasshouse /debug "// ርዕስ ለማረም /* ለ ጥልቅ እንቅልፍ ትርጓሜዎች* / #define uS_TO_S_FACTOR 1000000 /* የመቀየሪያ ምክንያት ለጥቂት ሰከንዶች ወደ ሰከንዶች* / #ተለይቶ TIME_TO_SLEEP 180 /* ሰዓት ESP32 ይተኛል። ለ 5 ደቂቃዎች (በሰከንዶች ውስጥ) */ bool ማረሚያ = እውነት; // እውነት ከሆነ #የምስል DHT22_PIN 14 dht DHT ከሆነ የምዝግብ ማስታወሻውን ያሳዩ። WiFiClient espClient; የ PubSubClient ደንበኛ (ደንበኛ); የቻር መረጃ [80]; ባዶነት ማዋቀር () {Serial.begin (115200); setup_wifi (); // ከ Wifi አውታረ መረብ ደንበኛ ጋር ይገናኙ። ቅንብር አገልጋይ (mqtt_server ፣ 1883); // የ MQTT ግንኙነትን ያዋቅሩ ፣ አስፈላጊ ከሆነ ወደብ ይለውጡ። ከሆነ (! client.connected ()) {ዳግም ማገናኘት (); } // መረጃን ያንብቡ int chk = DHT.read22 (DHT22_PIN) ፤ ተንሳፋፊ t = DHT.temperature; ተንሳፋፊ h = DHT. እርጥበት; ሕብረቁምፊ dhtReadings = "{" temperature / ": \" " + String (t) +" / ", \" እርጥበት / ": \" " + String (h) +" / "}"; dhtReadings.toCharArray (ውሂብ ፣ (dhtReadings.length () + 1))); ከሆነ (አርም) {Serial.print (“የሙቀት መጠን”); Serial.print (t); Serial.print ("| እርጥበት:"); Serial.println (ሸ); } // እሴቶችን ወደ MQTT ርዕሶች ደንበኛ ያትሙ (ርዕስ ፣ ውሂብ); // በርዕሱ ላይ ንባቦችን ያትሙ (የመስታወት ቤት/dhtreadings) ከሆነ (አርም) {Serial.println (“ንባቦች ወደ MQTT ተልከዋል።”) ፤ } የእንቅልፍ_መነቃቃት_አቶሜር_መነቃቃት (TIME_TO_SLEEP * uS_TO_S_FACTOR) ፤ // ወደ እንቅልፍ ይሂዱ Serial.println ("ለእያንዳንዱ ለመተኛት ESP32 ን ያዋቅሩ" + ሕብረቁምፊ (TIME_TO_SLEEP) + "ሰከንዶች"); Serial.println (“አሁን እንደ ተለመደው መተኛት”); esp_deep_sleep_start (); } // ግንኙነት ወደ wifi ባዶነት setup_wifi () {መዘግየት (20) ፤ Serial.println (); Serial.print ("ወደ ማገናኘት"); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid ፣ wifi_password); ሳለ (WiFi.status ()! = WL_CONNECTED) {መዘግየት (100); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi ደህና ነው"); Serial.print ("=> ESP32 አዲስ የአይፒ አድራሻ:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // ግንኙነት ከጠፋ ባዶ ግንኙነት እንደገና () (ሳለ (! Client.connected ()) {Serial.print ("ከ MQTT ደላላ ጋር በመገናኘት ላይ …") ከ wifi ጋር ይገናኙ። ከሆነ (client.connect ("ESP32Client" ፣ mqtt_user ፣ mqtt_password)) {Serial.println ("እሺ") ፤ } ሌላ {Serial.print ("[ስህተት] አልተገናኘም"); Serial.print (client.state ()); Serial.println ("እንደገና ከመሞከርዎ በፊት 5 ሰከንዶች ይጠብቁ"); መዘግየት (5000); }}} ባዶነት loop () {}

እና እንደገና ፣ ምስክርነቶችን በእራስዎ ምስክርነቶች መተካትዎን አይርሱ

ደረጃ 2: ሽቦ አልባ ያድርጉ

ሽቦ አውጣ!
ሽቦ አውጣ!

ለኃይል ፣ እኔ የዩኤስቢ-ኤ ማያያዣውን ያቋረጥኩበትን አሮጌ የዩኤስቢ ገመድ እጠቀም ነበር። በዩኤስቢ ገመድ ውስጥ አራት ገመዶች አሉ ፣ እኛ ጥቁር እና ቀይ ብቻ እንፈልጋለን።

ስለዚህ ፣ ከላይ ባለው መርሃግብር መሠረት ሁሉንም ነገር ያገናኙ።

ደረጃ 3 Python3 ስክሪፕት

የ Python3 ስክሪፕት ለዋና ተጠቃሚ ተደራሽ በሆነ ቦታ ውስጥ ይሄዳል።

ለዚህ ስክሪፕት/root/scripts/glasshouse/glasshouse.py ን ተጠቀምኩ። የፓይዘን ስክሪፕት ይዘቶች -

ከ ‹MQTT ›ጋር ለመገናኘት ፣ እሴቶችን ያንብቡ እና ወደ MySQL ይፃፉ # Python3 ስክሪፕት

# # ለ Duijnhouwer # ሰኔ ፣ 8 ኛ ቀን 2020 # # ስሪት 1.0 "glasshouse" ፣ "*** MYSQL_USERNAME ***" ፣ "*** MYSQL_PASSWORD ***") ጠቋሚ = db.cursor () broker_address = "localhost" #የብሮከር አድራሻ ወደብ = 1883 #የብሮከር ወደብ ተጠቃሚ = "** *MQTT_USERNAME *** " #የግንኙነት የተጠቃሚ ስም ይለፍ ቃል =" *** MQTT_PASSWORD *** " #የግንኙነት የይለፍ ቃል def on_connect (ደንበኛ ፣ የተጠቃሚ ውሂብ ፣ ባንዲራዎች ፣ አርሲ) ፦ #ደንበኛው ከደላላ ህትመት ጋር (" ተገናኝቷል) በውጤት ኮድ {0} "። ቅርጸት (str (rc))) # የግንኙነት ሙከራ ደንበኛ የህትመት ውጤት። የደንበኝነት ምዝገባ (" glasshouse/dhtreadings/ # ") def on_message (client, userdata ፣ msg): # የህትመት መልዕክት ከአገልጋዩ ደርሷል። cursor. መ:%S ') የክፍያ ጭነት = json.loads (msg.payload.decode (' utf-8 ')) ህትመት ("አዲስ ረድፍ:"+str (newrow)) ሙቀት = ተንሳፋፊ (የክፍያ ጭነት ["ሙቀት"]) እርጥበት = ተንሳፋፊ (የክፍያ ጭነት ["እርጥበት”]) ህትመት ("የሙቀት መጠን"+str (የሙቀት መጠን)) ህትመት ("እርጥበት ፦"+str (እርጥበት)) ህትመት ("DateTime:"+str (formatted_date)) ከሆነ ((ሙቀት) > -20) እና (የሙቀት መጠን = 0) እና (እርጥበት <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx ፣ ሙቀት ፣ እርጥበት ፣ የጊዜ ማህተም) እሴቶች ("+str (newrow)+","+str (ሙቀት)+","+str (እርጥበት)+", %s)", (formatted_date)) db.commit () ህትመት ("በ MySQL ውስጥ የተቀበለው እና ከውጭ የመጣ") ሌላ: ህትመት ("ውሂብ ገደቦችን አል andል እና በ MySQL ውስጥ አልገባም") ደንበኛ = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (user, password = password) client.on_connect = on_connect # የጥሪ መልሶ ማግኛ ተግባርን ይግለጹ ለ የተሳካ ግንኙነት ደንበኛ። ላይ_መልእክት = በሜሴጅ # የመልዕክት ደንበኛን ለመቀበል የመደወልን ተግባር ይግለጹ።

የ 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 [አገልግሎት] ዓይነት = ቀላል ዳግም አስጀምር = ሁልጊዜ ዳግም አስጀምርSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [ጫን] WantedBy = ባለብዙ ተጠቃሚ.አላማ

የሚከተለውን ትዕዛዝ በመጠቀም ይህንን እንደ አገልግሎት እንዲሠራ ማድረግ ይችላሉ-

systemctl የመስታወት ቤትን ያንቁ

እና በመጠቀም ይጀምሩ:

systemctl የመነሻ ቤት ይጀምሩ

ደረጃ 4: MySQL አገልጋይ

በውስጡ አንድ ጠረጴዛ ብቻ የያዘ አዲስ የ MySQL ዳታቤዝ መፍጠር አለብዎት።

ሰንጠረ creatingን ለመፍጠር ኮዱ የሚከተለው ነው-

ሰንጠረዥ ፍጠር 'sensordata` ('idx` int (11) DEFAULT NULL ፣' ሙቀት 'ተንሳፋፊ DEFAULT NULL ፣' እርጥበት 'ተንሳፋፊ DEFAULT NULL ፣' timestamp` datetime DEFAULT NULL) ENGINE = InnoDB DEFAULT CHARSET = 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); # በዚህ ጊዜ - የሉፕ ቅርፀቶችን እና ሁሉንም የተገኘ መረጃ ወደ ['timestamp' ፣ 'ሙቀት' ፣ 'እርጥበት'] መንገድ ያስገቡ። ሳለ ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ ረድፍ ["timestamp"] ፣ 10, 6) ፤ "" '' ''. $ timestamp_rest. '', '' "],"; // echo "['". $ timestamp_rest. "', '. ']. "],";}?>]); // የተጠማዘዘ መስመር var አማራጮች = {ርዕስ ፦ 'ሙቀትና እርጥበት' ፣ curveType: 'function' ፣ አፈ ታሪክ ፦ {አቋም ፦ 'ታች'} ፣ hAxis: {slantedText: true, slantedTextAngle: 45}}; // የተጠማዘዘ ገበታ var ገበታ = አዲስ google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (ውሂብ ፣ አማራጮች); } // ቅንፍ ከ DraChart // ጨርስ

ደረጃ 6 - 3 ዲ የታተመ መኖሪያ ቤት

ለመኖሪያ ቤቱ ፣ ሁለት የተለያዩ ቤቶችን ፣ አንዱን ለ ESP32-CAM እና DHT22 አንድ ላይ እና አንዱን ለ 18650 የባትሪ ጋሻ እጠቀም ነበር።

ደረጃ 7: የመጨረሻው ውጤት

የመጨረሻው ውጤት!
የመጨረሻው ውጤት!
የመጨረሻው ውጤት!
የመጨረሻው ውጤት!
የመጨረሻው ውጤት!
የመጨረሻው ውጤት!
የመጨረሻው ውጤት!
የመጨረሻው ውጤት!

የመጨረሻው ውጤት ከላይ ባሉት ሥዕሎች ውስጥም ይታያል።

እና ባትሪው ባዶ በሆነ ቁጥር በትንሽ የዩኤስቢ ገመድ ማስከፈል ይችላሉ።

የሚመከር: