فهرست مطالب:

دما و رطوبت با استفاده از ESP32-DHT22-MQTT-MySQL-PHP: 7 مرحله
دما و رطوبت با استفاده از ESP32-DHT22-MQTT-MySQL-PHP: 7 مرحله

تصویری: دما و رطوبت با استفاده از ESP32-DHT22-MQTT-MySQL-PHP: 7 مرحله

تصویری: دما و رطوبت با استفاده از ESP32-DHT22-MQTT-MySQL-PHP: 7 مرحله
تصویری: نمایش دما و رطوبت با استفاده از NODEJS 2024, جولای
Anonim
دما و رطوبت با استفاده از ESP32-DHT22-MQTT-MySQL-PHP
دما و رطوبت با استفاده از ESP32-DHT22-MQTT-MySQL-PHP

دوست دخترم یک گلخانه می خواست ، بنابراین من آن را ساختم. اما من یک حسگر دما و رطوبت در داخل گلخانه می خواستم. بنابراین ، برای مثالها در گوگل جستجو کردم و شروع به آزمایش کردم.

نتیجه گیری من این بود که همه مثالهایی که پیدا کردم دقیقاً همان چیزی نبود که من می خواستم بسازم. من قسمت های زیادی از کد را گرفتم و آنها را ترکیب کردم. زمان زیادی طول کشید تا اولین کار خود را به پایان برسانم زیرا درک اسناد اکثر نمونه ها برای من بسیار دشوار بود یا آنها قسمتی را تصور می کردند که باید بدانم ؟؟ اما من چیزی نمی دانستم (هنوز) ☹

به همین دلیل است که من این آموزش را می سازم. یک آموزش "از ابتدا تا انتها" که به معنای واقعی کلمه برای همه قابل درک است. (حداقل امیدوارم؟)

چگونه کار می کند…

محصول نهایی یک ESP32-CAM با سنسور DHT22 متصل به آن است که از باتری 18650 قدرت می گیرد. هر سه دقیقه دما و رطوبت را می خواند و این را از طریق WiFi به سرور MQTT خارجی ارسال می کند و سپس به خواب می رود (به مدت سه دقیقه) تا از باتری کمتر در صورت نیاز استفاده کند

در یک سرور دبیان ، (که حدس می زنم تمشک pi باشد) من python3 ، یک سرور MQTT ، یک سرور MySQL و یک وب سرور دارم

اسکریپت python3 به عنوان یک سرویس اجرا می شود و هر زمان که یک پیام MQTT دریافت می کند ، تعداد ورودی های قبلی (شماره فهرست) را شمارش می کند و این مورد را یک افزایش می دهد. سپس مقادیر دما و رطوبت را از پیام MQTT می خواند. مقادیر غلط را بررسی می کند و هر زمان که مقادیر درست باشند ، مقادیر را به همراه شماره فهرست جدید و تاریخ و زمان فعلی به سرور MySQL ارسال می کند

سرور وب دارای یک اسکریپت PHP است که مقادیر را از سرور MySQL می خواند و با استفاده از نمودارهای Google نمودار خوبی از آن ایجاد می کند. (مثال)

تدارکات

