در این پروژه ما قصد داریم ابتدا دمای محیط را توسط سنسور دیجیتال دما DS18B20 اندازه گیری کنیم و سپس با ایجاد یک وب سرور ساده با برد NodeMCU مقدار دمای اندازه گیری شده را نمایش دهیم.
DS18B20 یک سنسور دمای دیجیتال با ولتاژ کاری 3 الی 5.5 ولت DC است، که قابلیت خواندن دما در محدوده منفی 55 درجه سانتی گراد الی مثبت 125 درجه سانتی گراد با دقت 0.05 درجه سانتی گراد را دارد. همچنین DS18B20 از پروتکل ارتباطی one wire support یا همان ارتباط تک سیمه (1WIRE) جهت ارتباط با دیگر دستگاه های خارجی استفاده می کند.
قطعات مورد نیاز جهت ساخت پروژه
:: برد NodeMCU
:: یک عدد مقاومت با مقدار 4.7 کیلو اهم]
:: برد بورد
:: سیم جامپر برد بوردی
مرحله اول : اتصال سنسور دما DS18B20 به برد NodeMCU
1- ابتدا سنسور دما DS18B20 را همانند تصویر زیر مقابل خود بگیرید.
2- پایه VDD یا VCC سنسور دمای DS18B20 را به پایه 3V برد NodeMCU متصل کنید.
3- پایه DQ سنسور دمای DS18B20 را به پایه دیجیتال شماره 2 برد NodeMCU متصل کنید.
4- پایه GND سنسور دمای DS18B20 را به پایه G برد NodeMCU متصل کنید.
5- یک سر مقاومت 4/7 کیلو اهمی را به پایه 3V برد NodeMCU متصل کنید.
6- سر دیگر مقاومت 4/7 کیلو اهمی را به پایه دیجیتال شماره 2 برد NodeMCU متصل کنید.
مرحله دوم : نصب کتابخانه DallasTemperature.h در نرم افزار آردوینو
1- نرم افزار آردوینو را بر روی سیستم خود اجرا کنید، اگر بار اول است که با برد Arduino و NodeMCU می کنید و این نرم افزار را بر روی سیستم خود ندارید، می توانید نرم افزار آردوینو و نحوه نصب آن را از اینجا دریافت نمائید.
2- کتابخانه DallasTemperature.h را از اینجا دانلود کنید.
3- مسیر زیر را از طریق منوی نوار ابزار در نرم افزار آردوینو طی کنید و سپس در پنجره نهایی فایل کتابخانه DallasTemperature را که دانلود کرده اید، جهت افزودن انتخاب کنید.
Sketch > Include Library > Add .ZIP Library…
مرحله سوم : نصب کتابخانه OneWire.h در نرم افزار آردوینو
1- کتابخانه OneWire.h را از اینجا دانلود کنید.
2- مسیر زیر را از طریق منوی نوار ابزار در نرم افزار آردوینو طی کنید و سپس در پنجره نهایی فایل کتابخانه OneWire را که دانلود کرده اید، جهت افزودن انتخاب کنید.
Sketch > Include Library > Add .ZIP Library…
مرحله چهارم : نصب کتابخانه ESPAsyncWebServer.h در نرم افزار آردوینو
1- کتابخانه ESPAsyncWebServer.h را از اینجا دانلود کنید.
2- مسیر زیر را از طریق منوی نوار ابزار در نرم افزار آردوینو طی کنید و سپس در پنجره نهایی فایل کتابخانه ESPAsyncWebServer را که دانلود کرده اید، جهت افزودن انتخاب کنید.
Sketch > Include Library > Add .ZIP Library…
مرحله پنجم : نصب کتابخانه ESPAsyncTCP.h در نرم افزار آردوینو
1- کتابخانه ESPAsyncTCP.h را از اینجا دانلود کنید.
2- مسیر زیر را از طریق منوی نوار ابزار در نرم افزار آردوینو طی کنید و سپس در پنجره نهایی فایل کتابخانه ESPAsyncTCP را که دانلود کرده اید، جهت افزودن انتخاب کنید.
Sketch > Include Library > Add .ZIP Library…
مرحله ششم : پروگرام کردن برنامه بر روی برد آردوینو
1- برد آردوینو را از طریق کابل USB به کامپیوتر متصل کنید.
2- نرم افزار آردوینو را بر روی سیستم خود اجرا کنید، اگر بار اول است که با برد Arduino کار می کنید و این نرم افزار را بر روی سیستم خود ندارید، می توانید نرم افزار آردوینو و نحوه نصب آن را از اینجا دریافت نمائید.
3- برای برنامه نویسی برد NodeMCU در نرم افزار آردوینو لازم است ابتدا این برد را در نرم افزار آردوینو اضافه کنیم، اگر هنوز اینکار را انجام نداده اید، پیشنهاد میکنیم آموزش “برنامه نویسی بردهای Nodemcu و ESP8266 در نرم افزار آردوینو” را مشاهده کنید.
4- پس از اجرای نرم افزار آردوینو، از طریق منوی File بر روی گزینه New کلیک کنید.
5- تمامی کدهای زیر را کپی کنید و در پنجره جدید باز شده بچسبانید (Paste).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
#ifdef ESP32 #include <WiFi.h> #include <ESPAsyncWebServer.h> #else #include <Arduino.h> #include <ESP8266WiFi.h> #include <Hash.h> #include <ESPAsyncTCP.h> #include <ESPAsyncWebServer.h> #endif #include <OneWire.h> #include <DallasTemperature.h> // Data wire is connected to GPIO 4 #define ONE_WIRE_BUS 4 // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature sensor DallasTemperature sensors(&oneWire); // Replace with your network credentials const char* ssid = ""; const char* password = ""; // Create AsyncWebServer object on port 80 AsyncWebServer server(80); String readDSTemperatureC() { // Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); if(tempC == -127.00) { Serial.println("Failed to read from DS18B20 sensor"); return "--"; } else { Serial.print("Temperature Celsius: "); Serial.println(tempC); } return String(tempC); } String readDSTemperatureF() { // Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus sensors.requestTemperatures(); float tempF = sensors.getTempFByIndex(0); if(int(tempF) == -196){ Serial.println("Failed to read from DS18B20 sensor"); return "--"; } else { Serial.print("Temperature Fahrenheit: "); Serial.println(tempF); } return String(tempF); } const char index_html[] PROGMEM = R"rawliteral( <!DOCTYPE HTML><html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> <style> html { font-family: Arial; display: inline-block; margin: 0px auto; text-align: center; } h2 { font-size: 3.0rem; } p { font-size: 3.0rem; } .units { font-size: 1.2rem; } .ds-labels{ font-size: 1.5rem; vertical-align:middle; padding-bottom: 15px; } </style> </head> <body> <h2>Electronics98</h2> <p> <i class="fas fa-thermometer-half" style="color:#059e8a;"></i> <span class="ds-labels">Temperature Celsius</span> <span id="temperaturec">%TEMPERATUREC%</span> <sup class="units">°C</sup> </p> <p> <i class="fas fa-thermometer-half" style="color:#059e8a;"></i> <span class="ds-labels">Temperature Fahrenheit</span> <span id="temperaturef">%TEMPERATUREF%</span> <sup class="units">°F</sup> </p> </body> <script> setInterval(function ( ) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("temperaturec").innerHTML = this.responseText; } }; xhttp.open("GET", "/temperaturec", true); xhttp.send(); }, 10000) ; setInterval(function ( ) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("temperaturef").innerHTML = this.responseText; } }; xhttp.open("GET", "/temperaturef", true); xhttp.send(); }, 10000) ; </script> </html>)rawliteral"; // Replaces placeholder with DHT values String processor(const String& var){ //Serial.println(var); if(var == "TEMPERATUREC"){ return readDSTemperatureC(); } else if(var == "TEMPERATUREF"){ return readDSTemperatureF(); } return String(); } void setup(){ // Serial port for debugging purposes Serial.begin(115200); Serial.println(); // Start up the DS18B20 library sensors.begin(); // Connect to Wi-Fi WiFi.begin(ssid, password); Serial.println("Connecting to WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); // Print ESP Local IP Address Serial.println(WiFi.localIP()); // Route for root / web page server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/html", index_html, processor); }); server.on("/temperaturec", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", readDSTemperatureC().c_str()); }); server.on("/temperaturef", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", readDSTemperatureF().c_str()); }); // Start server server.begin(); } void loop(){ } |
6- در خط 23 برنامه نام کاربری WIFI مودم خود را وارد نمائید. به عنوان مثال :
1 2 |
const char* ssid = "electronics98"; |
7- در خط 24 برنامه پسورد WIFI مودم خود را وارد نمائید. به عنوان مثال :
1 2 |
const char* password = "123456789"; |
نکته: مطمئن شوید با نام کاربری و پسوردی که وارد کرده اید می توانید به WIFI مودم خود متصل شوید.
8- حال از طریق منوی File گزینه Save را انتخاب کنید و برنامه را در محل دلخواه خود ذخیره کنید.
9- پس از ذخیره برنامه از طریق منوی Tools به زیر منوی Board رفته و از لیست کشویی باز شده آیتم NodeMCU را انتخاب کنید.
10- دوباره از طریق همان منوی Tools به زیر منوی Port رفته و از لیست کشویی باز شده شماره پورت USB که از طریق آن برد NodeMCU به کامپیوتر متصل شده است را انتخاب کنید.
11- در پایان برای انتقال برنامه به برد NodeMCU کافیست تا بر روی آیکون در نرم افزار آردوینو کلیک کنید.
مرحله هفتم : راه اندازی پروژه
1- نرم افزار آردوینو را اجرا کنید.
2- مودم WIFI خود را که اطلاعات آنرا در برنامه وارد کرده اید را روشن کنید.
3- برد NodeMCU را به کامپیوتر متصل کنید.
4- در نرم افزار آردوینو از طریق منو Tools بر روی گزینه Serial Monitor کلیک کنید.
5- در پنجره Serial Monitor میزان بادریت را بر روی مقدار 115200 تنظیم کنید.
6- برد NodeMcu را با استفاده از کلید تعبیه شده بر روی برد یکبار ریست کنید.
7- پس از چند لحظه آدرس IP وب سرور ایجاد شده در پنجره Serial Monitor نمایش داده می شود.
8- با استفاده از یک کامپیوتر و یا موبایل به مودم WIFI خود که اطلاعات آنرا در برنامه وارد کردید متصل شوید و توسط یک برنامه مرورگر آدرس IP داده شده را باز کنید.