সুচিপত্র:

ESP32-DHT22-MQTT-MySQL-PHP ব্যবহার করে তাপমাত্রা এবং আর্দ্রতা: 7 টি ধাপ
ESP32-DHT22-MQTT-MySQL-PHP ব্যবহার করে তাপমাত্রা এবং আর্দ্রতা: 7 টি ধাপ

ভিডিও: ESP32-DHT22-MQTT-MySQL-PHP ব্যবহার করে তাপমাত্রা এবং আর্দ্রতা: 7 টি ধাপ

ভিডিও: ESP32-DHT22-MQTT-MySQL-PHP ব্যবহার করে তাপমাত্রা এবং আর্দ্রতা: 7 টি ধাপ
ভিডিও: Nodemcu esp8266 programming tutorial bangla । Esp8266 tutorial for beginners । Esp8266 bangla। 2020 2024, জুলাই
Anonim
ESP32-DHT22-MQTT-MySQL-PHP ব্যবহার করে তাপমাত্রা এবং আর্দ্রতা
ESP32-DHT22-MQTT-MySQL-PHP ব্যবহার করে তাপমাত্রা এবং আর্দ্রতা

আমার বান্ধবী একটি গ্লাসহাউস চেয়েছিল, তাই আমি তাকে একটি করেছিলাম। কিন্তু আমি কাচের ঘরের ভিতরে একটি তাপমাত্রা এবং আর্দ্রতা সেন্সর চেয়েছিলাম। সুতরাং, আমি উদাহরণের জন্য গুগল করেছি এবং পরীক্ষা শুরু করেছি।

আমার উপসংহার ছিল যে আমি যে সমস্ত উদাহরণ পেয়েছি তা ঠিক আমি যা তৈরি করতে চেয়েছিলাম তা নয়। আমি কোডের অনেক ছোট অংশ ধরেছি এবং সেগুলি একত্রিত করেছি। আমার প্রথম কাজ শেষ করতে আমার বেশ কিছু সময় লেগেছিল কারণ বেশিরভাগ উদাহরণের ডকুমেন্টেশন আমার পক্ষে বোঝা খুব কঠিন ছিল বা তারা এমন অংশ ধরে নিয়েছিল যা আমার জানা উচিত ছিল ?? কিন্তু আমি কিছুই জানি না (এখনো)

এই কারণেই আমি এই নির্দেশযোগ্য তৈরি করি। একটি "শুরু থেকে শেষ পর্যন্ত" টিউটোরিয়াল আক্ষরিকভাবে সবাই বুঝতে পারে। (অন্তত আমি আশা করি?)

কিভাবে এটা কাজ করে …

শেষ পণ্যটি একটি ESP32-CAM যার সাথে একটি DHT22 সেন্সর সংযুক্ত থাকে যা এটি 18650 ব্যাটারি থেকে পাওয়ার পায়। প্রতি তিন মিনিটে এটি তাপমাত্রা এবং আর্দ্রতা পড়ে এবং এটি ওয়াইফাই এর মাধ্যমে একটি বহিরাগত MQTT সার্ভারে পাঠায় এবং তারপর প্রয়োজন মতো কম ব্যাটারি ব্যবহার করতে ঘুমাতে যায় (তিন মিনিটের জন্য)।

একটি ডেবিয়ান সার্ভারে, (যা আমার মনে হয় একটি রাস্পবেরি পাইও হতে পারে) আমার পাইথন 3, একটি এমকিউটিটি সার্ভার, একটি মাইএসকিউএল সার্ভার এবং একটি ওয়েব সার্ভার আছে।

পাইথন 3 স্ক্রিপ্টটি একটি পরিষেবা হিসাবে চলে এবং যখনই এটি একটি MQTT বার্তা পায়, এটি আগের এন্ট্রিগুলির সংখ্যা (সূচক সংখ্যা) গণনা করে এবং একে একে বৃদ্ধি করে। তারপর এটি MQTT বার্তা থেকে তাপমাত্রা এবং আর্দ্রতার মান পড়ে। এটি মিথ্যা মানগুলির জন্য পরীক্ষা করে এবং যখনই মানগুলি সঠিক হয়, এটি নতুন সূচক সংখ্যা এবং বর্তমান তারিখ এবং সময় সহ একটি মাইএসকিউএল সার্ভারে মানগুলি প্রেরণ করে।

ওয়েব সার্ভারের একটি পিএইচপি স্ক্রিপ্ট রয়েছে যা মাইএসকিউএল সার্ভার থেকে মানগুলি পড়ে এবং গুগল চার্ট ব্যবহার করে এটি থেকে একটি সুন্দর গ্রাফ তৈরি করে। (উদাহরণ)

