جدول المحتويات:
- اللوازم
- الخطوة 1: قم بتحميل كود Arduino إلى ESP32-CAM
- الخطوة 2: ربط الأسلاك
- الخطوة 3: Python3 Script
- الخطوة 4: خادم MySQL
- الخطوة 5: خادم الويب
- الخطوة 6: غلاف مطبوع ثلاثي الأبعاد
- الخطوة 7: النتيجة النهائية
فيديو: درجة الحرارة والرطوبة باستخدام ESP32-DHT22-MQTT-MySQL-PHP: 7 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:37
أرادت صديقتي بيتًا زجاجيًا ، لذلك صنعتها واحدًا. لكنني أردت جهاز استشعار درجة الحرارة والرطوبة داخل البيت الزجاجي. لذلك ، بحثت في Google عن أمثلة وبدأت في التجريب.
كان استنتاجي أن جميع الأمثلة التي وجدتها لم تكن بالضبط ما أردت بناءه. لقد جمعت الكثير من الأجزاء الصغيرة من التعليمات البرمجية وجمعتها. لقد استغرق الأمر بعض الوقت لإنهاء عملي الأول لأن توثيق معظم الأمثلة كان صعبًا جدًا بالنسبة لي لفهمها أو أنها افترضت جزءًا يجب أن أعرفه ؟؟ لكن لم أكن أعرف شيئًا (حتى الآن) ☹
هذا هو السبب في أنني أبني هذا التدريب. برنامج تعليمي "من البداية وحتى النهاية" لكي يفهمه الجميع حرفياً. (على الأقل أتمنى؟)
كيف تعمل …
المنتج النهائي هو ESP32-CAM مع مستشعر DHT22 مرفق به والذي يحصل على الطاقة من بطارية 18650. يقرأ كل ثلاث دقائق درجة الحرارة والرطوبة ويرسل ذلك عبر شبكة WiFi إلى خادم MQTT خارجي ثم ينام (لمدة ثلاث دقائق) لاستخدام بطارية أقل حسب الحاجة
على خادم دبيان (والذي يمكن أن يكون أيضًا raspberry pi على ما أعتقد) لدي 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.0
- بطارية 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. ب. Duijnhouwer يونيو ، 8th 2020 * / #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // wifi password #define mqtt_server "*** SERVER_NAME ***" // server name or IP #define mqtt_user "*** MQTT_USER ***" // username #define mqtt_password "*** MQTT_PASSWORD ***" // password #define topic "glasshouse / dhtreadings "#define debug_topic" glasshouse / debug "// Topic for debugging / * تعريفات للنوم العميق * / #define uS_TO_S_FACTOR 1000000 / * عامل التحويل للثواني الدقيقة إلى الثواني * / #define TIME_TO_SLEEP 180 / * الوقت سينتقل ESP32 إلى وضع السكون لمدة 5 دقائق (بالثواني) * / bool debug = true ؛ // عرض رسالة السجل إذا كان صحيحًا # تعريف DHT22_PIN 14 dht DHT ؛ WiFiClient espClient ؛ عميل PubSubClient (espClient) ؛ بيانات شار [80] ؛ إعداد باطل () {Serial.begin (115200) ؛ setup_wifi () ، // الاتصال بعميل شبكة Wifi.setServer (mqtt_server ، 1883) ؛ // تكوين اتصال MQTT ، قم بتغيير المنفذ إذا لزم الأمر. إذا (! client.connected ()) {إعادة الاتصال () ؛ } // READ DATA int chk = DHT.read22 (DHT22_PIN) ؛ تعويم ر = دهت. درجة الحرارة ؛ تعويم ح = رطوبة دهت ؛ String dhtReadings = "{" temperature / ": \" "+ String (t) +" / "، \" humidity / ": \" "+ String (h) +" / "}"؛ dhtReadings.toCharArray (البيانات ، (dhtReadings.length () + 1)) ؛ إذا (تصحيح) {Serial.print ("درجة الحرارة:") ؛ Serial.print (t) ؛ Serial.print ("| الرطوبة:") ؛ Serial.println (ح) ؛ } // نشر القيم على موضوعات 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 () {delay (20)؛ Serial.println () ، Serial.print ("الاتصال بـ") ؛ Serial.println (wifi_ssid) ؛ WiFi.begin (wifi_ssid ، wifi_password) ؛ while (WiFi.status ()! = WL_CONNECTED) {delay (100) ؛ Serial.print (".") ؛ } Serial.println ("") ؛ Serial.println ("WiFi على ما يرام") ؛ Serial.print ("=> عنوان IP الجديد لـ ESP32 هو:")؛ Serial.print (WiFi.localIP ()) ؛ Serial.println ("") ؛ } // أعد الاتصال بشبكة wifi إذا فُقد الاتصال ، أعد الاتصال () {while (! client.connected ()) {Serial.print ("Connecting to MQTT broker…")؛ 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 Script
ينتقل نص Python3 إلى مكان يمكن للمستخدم الجذر الوصول إليه فيه.
استخدمت /root/scripts/glasshouse/glasshouse.py لهذا البرنامج النصي. محتويات نص Python هي:
# برنامج Python3 للاتصال بـ MQTT ، وقراءة القيم وكتابتها في MySQL
# # B. Duijnhouwer # يونيو ، 8th 2020 # # الإصدار: 1.0 # # import paho.mqtt.client مثل mqtt import json import pymysql pymysql.install_as_MySQLdb () استيراد MySQLdb من datetime import datetime db = MySQLdb.connect ("localhost"، "glasshouse"، "*** MYSQL_USERNAME ***"، "*** MYSQL_PASSWORD ***") cursor = db.cursor () broker_address = "localhost" #Broker address port = 1883 #Broker port user = "** * MQTT_USERNAME *** "#Connection username password =" *** MQTT_PASSWORD *** "#Connection password def on_connect (client ، userdata ، flags ، rc): # إعادة الاتصال عندما يتصل العميل بالطباعة الوسيطة (" متصل برمز النتيجة {0} ". format (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 () formatted_date = now.strftime ('٪ Y-٪ m-٪ d٪ H:٪ M:٪ 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 (temperature) + "،" + str (humidity) + "،٪ s)"، (formatted_date)) db.commit () print ("البيانات المستلمة والمستوردة في MySQL") وإلا: طباعة ("تجاوزت البيانات الحدود ولم يتم استيرادها في MySQL") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (المستخدم ، كلمة المرور = كلمة المرور) client.on_connect = on_connect # تعريف وظيفة رد الاتصال ل عميل اتصال ناجح.on_message = on_message # تحديد وظيفة رد الاتصال لاستلام عميل الرسالة.
لا تنسَ استبدال اسم مستخدم MySQL وكلمة المرور واسم مستخدم وكلمة مرور MQTT ببيانات الاعتماد الخاصة بك
يمكنك تشغيل البرنامج النصي كخدمة عن طريق إنشاء ملفين.
الأول هو "/etc/init/glasshouse.conf" بالمحتويات التالية:
تبدأ في مستوى التشغيل [2345]
توقف عند مستوى التشغيل [! 2345] exec /root/scripts/glasshouse/glasshouse.py
الثاني هو “/etc/systemd/system/multi-user.target.wants/glasshouse.service” بالمحتويات التالية:
[وحدة]
Description = خدمة مراقبة Glasshouse بعد = multi-user.target [الخدمة] النوع = إعادة تشغيل بسيطة = إعادة التشغيل دائمًا = 1 ExecStart = / usr / bin / python3 /root/scripts/glasshouse/glasshouse.py [تثبيت] WantedBy = متعدد المستخدمين.استهداف
يمكنك تشغيل هذا كخدمة باستخدام الأمر التالي:
systemctl تمكين البيت الزجاجي
وابدأ باستخدام:
systemctl بدء البيت الزجاجي
الخطوة 4: خادم MySQL
يجب عليك إنشاء قاعدة بيانات MySQL جديدة بها جدول واحد فقط.
رمز إنشاء الجدول هو:
إنشاء جدول "sensordata" (`idx` int (11) DEFAULT NULL،` temperature` float DEFAULT NULL، `humidity` float 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) ؛ # تنسيقات هذه while - loop ووضع جميع البيانات المسترجعة في طريقة ['timestamp'، 'temperature'، 'humidity']. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ row ["timestamp"]، 10، 6)؛ صدى "['". $ timestamp_rest. "'،". $ row ['temperature']. "،". $ row ['humidity']. "]،"؛ // echo "['". $ timestamp_rest. "'،". $ row ['temperature']. "،". $ row ['humidity']. "،". $ row ['heatindex ']. "]،"؛}؟>])؛ // Curved line var options = {title: 'temperature and humidity'، curveType: 'function'، legend: {position: 'bottom'}، hAxis: {slantedText: true، slantedTextAngle: 45}}؛ // Curved chart var chart = new google.visualization. LineChart (document.getElementById ('curve_chart')) ؛ رسم بياني (بيانات ، خيارات) ؛ } // قوس نهاية من drawChart //
الخطوة 6: غلاف مطبوع ثلاثي الأبعاد
بالنسبة للإسكان ، استخدمت علبتين منفصلتين ، أحدهما لـ ESP32-CAM و DHT22 معًا والآخر لدرع البطارية 18650.
الخطوة 7: النتيجة النهائية
تظهر النتيجة النهائية أيضًا في الصور أعلاه.
وعندما تكون البطارية فارغة ، يمكنك شحنها باستخدام كابل USB صغير.
موصى به:
M5STACK كيفية عرض درجة الحرارة والرطوبة والضغط على M5StickC ESP32 باستخدام Visuino - سهل التنفيذ: 6 خطوات
M5STACK كيفية عرض درجة الحرارة والرطوبة والضغط على M5StickC ESP32 باستخدام Visuino - سهل التنفيذ: في هذا البرنامج التعليمي سوف نتعلم كيفية برمجة ESP32 M5Stack StickC مع Arduino IDE و Visuino لعرض درجة الحرارة والرطوبة والضغط باستخدام مستشعر ENV (DHT12 ، BMP280 ، BMM150)
إنشاء - تنبيه - باستخدام - Ubidots-ESP32 + مستشعر درجة الحرارة والرطوبة: 9 خطوات
إنشاء - تنبيه - باستخدام - Ubidots-ESP32 + مستشعر درجة الحرارة والرطوبة: في هذا البرنامج التعليمي ، سنقوم بقياس بيانات درجة الحرارة والرطوبة المختلفة باستخدام مستشعر درجة الحرارة والرطوبة. ستتعلم أيضًا كيفية إرسال هذه البيانات إلى Ubidots. بحيث يمكنك تحليلها من أي مكان لتطبيق مختلف. أيضًا عن طريق إنشاء emai
قراءة درجة الحرارة باستخدام مستشعر درجة الحرارة LM35 مع Arduino Uno: 4 خطوات
قراءة درجة الحرارة باستخدام مستشعر درجة الحرارة LM35 مع Arduino Uno: مرحبًا يا رفاق في هذه التعليمات ، سوف نتعلم كيفية استخدام LM35 مع Arduino. Lm35 هو مستشعر لدرجة الحرارة يمكنه قراءة قيم درجة الحرارة من -55 درجة مئوية إلى 150 درجة مئوية. إنه جهاز ثلاثي الأطراف يوفر جهدًا تناظريًا يتناسب مع درجة الحرارة. عالية
جهاز مراقبة الطقس ESP32 Based M5Stack M5stick C مع DHT11 - مراقبة درجة الحرارة والرطوبة ومؤشر الحرارة على M5stick-C مع DHT11: 6 خطوات
جهاز مراقبة الطقس ESP32 Based M5Stack M5stick C مع DHT11 | مراقبة درجة الحرارة والرطوبة ومؤشر الحرارة على M5stick-C مع DHT11: مرحبًا يا رفاق ، في هذه التعليمات سوف نتعلم كيفية واجهة مستشعر درجة حرارة DHT11 مع m5stick-C (لوحة تطوير بواسطة m5stack) وعرضها على شاشة m5stick-C. لذلك في هذا البرنامج التعليمي سوف نقرأ درجة الحرارة والرطوبة وأمبير. الحرارة أنا
ميزان حرارة للطهي بمسبار درجة الحرارة ESP32 NTP مع تصحيح Steinhart-Hart وإنذار درجة الحرارة: 7 خطوات (بالصور)
ميزان حرارة للطهي بمسبار درجة الحرارة ESP32 NTP مع تصحيح Steinhart-Hart وإنذار درجة الحرارة: لا يزال في رحلة لإكمال & quot؛ المشروع القادم & quot ؛، & quot؛ ESP32 NTP ميزان حرارة للطهي بمسبار درجة الحرارة مع تصحيح Steinhart-Hart وإنذار درجة الحرارة & quot؛ هو Instructable يوضح كيف يمكنني إضافة مسبار درجة حرارة NTP ، بيزو ب