قطعاتی که استفاده کردم موارد زیر است:

  • ESP32-CAM (دلیل استفاده از نسخه 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 بارگذاری کنید

کد آردوینو را در ESP32-CAM بارگذاری کنید
کد آردوینو را در ESP32-CAM بارگذاری کنید

بنابراین بیایید شروع کنیم!

برای بارگذاری کد Arduino در ESP32-CAM ، باید اتصال USBtoTTL را به ESP32 با استفاده از شماتیک بالا متصل کنید.

کد آردوینو این است:

/*فقط یک برنامه کوچک برای خواندن دما و رطوبت از سنسور DHT22 و

آن را به MQTT منتقل کنید. B. Duijnhouwer ژوئن ، 8th 2020*/ #شامل #شامل #شامل #تعریف #wifi_ssid "*** WIFI_SSID ***" // wifi ssid #deifine wifi_password "*** WIFI_PASSWORD ***" // wifi password #define mqtt_server "*** SERVER_NAME ***" // نام سرور یا IP #تعریف mqtt_user "*** MQTT_USER ***" // نام کاربری #تعریف mqtt_password "*** MQTT_PASSWORD ***" // رمز عبور #تعریف موضوع "گلخانه /dhtreadings "#debine debug_topic" glasshouse /debug "// موضوع برای اشکال زدایی /* تعاریف برای sleepsleep* / #تعریف uS_TO_S_FACTOR 1000000 /* ضریب تبدیل برای ثانیه به ثانیه* / #تعریف TIME_TO_SLEEP 180 /* زمان ESP32 به خواب می رود به مدت 5 دقیقه (در ثانیه) */ bool debug = true؛ // نمایش پیام گزارش در صورت True #define DHT22_PIN 14 dht DHT ؛ WiFiClient espClient ؛ مشتری PubSubClient (espClient) ؛ داده های char [80]؛ void setup () {Serial.begin (115200)؛ setup_wifi ()؛ // اتصال به Wifi network client.setServer (mqtt_server ، 1883) ؛ // پیکربندی اتصال MQTT ، در صورت نیاز پورت را تغییر دهید. if (! client.connected ()) {اتصال مجدد ()؛ } // READ DATA int chk = DHT.read22 (DHT22_PIN)؛ شناور t = DHT.temperature؛ شناور h = DHT. رطوبت ؛ String dhtReadings = "{" دما / ": \" " + رشته (t) +" / "، \" رطوبت / ": \" " + رشته (h) +" / "}"؛ dhtReadings.toCharArray (داده ، (dhtReadings.length () + 1)) ؛ if (اشکال زدایی) {Serial.print ("دما:") ؛ Serial.print (t)؛ Serial.print ("| رطوبت:")؛ Serial.println (h)؛ } // انتشار مقادیر در موضوعات MQTT client.publish (موضوع ، داده) ؛ // در صورت (اشکال زدایی) {{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) ؛ while (WiFi.status ()! = WL_CONNECTED) {تأخیر (100)؛ Serial.print (".") ؛ } Serial.println ("")؛ Serial.println ("WiFi خوب است") ؛ Serial.print ("=> آدرس IP جدید ESP32 این است:")؛ Serial.print (WiFi.localIP ()) ؛ Serial.println ("")؛ } // در صورت از بین رفتن اتصال مجدد به wifi وصل شوید () {while (! client.connected ()) {Serial.print ("اتصال به کارگزار MQTT …") ؛ if (client.connect ("ESP32Client"، mqtt_user، mqtt_password)) {Serial.println ("OK")؛ } else {Serial.print ("[خطا] متصل نیست:")؛ Serial.print (client.state ()) ؛ Serial.println ("قبل از تلاش مجدد 5 ثانیه صبر کنید.")؛ تأخیر (5000) ؛ }}} حلقه void () {}

و دوباره ، فراموش نکنید که اعتبارنامه ها را با اعتبار خود جایگزین کنید

مرحله 2: سیم کشی کنید

سیم کشی!
سیم کشی!

برای برق ، از یک کابل USB قدیمی استفاده کردم که اتصال USB-A آن را قطع کردم. چهار سیم در کابل USB وجود دارد ، ما فقط به سیمهای مشکی و قرمز احتیاج داریم.

بنابراین ، همه چیز را مطابق برنامه بالا متصل کنید.

مرحله 3: Python3 Script

اسکریپت Python3 به جایی می رود که برای کاربر اصلی قابل دسترسی است.

من از /root/scripts/glasshouse/glasshouse.py برای این اسکریپت استفاده کردم. محتویات اسکریپت پایتون به شرح زیر است:

# اسکریپت Python3 برای اتصال به MQTT ، خواندن مقادیر و نوشتن آنها در MySQL

# # B. Duijnhouwer # ژوئن 8th 2020 # # نسخه: 1.0 # # import paho.mqtt.client as mqtt import json import pymysql pymysql.install_as_MySQLdb () import MySQLdb from datetime import datetime db = MySQLdb.connect (" "glasshouse"، "*** MYSQL_USERNAME ***"، "*** MYSQL_PASSWORD ***") cursor = db.cursor () broker_address = "localhost" #پورت آدرس بروکر = 1883 #کاربر پورت بروکر = "** *MQTT_USERNAME *** " #رمز عبور نام کاربری =" *** MQTT_PASSWORD *** " #رمز عبور اتصال در اتصال (کلاینت ، داده های کاربر ، پرچم ها ، rc): #تماس برای زمانی که مشتری به کارگزار متصل می شود (" متصل است با کد نتیجه {0} ". فرمت (str (rc))) # چاپ نتیجه تلاش مشتری client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (client، userdata، msg): # پاسخ تماس برای زمانی که پیام PUBLISH از سرور دریافت می شود. cursor.execute ("select * from sensordata") numrows = int (cursor.rowcount) newrow = numrows + 1 now = datetime.now () formatatted_date = now.strftime ('٪ Y-٪ m-٪ d٪ H:٪ M:٪ S ') payload = json.loads (msg.payload.decode (' utf-8 ')) print ("row new:"+str (newrow)) temperature = float (payload ["دما"]) رطوبت = float (محموله ["رطوبت"]) چاپ ("دما:"+str (دما)) چاپ ("رطوبت:"+str (رطوبت)) چاپ ("DateTime:"+str (formatted_date)) اگر ((دما > -20) و (دما = 0) و (رطوبت <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx ، دما ، رطوبت ، نشان زمان) VALUES ("+str): print ("داده ها بیش از حد مجاز است و در MySQL وارد نمی شود") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (کاربر ، رمز عبور = رمز عبور) client.on_connect = on_connect # تعریف عملکرد بازخوانی برای اتصال موفقیت آمیز client.on_message = on_message # تعریف عملکرد بازخوانی برای دریافت پیام پیام. اتصال (بروکر_آدرس ، بندر = بندر) # اتصال به کارگزار کارگزار. 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” با مطالب زیر است:

[واحد]

توضیحات = سرویس نظارت بر گلخانه بعد از = multi-user.target [سرویس] نوع = ساده راه اندازی مجدد = همیشه RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [نصب] WantedBy = چند کاربر.هدف

می توانید این دستور را به عنوان سرویس با استفاده از دستور زیر اجرا کنید:

systemctl glasshouse را فعال کنید

و با استفاده از آن شروع کنید:

systemctl start glasshouse

مرحله 4: MySQL Server

شما باید یک پایگاه داده جدید 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 ('current'، {'packages': ['corechart']})؛ google.charts.setOnLoadCallback (drawChart) ؛ function drawChart () {var data = google.visualization.arrayToDataTable ([// ['Timestamp'، 'Temperature'، 'Humidity'، 'Heat Index]، [' Timestamp '،' Temperature '،' Humidity ']، query ($ sql) ؛ # این در حالی که - قالب بندی حلقه و قرار دادن همه داده های بازیابی شده در ['timestamp'، 'temperature'، 'humidity'] way. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ row ["timestamp"]، 10، 6)؛ echo "['". $ timestamp_rest. "'،". $ row ['temperature']. "،". $ row ['humidity']. "]،"؛ // echo "['". $ timestamp_rest. "'،". $ row ['temperature']. "،". $ row ['humidity']. "،". $ row ['heatindex ']. "]،"؛}؟>])؛ // Curved line var options = {title: 'دما و رطوبت'، curveType: 'function'، legend: {position: 'bottom'}، hAxis: {slantedText: true، slantedTextAngle: 45}}؛ // نمودار منحنی var var = new google.visualization. LineChart (document.getElementById ('curve_chart')) ؛ chart.draw (داده ها ، گزینه ها) ؛ } // پایان براکت از drawChart //

مرحله 6: مسکن چاپ سه بعدی

برای محفظه ، از دو محفظه جداگانه استفاده کردم ، یکی برای ESP32-CAM و DHT22 با هم و دیگری برای محافظ باتری 18650.

مرحله 7: نتیجه نهایی

نتیجه نهایی!
نتیجه نهایی!
نتیجه نهایی!
نتیجه نهایی!
نتیجه نهایی!
نتیجه نهایی!
نتیجه نهایی!
نتیجه نهایی!

نتیجه نهایی نیز در تصاویر بالا نشان داده شده است.

و هر زمان که باتری خالی است ، می توانید آن را با یک کابل مینی USB شارژ کنید.

توصیه شده: