ساخت وب سرور نمایش دما با ESP8266
ماژول ESP8266 یک ماژول عالی برای ایجاد وب سرور و اتصال به اینرنت می باشد در این آموزش ما به وسیله سنسور دمای DS18b20 و ماژول Node-MCU یک وب سرور با قابلیت نمایش آنلاین دما میسازیم.
لوازم مورد نیاز:
- مقاومت 4.6 کیلو اهم
- سیم برد بردی
روش اضافه کردن برد های ESP8266 به آردوینو
برای آن که بتوانید بر روی این ماژول توسط IDE آردوینو برنامه نویسی کنید باید درایورها و بورد آن را بر روی نرم افزار آردوینو نصب کنید.برای این منظور وارد نرم افزار آردوینو شوید. سپس از قسمت File وارد Preferences شوید.
سپس لینک زیر را کپی کنید و در پنجره Preferences در قسمت Additional Boards Manager URLs ، لینک را paste کنید و OK را بزنید.
http://arduino.esp8266.com/stable/package_esp8266com_index.json
سپس از قسمت Tools وارد Boards Manager… شوید.
سپس در لیست نمایش داده شده به دنبال esp8266 by ESP8266 Community بگردید و آن را نصب کنید.
منتظر بمانید تا عملیات نصب تکمیل شود.
برای استفاده از ماژول NodeMCU باید در لیست برد ها برد NodeMCU را انتخاب کنید.
نحوه اتصال سنسور DS18B20 به ماژول NodeMCU
برای تغذیه نیاز به کاری نیست و تغذیه NodeMCU از طریق پورت USB تامین می شود. نکته ی دیگر این که باید پین data سنسور دما به وسیله مقاومت DS18b20 پول آپ شود.
VCC -> 3.3 volts
GND -> GND
Data -> D1
و در نهایت برنامه وب سرور نمایش دما با ESP8266
#include <OneWire.h> #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS D1 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); const char* ssid = "YOUR SSID HERE"; const char* password = "YOUR PASSWORD HERE"; ESP8266WebServer server(80); char temperatureString[6]; const int led = 13; float getTemperature() { float temp; do { DS18B20.requestTemperatures(); temp = DS18B20.getTempCByIndex(0); delay(100); } while (temp == 85.0 || temp == (-127.0)); return temp; } void setup(void){ Serial.begin(115200); WiFi.begin(ssid, password); Serial.println(""); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); server.on("/", []() { float temperature = getTemperature(); dtostrf(temperature, 2, 2, temperatureString); String title = "Temperature"; String cssClass = "mediumhot"; if (temperature < 0) cssClass = "cold"; else if (temperature > 20) cssClass = "hot"; String message = "<!DOCTYPE html><html><head><title>" + title + "</title><meta charset=\"utf-8\" /><meta name=\"viewport\" content=\"width=device-width\" /><link href='https://fonts.googleapis.com/css?family=Advent+Pro' rel=\"stylesheet\" type=\"text/css\"><style>\n"; message += "html {height: 100%;}"; message += "div {color: #fff;font-family: 'Advent Pro';font-weight: 400;left: 50%;position: absolute;text-align: center;top: 50%;transform: translateX(-50%) translateY(-50%);}"; message += "h2 {font-size: 90px;font-weight: 400; margin: 0}"; message += "body {height: 100%;}"; message += ".cold {background: linear-gradient(to bottom, #7abcff, #0665e0 );}"; message += ".mediumhot {background: linear-gradient(to bottom, #81ef85,#057003);}"; message += ".hot {background: linear-gradient(to bottom, #fcdb88,#d32106);}"; message += "</style></head><body class=\"" + cssClass + "\"><div><h1>" + title + "</h1><h2>" + temperatureString + " <small>°C</small></h2></div></body></html>"; server.send(200, "text/html", message); }); server.begin(); Serial.println("Temperature web server started!"); } void loop(void){ server.handleClient(); }
قبل از پروگرم کردن توجه داشته باشید که باید در قسمت ssid نام شبکه wifi و در قسمت pass رمز شبکه WiFi رو وارد کنید. بعد از پروگرام شدن NodeMCU قسمت سریال مانیتور برنامه آردوینو را باز کنید تا IP که به برد NodeMCU اختصاص یافته را بدانیم. با وارد کردن IP در مرورگر دما به این شکل نمایش داده می شود.
در صورتی که پیشنهادی در مورد نوشته دارید و یا در راه اندازی پروژه به مشکلی برخوردید در قسمت نظرات مطرح کنید مشتاقانه منتظر نظرات شما هستیم.
با سلام:
بسیار خوب.کاش یه پروژه هم در رابطه با اتصال از طریق اینترنت راه دور با سرور مربوطه بدون دستکاری مودم هم ارائه می کردید.
در آینده همچین پست هایی هم خواهیم داشت
همچین بستیو نزاشتین هنوز؟
ببخشید امکانش هست بگید اگه میخواستیم به جای nodemcu از آردویینو و ماژول وای فای استفاده کنیم تنظیماتش چطور بود؟
سلام
سوالات علمیتون رو داخل انجمن بپرسید http://www.eca.ir/forums
سلام اگه به خوام تو محیط سرور دو تا گزینه اضافه کنم که یکی دما رو زیاد کنه و یکی دما رو کم کنه.باید چیکار کنم
سلام.چجوری میشه دو تا گزینه بهش اضافه کرد که یکی دما رو زیاد کنه و یکی دما رو کم کنه.البته توی وب سرور این دو گزینه باشن
سلام.من وقتی برنامه رو تست میکنم این ارور رو نشون میده.چیکار کنم؟؟
#include
^
compilation terminated.
exit status 1
Error compiling.
سلام بسیار عالی
ممنون
امکانش هست مقدار دما و رطوبت داشته باشه یابهتر دمای خارج و دما و رطوبت داخل
سلام در این برنامه کجا گفته ایم به چه پایه ای سنسور دما وصل میشود
سلام وقت بخیر. ممنون از آموزش خوبتون
اگر بخواهیم مثلا هر 3 ثانیه صفحه وب نمایش دما refresh بشه تا دمای جدید رو نشون بده چه تغییری باید در کد انجام بدیم؟
متشکرم
سلام پاسخ رو پیدا کردم : یک فانکشن جاوا اسکریپت برای رفرش صفحه در کد html تعریف می کنیم
function autoRefresh(t) { setTimeout(‘location.reload(true)’, t); }
و بعد در onLoad تگ با زمان مورد نظرمون به میلی ثانیه فراخوانی می کنیم:
<body onload=\"autoRefresh(1000);\"
…..
سلام با توجه به اینکه IP اختصاص یافته به NodeMCU با روشن و خاموش شدن مودم و NodeMCU ممکنه تغییر کنه (که برای خودم این مورد پیش آمد) جطور میتونیم یک HP ثابت در شبکه وای فای به NodeMCU اختصاص بدیم که همیشه با همون IP بشه بهش وصل شد؟