아두이노프로세싱 프로그래밍

아두이노 ESP8266 NodeMCU IOT(사물인터넷 ) 온습도 모니터링 스테이션

coding art 2012. 1. 3. 16:57
728x90

 아두이노 NodeMCU 사물인터넷에서 클라이언트로부터의 request 가 올때마다 한번씩 DHT11 온습도 센서를 사용하여 업데이트 된 데이터를 준비하여 출력하도록 하자. NodeMCU 보드에서 측정한 온습도 데이터는 client.print(⚫⚫⚫) 명령을 사용하여 Java Script  아날로그 디지털 시계 코드 내부에 전달한다.
즉 Java Script  코드내에서 ⚫⚫⚫은 한번은  “var temperature =”을 출력하고 이어서 온도 값 변수 temp;를 출력해야 한다. 이 기법이 아두이노 NodeMCU에서 웹브라우저의 Java Script 에 온습도 데이터를 넘겨주는 기법이다.
온습도 데이터를 받아 들이는 Java Script  코드가 바늘 침을 애니메이션하는 아날로그 시계 이기 때문에 온습도 데이터도 각도로 환산하여 원형 게이지에 바늘 침 표현이 가능해짐을 참고하자.


DHT on 버튼을 클릭하면 온습도 데이터가 갱신된다. Logout  버튼도 클릭하면 한번씩 request 를 보내므로 업데이트가 되지만 이 버튼은 홈페이지 제작 시 if 문을 사용하여 Login  페이지로 넘길 수 있도록 코딩을 유보한다.


Webserver_nodemcu_landscape_calculator_01


#include <ESP8266WiFi.h>
 #include <DHT11.h>
 
 const char* ssid = "android1234";
 const char* password = "dddddddddd";
//const char* ssid = "AndroidHotspot1994";//const char* password = "00000000";

 int ledPin = 2; //
 int pin = D5; //온습도센서
 
 WiFiServer server(80);
 DHT11 dht11(pin);
 
 void setup() {
   Serial.begin(115200);
   delay(10);

   pinMode(ledPin, OUTPUT);
   digitalWrite(ledPin, HIGH);

   // Set WiFi to station mode and disconnect from an AP if it was previously connected
   WiFi.mode(WIFI_STA);
   WiFi.disconnect();
   delay(100);

   Serial.println("Setup done");

   // Connect to WiFi network
   Serial.println();
   Serial.println();
   Serial.print("Connecting to ");
   Serial.println(ssid);

   WiFi.begin(ssid, password);

   while (WiFi.status() != WL_CONNECTED) {
     delay(500);
     Serial.print(".");
   }
   Serial.println("");
   Serial.println("WiFi connected");

   // Start the server
   server.begin();
   Serial.println("Server started");

   // Print the IP address
   Serial.print("Use this URL to connect: ");
   Serial.print("http://");
   Serial.print(WiFi.localIP());
   Serial.println("/");

 }

 void loop() {
   // Check if a client has connected
   WiFiClient client = server.available();
   if (!client) {
     return;
   }

   // Wait until the client sends some data
   Serial.println("new client");
   while(!client.available()){
     delay(1);
   }
  
   // Temperature & Humidity Sensing
   int err;
   float temp, humi;
   if((err=dht11.read(humi, temp))==0)  {
     Serial.print("temperature:");
     Serial.print(temp);
     Serial.print(" humidity:");
     Serial.print(humi);
     Serial.println();
   }
   else  {
     Serial.println();
     Serial.print("Error No :");
     Serial.print(err);
     Serial.println();   
   }
   delay(2000);
  
   // Read the first line of the request
   String request = client.readStringUntil('\r');
   Serial.println(request);
   client.flush();

   // Match the request

   int value = LOW;
   if (request.indexOf("/LED=ON") != -1)  {
     digitalWrite(ledPin, LOW);
     value = HIGH;
   }
   if (request.indexOf("/LED=OFF") != -1)  {
     digitalWrite(ledPin, HIGH);
     value = LOW;
   }

 // Set ledPin according to the request
 //digitalWrite(ledPin, value);

   // Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); //  do not forget this one

client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<body>");
//client.println("<a href=\"/LED=ON\"\" ><button>Turn on </button></a>");
//client.println("<a href=\"/LED=OFF\"\" ><button>Turn Off </button></a>");
client.println("<center><h1>Weather Station</h1>");
client.println("</body>");
client.println("<head>");
client.println("<style>");
client.println("body{");
client.println("background-color:lightgrey;} ");
client.println(".box{background-color:#3d4543;height:400px;width:520px; border-style:solid; border-color:lightblue;");
client.println("border-radius:10px;position:relative;top:20px;left:1%;} ");
client.println(".display{background-color:#222;width:440px; position:relative;left:2px;top:20px;height:35px;}");
client.println(".display input{width:415px;position:relative;left:2px;top:2px;height:30px;");
client.println("color:black;background-color:#bccd95;font-size:21px;text-align:right;}");
client.println(".keys{position:relative;top:15px;}");
client.println(".button{width:40px;height:30px;border-radius:8px; border-style:solid; border-color:green;");
client.println("margin-left:12px;cursor:pointer;border-top:2px solid transparent;}");
client.println(".button.gray{color:white;background-color:#6f6f6f;");
client.println("border-bottom:black 2px solid;border-top:2px #6f6f6f solid;}");
client.println(".button.pink{color:black;background-color:#ff4561;border-bottom:black 2px solid;}");
client.println(".button.black{color:white;background-color:#303030;");
client.println("border-bottom:black 2px solid;border-top:2px #303030 solid;}");
client.println(".button.orange{color:black;background-color:FF9933;");
client.println("border-bottom:black 2px solid;border-top:2px FF9933 solid;}");
client.println(".gray:active{border-top:black 2px solid;border-bottom:2px #6f6f6f solid;}");
client.println(".pink:active{border-top:black 2px solid;border-bottom:#ff4561 2px solid;}");
client.println(".black:active{border-top:black 2px solid;border-bottom:#303030 2px solid;}");
client.println(".orange:active{border-top:black 2px solid;border-bottom:FF9933 2px solid;}");
client.println(".buttondigiclock{width:125px;height:40px;border:none;border-radius:8px;margin-left:15px;");
client.println("cursor:pointer;border-top:2px solid transparent;}");
client.println(".buttondigiclock.black{color:white;background-color:;");
client.println("border-bottom:lightblue 2px solid;border-top:2px 303030 solid;}");
client.println(".buttondigidht.black{color:red;background-color:;");
client.println("border-bottom:blue 2px solid;border-top:2px 303030 solid;}");
client.println("p{line-height:10px;}");
client.println("</style></head>");
client.println("<body>");
client.println("<div class='box'>");
client.println("<div class='display'>");
client.println("<input type='text' readonly size='18' id='d'></div>");
client.println("<div class='displayx'>");
client.println("<input type='text' readonly size='18' id='dx'></div>");
client.println("<div class='keys'>");
client.println("<table>  <tbody>  <tr>");
//client.print("<input type='button' class='button gray' value='(' onClick='v(\"(\")'>");
client.println("<td><input type='button' class='button gray' value='Pi' onclick='v(\"3.14159\")'></td>");
client.println("<td><input type='button' class='button gray' value='(' onclick='v(\"(\")'></td>");
client.println("<td><input type='button' class='button gray' value=')' onclick='v(\")\")'></td>");
client.println("<td><input type='button' class='button black' value='7' onclick='v(\"7\")'></td>");
client.println("<td><input type='button' class='button black' value='8' onclick='v(\"8\")'></td>");
client.println("<td><input type='button' class='button black' value='9' onclick='v(\"9\")'></td>");
client.println("<td><input type='button' class='button pink' value='/' onclick='v(\"/\")'></td>");
client.println("<td><input type='button' class='button pink' value='*' onclick='v(\"*\")'></td>");
client.println("</tr>  </tbody>");
client.println("<tr>");
client.println("<td><input type='button' class='button black' value='4' onclick='v(\"4\")'></td>");
client.println("<td><input type='button' class='button black' value='5' onclick='v(\"5\")'></td>");
client.println("<td><input type='button' class='button black' value='6' onclick='v(\"6\")'></td>");
client.println("<td><input type='button' class='button black'value='1' onclick='v(\"1\")'></td>");
client.println("<td><input type='button' class='button black' value='2' onclick='v(\"2\")'></td>");
client.println("<td><input type='button' class='button black' value='3' onclick='v(\"3\")'></td>");
client.println("<td><input type='button' class='button pink' value='-' onclick='v(\"-\")'></td>");
client.println("<td><input type='button' class='button pink' value='+' onclick='v(\"+\")'></td>");
client.println("</tr>");
client.println("<tr>");
client.println("<td><input type='button' class='button black' value='0' onclick='v(\"0\")'></td>");
client.println("<td><input type='button' class='button black' value='.' onclick='v(\".\")'></td>");
client.println("<td><input type='button' class='button black' value='sin' onclick='v(\"Math.sin\")'></td>");
client.println("<td><input type='button' class='button black' value='cos' onclick='v(\"Math.cos\")'></td>");
client.println("<td><input type='button' class='button black' value='tan' onclick='v(\"Math.tan\")'></td>");
client.println("<td><input type='button' class='button black' value='log' onclick='v(\"Math.log\")'></td>");
client.println("<td><input type='button' class='button black' value='C' onclick='c(\"\")'></td>");
client.println("<td><input type='button' class='button orange' value='=' onclick='e()'></td>");
client.println("</tr>  </tbody>  </table>");
client.println("<table>  <tbody>  <tr>     <td>  ");
client.println("<body onload='updateTime()'> ");
client.println("<!-- viewBox is coordinate system, width and height are on-screen size --> ");
client.println("<svg id='clock' viewBox='0 0 100 100' width='120' height='120'> ");
client.println("<circle id='face' cx='50' cy='50' r='45'/> <!-- the clock face --> ");
client.println("<circle id='smallface' cx='50' cy='32' r='10'/> <!-- the small clock face --> ");
client.println("<g id='ticks'> ");
client.println("<!-- 12 hour tick marks --> ");
client.println("<line x1='50' y1='5.000' x2='50.00' y2='10.00'/> ");
client.println("<line x1='72.50' y1='11.03' x2='70.00' y2='15.36'/> ");
client.println("<line x1='88.97' y1='27.50' x2='84.64' y2='30.00'/> ");
client.println("<line x1='95.00' y1='50.00' x2='90.00' y2='50.00'/> ");
client.println("<line x1='88.97' y1='72.50' x2='84.64' y2='70.00'/> ");
client.println("<line x1='72.50' y1='88.97' x2='70.00' y2='84.64'/> ");
client.println("<line x1='50.00' y1='95.00' x2='50.00' y2='90.00'/> ");
client.println("<line x1='27.50' y1='88.97' x2='30.00' y2='84.64'/> ");
client.println("<line x1='11.03' y1='72.50' x2='15.36' y2='70.00'/> ");
client.println("<line x1='5.000' y1='50.00' x2='10.00' y2='50.00'/> ");
client.println("<line x1='11.03' y1='27.50' x2='15.36' y2='30.00'/> ");
client.println("<line x1='27.50' y1='11.03' x2='30.00' y2='15.36'/> ");
client.println("</g> ");
client.println("<g id='smallticks'> ");
client.println("<!-- 12 hour tick marks --> ");
client.println("<line x1='50' y1='24' x2='50' y2='22'/> ");
client.println("<line x1='58' y1='32' x2='60' y2='32'/> ");
client.println("<line x1='50' y1='40' x2='50' y2='42'/> ");
client.println("<line x1='42' y1='32' x2='40' y2='32'/> ");
client.println("</g> ");
client.println("<g id='numbers'> ");
client.println("<!-- Number the cardinal directions--> ");
client.println("<text x='50' y='18'>12</text><text x='85' y='53'>3</text> ");
client.println("<text x='50' y='88'>6</text><text x='15' y='53'>9</text> ");
client.println("</g> ");
client.println("<!-- Draw hands pointing straight up. We rotate them in the code. --> ");
client.println("<g id='hands'> <!-- Add shadows to the hands --> ");
client.println("<line id='hourhand' x1='50' y1='50' x2='50' y2='24'/> ");
client.println("<line id='minutehand' x1='50' y1='50' x2='50' y2='20'/> ");
client.println("<line id='secondhand' x1='50' y1='32' x2='50' y2='24'/> ");
client.println("</g> ");
client.println("</svg> ");
client.println("</body>   </td>");
client.println("<td>");
client.println("<form name='theClock'>");
client.println("<input type=text class='button buttondigiclock black' name='theDate'  style='font-size:20px;text-align: center;'>");
client.println("</td>");
client.println("<td>");
client.println("<input type=text class='button buttondigiclock black' name='theTime'  style='font-size:20px;text-align: center;'>");
client.println("</form>");
client.println("</td>  </tr>  </tbody>  </table> ");
client.println("<table> ");
client.println("<tbody>  <tr>");
client.println("<td>");
client.println("<form name='theWeather'>");
client.println("<input type=text class='button buttondigiclock black' name='theTemp'  style='font-size:20px;text-align: center;'>   "); 
client.println("</td>");
client.println("<td>");
client.println("<input type=text class='button buttondigiclock black' name='theHumi'  style='font-size:20px;text-align: center;'>    ");
client.println("</td>");
client.println("<td>");
client.println("<p>");
client.println("<a href=\"/DHT on\" class='button buttondigidht black' style='font-size:20px;text-align: center;'>DHT on</a>");
client.println("</p>");
client.println("</td>");
client.println("<td>");
client.println("<a href='/Logout' class='button buttondigidht black' style='font-size:20px;text-align: center;'>Logout</a>");
client.println("</td>");
 client.println("</form>");
client.println("</tr>");
client.println("</tbody></table> </div></div>");
client.println("<script type='text/javascript'>");
client.println("function c(val){");
client.println("document.getElementById('d').value=val;}");
client.println("function v(val){");
client.println("document.getElementById('d').value+=val;}");
client.println("function e() { ");
client.println("try { ");
  client.println("c(eval(document.getElementById('d').value)) } ");
client.println("catch(e) {");
  client.println("c('Error') } }  ");
client.println("</script></body>");
client.println("<head> ");
client.println("<script> ");
client.println("function updateTime() { ");

client.print("var temperature =");
client.print(temp);
client.println(";");
client.print("var humidity =");
client.print(humi);
client.println(";");


client.println("var now = new Date();");
client.println(" var sec = now.getSeconds(); ");
client.println(" var min = now.getMinutes(); ");
client.println("var hour = (now.getHours() % 12) + min/60; ");
client.println("var secangle = sec*6; ");
client.println("var minangle = min*6; ");
client.println("var hourangle = hour*30;");
client.println("var actualMonth = now.getMonth() + 1;  ");
client.println("var tempangle = temperature*9;");
 client.println("var humiangle = humidity*4.5;");
     //Prepare time output!
client.println("document.theClock.theTime.value = '' ");
client.println("+ now.getHours() + ':' ");
client.println("+ now.getMinutes() + ':' ");
client.println("+ now.getSeconds();");
client.println("document.theClock.theDate.value = '' ");
client.println("+ now.getFullYear() + ':' ");
client.println("+ actualMonth + ':' ");
client.println("+ now.getDate();    ");


client.println("document.theWeather.theTemp.value = '' ");
client.println("+ temperature + ' degree C'; ");
client.println("document.theWeather.theHumi.value = '' ");
 client.println("+ humidity + '%'; ");//........modification 4

         // Get SVG elements for the hands of the clock
client.println("var sechand = document.getElementById('secondhand'); ");
client.println("var minhand = document.getElementById('minutehand'); ");
client.println("var hourhand = document.getElementById('hourhand'); ");
         // Set an SVG attribute on them to move them around the clock face
client.println("sechand.setAttribute('transform', 'rotate(' + secangle + ',50,32)'); ");
client.println("minhand.setAttribute('transform', 'rotate(' + minangle + ',50,50)'); ");
client.println("hourhand.setAttribute('transform', 'rotate(' + hourangle + ',50,50)'); ");
client.println("setTimeout(updateTime, 1000); ");
client.println(" } ");
client.println("</script> ");
client.println("<style> ");
       /* These CSS styles all apply to the SVG elements defined below */
client.println("#clock { ");
         /* styles for everything in the clock */
client.println(" stroke: black; ");
         /* black lines */
client.println("stroke-linecap: round; ");
         /* with rounded ends */
client.println("fill: #eef; ");
         /* on a light blue gray background */
client.println("} ");
client.println("#face { stroke-width: 3px;} ");
       /* clock face outline */
client.println("#smallface { stroke:green; stroke-width: 1px;} ");
       /* clock face outline */
client.println("#ticks { stroke-width: 2; } ");
       /* lines that mark each hour */
client.println("#smallticks { stroke:green; stroke-width: 1; } ");
client.println("#hourhand {stroke-width: 5px;} ");
       /* wide hour hand */
client.println("#minutehand {stroke: deepskyblue; stroke-width: 3px;}");
client.println("#secondhand {stroke:red; stroke-width: 1px;} ");
client.println("#numbers { ");
         /* how to draw the numbers */
client.println("font-family: sans-serif; font-size: 7pt; font-weight: bold; ");
 client.println("text-anchor: middle; stroke: none; fill: blue; ");
client.println("} ");
client.println("</style> ");
client.println("</head>");
client.println("</html>");
  
   delay(1);
   Serial.println("Client disonnected");
   Serial.println("");

 }//프로그램 끝