תוכן עניינים:
- אספקה
- שלב 1: העלה את קוד ה- Arduino ל- ESP32-CAM
- שלב 2: התחבר
- שלב 3: סקריפט Python3
- שלב 4: שרת MySQL
- שלב 5: שרת אינטרנט
- שלב 6: דיור בתלת מימד
- שלב 7: התוצאה הסופית
וִידֵאוֹ: טמפרטורה ולחות באמצעות ESP32-DHT22-MQTT-MySQL-PHP: 7 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:13
חברה שלי רצתה חממה, אז הכנתי לה אחת. אבל רציתי חיישן טמפרטורה ולחות בתוך החממה. אז, חיפשתי דוגמאות והתחלתי להתנסות.
המסקנה שלי הייתה שכל הדוגמאות שמצאתי הן לא בדיוק מה שאני רוצה לבנות. תפסתי הרבה חלקי קוד קטנים ושילבתי אותם. לקח לי די הרבה זמן לסיים את עבודת הבנייה הראשונה שלי מכיוון שהתיעוד של רוב הדוגמאות היה קשה מדי בשביל להבין או שהם הניחו חלק שאני צריך לדעת ?? אבל לא ידעתי כלום (עדיין) ☹
לכן אני בונה את זה להוראה. מדריך "מתחיל עד הסוף" שכל אחד יכול להבין אותו פשוטו כמשמעו. (לפחות אני מקווה?)
איך זה עובד …
המוצר הסופי הוא ESP32-CAM עם חיישן DHT22 המחובר אליו שמספק את הכוח שלו מסוללה של 18650. כל שלוש דקות הוא קורא את הטמפרטורה והלחות ושולח את זה באמצעות WiFi לשרת MQTT חיצוני ואז הולך לישון (במשך שלוש דקות) כדי להשתמש בפחות סוללה לפי הצורך
בשרת Debian, (שיכול להיות גם פאי פטל אני מניח) יש לי python3, שרת MQTT, שרת MySQL ושרת אינטרנט
סקריפט python3 פועל כשירות ובכל פעם שהוא מקבל הודעת MQTT, הוא סופר את מספר הערכים הקודם (מספר אינדקס) ומגדיל זאת באחד. לאחר מכן הוא קורא את ערכי הטמפרטורה והלחות מהודעת MQTT. הוא בודק אם יש ערכים כוזבים ובכל פעם שהערכים נכונים, הוא שולח את הערכים יחד עם מספר האינדקס החדש והתאריך והשעה הנוכחיים לשרת MySQL
לשרת האינטרנט יש סקריפט PHP שקורא את הערכים משרת MySQL ויוצר ממנו גרף נחמד באמצעות תרשימי Google. (דוגמא)
אספקה
החלקים בהם השתמשתי הם כדלקמן:
- 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%…
- מלחם
- מדפסת תלת מימד (נחוצה רק למארז דיור)
שלב 1: העלה את קוד ה- Arduino ל- ESP32-CAM
אז בואו נתחיל!
כדי להעלות את קוד ה- Arduino ל- ESP32-CAM, עליך לחבר את מחבר USBtoTTL ל- ESP32 באמצעות התרשימים שלמעלה.
קוד הארדואינו הוא:
/*רק תוכנית קטנה לקריאת הטמפרטורה והלחות מחיישן DHT22 ו
העבירו אותו ל- MQTT. B. Duijnhouwer יוני, 8th 2020*/#include #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // סיסמת wifi #הגדר mqtt_server "*** SERVER_NAME ***" // שם שרת או כתובת IP #הגדר mqtt_user "*** MQTT_USER ***" // שם משתמש #הגדר mqtt_password "*** MQTT_PASSWORD ***" // סיסמא #הגדר נושא "חממה /dhtreadings "#define debug_topic" חממה /איתור באגים "// נושא לניפוי באגים /* הגדרות עבור deepsleep* /#define uS_TO_S_FACTOR 1000000 /* גורם המרה למיקרו שניות לשניות* /#define TIME_TO_SLEEP 180 /* זמן ESP32 ילך לישון למשך 5 דקות (בשניות) */ bool debug = true; // הצג הודעת יומן אם True #define DHT22_PIN 14 dht DHT; WiFiClient espClient; לקוח PubSubClient (espClient); נתוני צ'אר [80]; הגדרת חלל () {Serial.begin (115200); setup_wifi (); // התחבר לרשת Wifi client.setServer (mqtt_server, 1883); // הגדר חיבור MQTT, שנה יציאה במידת הצורך. אם (! client.connected ()) {התחבר מחדש (); } // READ DATA int chk = DHT.read22 (DHT22_PIN); צף t = DHT.temperature; לצוף h = DHT. לחות; String dhtReadings = "{" טמפרטורה / ": \" " + מחרוזת (t) +" / ", \" לחות / ": \" " + מחרוזת (ח) +" / "}"; dhtReadings.toCharArray (נתונים, (dhtReadings.length () + 1)); if (באגים) {Serial.print ("טמפרטורה:"); Serial.print (t); Serial.print ("| לחות:"); Serial.println (ח); } // פרסם ערכים לנושאי MQTT client.publish (נושא, נתונים); // פרסם קריאות בנושא (glasshouse/dhtreadings) if (debug) {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); בעוד (WiFi.status ()! = WL_CONNECTED) {עיכוב (100); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi תקין"); Serial.print ("=> ESP32 כתובת IP חדשה היא:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // התחבר מחדש ל- wifi אם החיבור מתאבד, התחבר מחדש () {while (! Client.connected ()) {Serial.print ("מתחבר לברוקר MQTT …"); if (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("אישור"); } else {Serial.print ("[שגיאה] לא מחובר:"); Serial.print (client.state ()); Serial.println ("המתן 5 שניות לפני ניסיון חוזר"); עיכוב (5000); }}} לולאת חלל () {}
ושוב, אל תשכח להחליף את האישורים בתעודות משלך
שלב 2: התחבר
לצורך העוצמה השתמשתי בכבל USB ישן שניתקתי ממנו את מחבר ה- USB-A. יש ארבעה חוטים בכבל ה- USB, אנחנו צריכים רק את השחור והאדום.
לכן, חבר הכל לפי לוח הזמנים שלמעלה.
שלב 3: סקריפט Python3
סקריפט Python3 נכנס למקום בו הוא נגיש למשתמש הבסיסי.
השתמשתי ב- /root/scripts/glasshouse/glasshouse.py עבור סקריפט זה. התוכן של סקריפט הפיתון הוא:
# סקריפט Python3 להתחבר ל- MQTT, לקרוא ערכים ולכתוב אותם ל- MySQL
# # B. Duijnhouwer # יוני, 8th 2020 # # גרסה: 1.0 # # יבוא paho.mqtt.client כמו mqtt יבוא json יבוא pymysql pymysql.install_as_MySQLdb () ייבא MySQLdb מ- datetime import datetime db = MySQLdb.connect ("localhost", "חממה", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") cursor = db.cursor () broker_address = "localhost" #יציאת כתובת ברוקר = 1883 #משתמש יציאת ברוקר = "** *MQTT_USERNAME *** "סיסמת שם משתמש #חיבור =" *** MQTT_PASSWORD *** " #סיסמת חיבור מוגדרת on_connect (לקוח, נתוני משתמש, דגלים, rc): #החזרה כאשר הלקוח מתחבר לדפוס המתווך (" מחובר עם קוד התוצאה {0} ". פורמט (str (rc))) # תוצאת הדפסה של ניסיון חיבור client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (client, userdata, msg): # החזרה מתי הודעת PUBLISH מתקבלת מהשרת. cursor.execute ("בחר * מתוך sensordata") numrows = int (cursor.rowcount) newrow = numrows + 1 עכשיו = datetime.now () format_date = now.strftime ('%Y-%m-%d%H:% M:%S ') payload = json.loads (msg.payload.decode (' utf-8 ')) print ("שורה חדשה:"+str (newrow)) טמפרטורה = float (מטען ["טמפרטורה"]) לחות = float (מטען ["לחות"]) הדפסה ("טמפרטורה:"+סטר (טמפרטורה)) הדפסה ("לחות:"+סטר (לחות)) הדפסה ("DateTime:"+str (format_date)) if ((טמפרטורה > -20) ו- (טמפרטורה = 0) ו- (לחות <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, טמפרטורה, לחות, חותמת זמן) VALUES ("+str (newrow)+","+str (טמפרטורה)+","+str (לחות)+", %s)", (format_date)) db.commit () print ("נתונים שהתקבלו ויובאו ב- MySQL") אחר: print ("הנתונים חרגו מהמגבלות ואינם מיובאים ב- MySQL") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (משתמש, סיסמא = סיסמה) client.on_connect = on_connect # הגדר פונקציית התקשרות חוזרת ל חיבור מוצלח client.on_message = on_message # הגדר פונקציית התקשרות חוזרת לקבלת הודעה client.connect (broker_address, port = port) #connect to broker client.loop_forever () # התחל רשת שד
אל תשכח להחליף את שם המשתמש והסיסמה של MySQL ואת שם המשתמש והסיסמה של MQTT לאישורים שלך
אתה יכול לגרום לתסריט לפעול כשירות על ידי יצירת שני קבצים.
הראשון הוא "/etc/init/glasshouse.conf" עם התכנים הבאים:
התחל על רמה רמה [2345]
עצור ב- runlevel [! 2345] exec /root/scripts/glasshouse/glasshouse.py
השני הוא /etc/systemd/system/multi-user.target.wants/glasshouse.service” עם התכנים הבאים:
[יחידה]
Description = Service Monitoring Glasshouse After = multi-user.target [Service] Type = simple Restart = always RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [התקן] WantedBy = ריבוי משתמשים.יַעַד
אתה יכול להריץ את זה כשירות באמצעות הפקודה הבאה:
systemctl לאפשר חממה
והתחל אותו באמצעות:
חממת systemctl start
שלב 4: שרת MySQL
עליך ליצור מסד נתונים חדש של MySQL ובו רק טבלה אחת.
הקוד ליצירת הטבלה הוא:
צור טבלה `sensordata` (`idx` int (11) DEFAULT NULL,` temperature` float DEFAULT NULL, `לחות` מצוף DEFAULT NULL,` חותם` 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 ('current', {'packages': ['corechart']}); google.charts.setOnLoadCallback (drawChart); function drawChart () {var data = google.visualization.arrayToDataTable ([// ['חותמת זמן', 'טמפרטורה', 'לחות', 'מדד חום'], ['חותמת זמן', 'טמפרטורה', 'לחות'], שאילתה ($ sql); # This while - פורמטים בלולאה והכניסו את כל הנתונים שאוחזרו לאתר ['חותמת זמן', 'טמפרטורה', 'לחות']. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ row ["timestamp"], 10, 6); הד "['". $ timestamp_rest. "',". $ row ['temperature']. ",". $ row ['לחות']. "],"; // echo "['". $ timestamp_rest. "',". $ row ['temperature']. ",". $ row ['לחות']. ",". $ row ['heatindex ']. "],";}?>]); // אפשרויות קו עוקל var = {title: 'טמפרטורה ולחות', curveType: 'function', legend: {position: 'bottom'}, hAxis: {slantedText: true, slantedTextAngle: 45}}; // תרשים מעוגל var chart = new google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (נתונים, אפשרויות); } // סוגר סיום מתוך drawChart //
שלב 6: דיור בתלת מימד
עבור הדיור השתמשתי בשני בתי מגורים נפרדים, אחד ל- ESP32-CAM ו- DHT22 יחד ואחד למגן הסוללה מ -18650.
שלב 7: התוצאה הסופית
התוצאה הסופית מוצגת גם בתמונות למעלה.
ובכל פעם שהסוללה ריקה, אתה יכול לטעון אותה באמצעות כבל USB מיני.
מוּמלָץ:
לוח NodeMCU Lua זול 6 $ עם טמפרטורת ולחות רישום של טמפרטורה ולחות, סטטיסטיקות Wifi ומובייל: 4 שלבים
NodeMCU Lua לוח זול של 6 $ עם רישום טמפרטורות ולחות של MicroPython, סטטיסטיקות Wifi וסלולר: זוהי תחנת מזג אוויר עננית בעצם, תוכל לבדוק נתונים בטלפון שלך או להשתמש בטלפון כלשהו כצג חי עם מכשיר NodeMCU תוכל לרשום נתוני טמפרטורה ולחות בחוץ בחדר, בחממה, במעבדה, בחדר הקירור או בכל מקומות אחרים שהושלמו
מאוורר קירור אוטומטי באמצעות סרוו וחיישן טמפרטורה ולחות DHT11 עם Arduino: 8 שלבים
מאוורר קירור אוטומטי באמצעות סרוו וחיישן טמפרטורה ולחות DHT11 עם Arduino: במדריך זה נלמד כיצד להתחיל & סובב מאוורר כשהטמפרטורה עולה מעל רמה מסוימת
ניטור טמפרטורה ולחות באמצעות NODE MCU ו- BLYNK: 5 שלבים
ניטור טמפרטורה ולחות באמצעות NODE MCU ו- BLYNK: היי חבר'ה במדריך זה ניתן ללמוד כיצד להשיג טמפרטורה ולחות אטמוספרה באמצעות חיישן טמפרטורה ולחות DHT11 באמצעות Node MCU ו- BLYNK
נקודת גישה ESP8266 NodeMCU (שרת אינטרנט) עבור שרת אינטרנט עם חיישן טמפרטורה DT11 והדפסת טמפרטורה ולחות בדפדפן: 5 שלבים
נקודת גישה ESP8266 NodeMCU (AP) עבור שרת אינטרנט עם חיישן טמפרטורה DT11 וטמפרטורת הדפסה ולחות בדפדפן: שלום חברים ברוב הפרויקטים בהם אנו משתמשים ב- ESP8266 וברוב הפרויקטים אנו משתמשים ב- ESP8266 כשרת אינטרנט כך שניתן יהיה לגשת לנתונים ב כל מכשיר באמצעות wifi על ידי גישה לשרת האינטרנט המתארח על ידי ESP8266 אך הבעיה היחידה היא שאנחנו צריכים נתב עובד עבור
שרת אינטרנט טמפרטורה ולחות של Esp32 באמצעות PYTHON & Zerynth IDE: 3 שלבים
שרת אינטרנט לטמפרטורה ולחות של Esp32 באמצעות PYTHON & Zerynth IDE: Esp32 הוא בקר מיקרו מפואר, הוא חזק בדיוק כמו Arduino אבל אפילו טוב יותר! יש לו קישוריות Wifi, המאפשרת לך לפתח פרויקטים של IOT בזול ובקלות. אבל לעבוד עם Esp מכשירים מתסכלים, ראשית הוא לא יציב, Secon