সরবরাহ

আমি ব্যবহৃত অংশগুলি নিম্নরূপ:

  • ESP32-CAM (যে কারণে আমি ক্যাম সংস্করণটি ব্যবহার করেছি তার কারণ এটিতে একটি বহিরাগত অ্যান্টেনা সংযোগকারী রয়েছে। সম্ভবত অন্যান্য ESP32 গুলিও আপনি ব্যবহার করতে পারেন)
  • বাহ্যিক অ্যান্টেনা
  • AM2302 DHT22 সেন্সর (এটিতে একটি অন্তর্নির্মিত প্রতিরোধক রয়েছে, তাই আপনার কেবল তিনটি তারের প্রয়োজন)

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

  • 18650 ব্যাটারি ieldাল v3
  • 18650 ব্যাটারি (NCR18650B)
  • পুরানো মাইক্রো ইউএসবি কেবল (ESP32 ব্যাটারি শিল্ডের সাথে সংযুক্ত করার জন্য)
  • কিছু সংক্ষিপ্ত জাম্পার তার

অতিরিক্ত প্রয়োজন:

  • ইউএসবি থেকে টিটিএল সংযোগকারী (ছবি)

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

  • তাতাল
  • 3D প্রিন্টার (শুধুমাত্র আবাসন ক্ষেত্রে প্রয়োজন)

ধাপ 1: ESP32-CAM এ Arduino কোড আপলোড করুন

ESP32-CAM এ Arduino কোড আপলোড করুন
ESP32-CAM এ Arduino কোড আপলোড করুন

তাহলে শুরু করা যাক!

ESP32-CAM এ Arduino কোড আপলোড করতে, আপনাকে উপরের স্কিম্যাটিক্স ব্যবহার করে ESP32 এর সাথে USBtoTTL সংযোগকারীকে সংযুক্ত করতে হবে।

Arduino কোড হল:

/*একটি DHT22 সেন্সর থেকে তাপমাত্রা এবং আর্দ্রতা পড়ার জন্য একটি ছোট প্রোগ্রাম এবং

এটি MQTT- এ পাঠান। B. Duijnhouwer June, 8th 2020*/#include #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // wifi password #define mqtt_server "*** SERVER_NAME ***" // সার্ভারের নাম বা আইপি #ডিফাইন mqtt_user "*** MQTT_USER ***" // ব্যবহারকারীর নাম #ডিফাইন mqtt_password "*** MQTT_PASSWORD ***" // পাসওয়ার্ড #ডিফাইন টপিক "গ্লাসহাউস /dhtreadings "#debine debug_topic" glasshouse /debug "// ডিবাগ করার বিষয় /ডিপস্লিপের জন্য সংজ্ঞা* /#define uS_TO_S_FACTOR 1000000 /* মাইক্রো সেকেন্ডে রূপান্তর ফ্যাক্টর* / #ডিফাইন TIME_TO_SLEEP 180 /* ঘুমের সময় ESP32 5 মিনিটের জন্য (সেকেন্ডে) */ বুল ডিবাগ = সত্য; // লগ বার্তা প্রদর্শন করুন যদি সত্য #ডিএইচটি 22_পিন 14 ডিএইচটি ডিএইচটি নির্ধারণ করুন; WiFiClient espClient; PubSubClient ক্লায়েন্ট (espClient); চার ডেটা [80]; অকার্যকর সেটআপ () {Serial.begin (115200); setup_wifi (); // ওয়াইফাই নেটওয়ার্ক client.setServer (mqtt_server, 1883) এর সাথে সংযোগ করুন; // MQTT সংযোগ কনফিগার করুন, প্রয়োজনে পোর্ট পরিবর্তন করুন। যদি (! client.connected ()) {reconnect (); } // ডেটা পড়ুন int chk = DHT.read22 (DHT22_PIN); float t = DHT। তাপমাত্রা; ভাসা h = DHT. আর্দ্রতা; স্ট্রিং dhtReadings = "{" temperature / ": \" " + স্ট্রিং (টি) +" / ", \" আর্দ্রতা / ": \" " + স্ট্রিং (জ) +" / "}"; dhtReadings.toCharArray (ডেটা, (dhtReadings.length () + 1)); যদি (ডিবাগ) {Serial.print ("তাপমাত্রা:"); সিরিয়াল.প্রিন্ট (টি); সিরিয়াল.প্রিন্ট ("| আর্দ্রতা:"); Serial.println (h); } // এমকিউটিটি বিষয় ক্লায়েন্ট.পাবলিশ (বিষয়, ডেটা) থেকে মান প্রকাশ করুন; // বিষয়ের উপর রিডিং প্রকাশ করুন (গ্লাসহাউস/ডিএইচটিরিডিং) যদি (ডিবাগ) {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 (); } // ওয়াইফাই অকার্যকর setup_wifi () {বিলম্ব (20) সংযোগ সেটআপ; Serial.println (); সিরিয়াল.প্রিন্ট ("এর সাথে সংযুক্ত হচ্ছে"); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid, wifi_password); যখন (WiFi.status ()! = WL_CONNECTED) {বিলম্ব (100); সিরিয়াল.প্রিন্ট ("।"); } Serial.println (""); Serial.println ("ওয়াইফাই ঠিক আছে"); Serial.print ("=> ESP32 নতুন IP ঠিকানা হল:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // সংযোগ বিচ্ছিন্ন হলে ওয়াইফাইতে পুনরায় সংযোগ করুন () {যখন (! যদি (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } অন্য {সিরিয়াল.প্রিন্ট ("[ত্রুটি] সংযুক্ত নয়:"); Serial.print (client.state ()); Serial.println ("পুনরায় চেষ্টা করার আগে ৫ সেকেন্ড অপেক্ষা করুন।"); বিলম্ব (5000); }}} অকার্যকর লুপ () {}

এবং আবার, আপনার নিজের শংসাপত্রের সাথে শংসাপত্রগুলি প্রতিস্থাপন করতে ভুলবেন না

ধাপ 2: ওয়্যার আপ

তারের আপ!
তারের আপ!

শক্তির জন্য, আমি একটি পুরানো ইউএসবি কেবল ব্যবহার করেছি যার মধ্যে আমি ইউএসবি-এ সংযোগকারীটি কেটে ফেলেছি। ইউএসবি ক্যাবলে চারটি তার রয়েছে, আমাদের কেবল কালো এবং লাল রঙের প্রয়োজন।

সুতরাং, উপরের সময়সূচী অনুসারে সবকিছু সংযুক্ত করুন।

ধাপ 3: পাইথন 3 স্ক্রিপ্ট

পাইথন 3 স্ক্রিপ্ট এমন জায়গায় যায় যেখানে এটি রুট ব্যবহারকারীর কাছে অ্যাক্সেসযোগ্য।

আমি এই স্ক্রিপ্টের জন্য /root/scripts/glasshouse/glasshouse.py ব্যবহার করেছি। পাইথন স্ক্রিপ্টের বিষয়বস্তু হল:

# পাইথন 3 স্ক্রিপ্ট এমকিউটিটি -র সাথে সংযোগ করতে, মানগুলি পড়ুন এবং তাদের মাইএসকিউএল -এ লিখুন

# # B. Duijnhouwer # June, 8th 2020 # # version: 1.0 # # import paho.mqtt.client as mqtt import json import pymysql pymysql.install_as_MySQLdb () ডেটটাইম ইম্পোর্ট ডেটটাইম db = MySQLdb.connect ("localhost", "গ্লাসহাউস", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") কার্সার = db.cursor () broker_address = "localhost" #Broker address port = 1883 #Broker port user = "** *MQTT_USERNAME *** " #সংযোগ ব্যবহারকারীর নাম পাসওয়ার্ড =" *** MQTT_PASSWORD *** " #সংযোগের পাসওয়ার্ড ডিফ on_connect (ক্লায়েন্ট, ইউজারডাটা, পতাকা, আরসি): #ক্লায়েন্ট যখন ব্রোকার প্রিন্টের সাথে সংযুক্ত হয় (" সংযুক্ত রেজাল্ট কোড {0} "। সার্ভার থেকে পাবলিশ মেসেজ পাওয়া যায়। cursor.execute ("sensordata থেকে নির্বাচন করুন") numrows = int (cursor.rowcount) newrow = numrows + 1 now = datetime.now () formatted_date = now.strftime ('%Y-%m-%d%H:% M:%S ') payload = json.loads (msg.payload.decode (' utf-8 ')) প্রিন্ট ("নতুন সারি:"+str (newrow)) তাপমাত্রা = ভাসমান (পেলোড ["তাপমাত্রা"]) আর্দ্রতা = float (পেলোড ["আর্দ্রতা"]) মুদ্রণ ("তাপমাত্রা:"+str (তাপমাত্রা)) মুদ্রণ ("আর্দ্রতা:"+str (আর্দ্রতা)) মুদ্রণ ("DateTime:"+str (formatted_date)) যদি ((তাপমাত্রা > -20) এবং (তাপমাত্রা = 0) এবং (আর্দ্রতা <= 100)): cur = db.cursor () cur.execute ("গ্লাসহাউসে প্রবেশ করান। সেন্সরডাটা (idx, তাপমাত্রা, আর্দ্রতা, টাইমস্ট্যাম্প) মান ("+str (newrow)+","+str (তাপমাত্রা)+","+str (আর্দ্রতা)+", %s)", (formatted_date)) db.commit () মুদ্রণ ("MySQL এ প্রাপ্ত এবং আমদানি করা ডেটা") অন্য: মুদ্রণ ("ডেটা সীমা অতিক্রম করেছে এবং মাইএসকিউএল-এ আমদানি করা হয়নি") ক্লায়েন্ট = 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 connect with broker client.loop_forever () # start networking daemon

MySQL ব্যবহারকারীর নাম এবং পাসওয়ার্ড এবং MQTT ব্যবহারকারীর নাম এবং পাসওয়ার্ড আপনার নিজের শংসাপত্রের সাথে প্রতিস্থাপন করতে ভুলবেন না

আপনি দুটি ফাইল তৈরি করে স্ক্রিপ্টটিকে একটি পরিষেবা হিসাবে চালাতে পারেন।

প্রথমটি হল "/etc/init/glasshouse.conf" নিম্নলিখিত বিষয়বস্তু সহ:

রানলেভেলে শুরু করুন [2345]

রানলেভেলে থামুন [! 2345] exec /root/scripts/glasshouse/glasshouse.py

দ্বিতীয়টি হল "/etc/systemd/system/multi-user.target.wants/glasshouse.service" নিম্নলিখিত বিষয়বস্তু সহ:

[ইউনিট]

বর্ণনা = গ্লাসহাউস মনিটরিং সার্ভিস পরে = multi-user.target [Service] Type = simple restart = always RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Install] WantedBy = multi-user লক্ষ্য

আপনি নিম্নলিখিত কমান্ড ব্যবহার করে একটি পরিষেবা হিসাবে এই রান করতে পারেন:

systemctl সক্ষম কাচঘর

এবং এটি ব্যবহার করে শুরু করুন:

systemctl স্টার্ট গ্লাসহাউস

ধাপ 4: মাইএসকিউএল সার্ভার

আপনাকে একটি নতুন মাইএসকিউএল ডাটাবেস তৈরি করতে হবে যার মধ্যে কেবল একটি টেবিল রয়েছে।

টেবিল তৈরির কোড হল:

টেবিল 'সেন্সরডাটা' তৈরি করুন (`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', {'package': ['corechart']}); google.charts.setOnLoadCallback (drawChart); ফাংশন drawChart () {var data = google.visualization.arrayToDataTable ([// ['টাইমস্ট্যাম্প', 'তাপমাত্রা', 'আর্দ্রতা', 'তাপ সূচক'], ['টাইমস্ট্যাম্প', 'তাপমাত্রা', 'আর্দ্রতা'], প্রশ্নটি = substr ($ row ["timestamp"], 10, 6); echo "['"। $ timestamp_rest। "',"। $ row ['temperature']। ","। $ row ['humidity']। "],"; // echo "['"। $ timestamp_rest। "',"। $ row ['temperature']। ","। $ row ['humidity']। ","। $ row ['heatindex ']। "],";}?>]); // বাঁকা লাইন var অপশন = {শিরোনাম: 'তাপমাত্রা এবং আর্দ্রতা', curveType: 'ফাংশন', কিংবদন্তি: {অবস্থান: 'নীচে'}, hAxis: {slantedText: true, slantedTextAngle: 45}}; // বাঁকা চার্ট var চার্ট = নতুন google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (ডেটা, অপশন); } // drawChart থেকে শেষ বন্ধনী //

ধাপ 6: 3D মুদ্রিত হাউজিং

আবাসনের জন্য, আমি দুটি পৃথক হাউজিং ব্যবহার করেছি, একটি ESP32-CAM এবং DHT22 একসাথে এবং 18650 ব্যাটারি ieldালের জন্য।

ধাপ 7: চূড়ান্ত ফলাফল

চূড়ান্ত ফলাফল!
চূড়ান্ত ফলাফল!
চূড়ান্ত ফলাফল!
চূড়ান্ত ফলাফল!
চূড়ান্ত ফলাফল!
চূড়ান্ত ফলাফল!
চূড়ান্ত ফলাফল!
চূড়ান্ত ফলাফল!

চূড়ান্ত ফলাফল উপরের ছবিতেও দেখানো হয়েছে।

এবং যখনই ব্যাটারি খালি থাকে, আপনি এটি একটি মিনি ইউএসবি কেবল দিয়ে চার্জ করতে পারেন।

প্রস্তাবিত: