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

아두이노 ESP8266 NodeMCU 와이파이 0.96 모노크롬 OLED IOT 시계

coding art 2017. 6. 9. 21:31
728x90

필요한 예제 코딩과 절차에 관해서는 곧 출간 준비중인 종이 책 "라즈베리 와이파이 코딩"을 참고하기 바란다







































Webserver_nodemcu_form_OLED_Clock_01

#include <ESP8266WiFi.h>
#include <Wire.h>
#include <SSD1306.h>
 unsigned long currentHr = 0;
 unsigned long currentMin = 0;
 const char* ssid = "android1234";//자신의 스마트폰 핫스팟 ID 입력
 const char* password = "dddddddddd";//자신의 스마트폰 핫스팟 비밀번호 입력
 int ledPin = 2; //
 int clock_data_request =0;
 WiFiServer server(80);
 SSD1306  display(0x3c, D3, D5);
 String m;
 int c;
 
 void setup() {
   Serial.begin(115200);
   display.init();
   display.flipScreenVertically();
   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);
   }

   // Read the first line of the request
   String request = client.readStringUntil('\r');
   if( request.substring(5,16) != "favicon.ico") {//favicon.ico request 배제
   Serial.println(request);
   int l = request.length();
   Serial.print("String.length(request)=");
   Serial.println(l);
   m = request.substring(15,l-9);
   Serial.println(m);
   c = m.toInt();
   Serial.println(c);
   currentHr = c/100;
   currentMin =c%100;
   client.flush();
   }

   if( clock_data_request >=1 )  {
     for( int i = 0; i<1000000; i++  )  {
      OLED_Clock();
     }
   }

   if( request.substring(5,16) != "favicon.ico") {//favicon.ico request 배제

 // Return the response
   client.println("HTTP/1.1 200 OK");
   client.println("Content-Type: text/html");
   client.println(""); //  do not forget this on e
   client.println("<!DOCTYPE HTML>");
   client.println("<html>");
    client.println("<head>");
   //배경 색 문자 색 사이즈 HTML CSS 설정  
   client.println("<style>");
   client.println("body {");
   client.println("background-color: lightblue;");
   client.println("}");
   client.println("p {");
   client.println("color:red;");
   client.println("font-size:250%;");
   client.println("}");
   //입력창 배경 색 문자 색 사이즈 HTML CSS 설정
   client.println("input[type=text] {font-size:200%;border:7px solid black; border-radius:9dx;}");
   client.println("input[type=text]:hover{background:aliceblue;}");
   client.println("input[type=text]:focus{color:red; font-size:250%;}");
   //버튼 HTML CSS 설정  
    client.println(".button {");
    client.println("background-color: green;");
    client.println("border: none;");
    client.println("color: white;");
    client.println("padding: 15px 32px;");
    client.println("text-align: center;");
    client.println("text-decoration: none;");
    client.println("display: inline-block;");
    client.println("font-size: 30px;");
    client.println("margin: 14px 20px;");
    client.println("cursor: pointer;");
    client.println("}");

   client.println("</style>");
   client.println("<title>Page Title</title>");
   client.println("<h2> Clock setting with 0000 in hour & minute</h2>");
   client.println("</head>");
  
   client.println("<body>");
   client.print("<form method='get'>");
   client.print("<input type='text' name='lastname'>");
   client.print("<br><br>");
   client.print("<input type='button' value='Click me' on click='msg()'>");
   client.print("</form>");
  
   client.println("</body>");
   client.println("</html>");

   delay(1);
   Serial.println("Client disonnected");
   Serial.println("");
  
   } //favicon.ico배제 if 문 닫기 괄호
   clock_data_request++;
 }//loop 끝

void OLED_Clock() {
    unsigned long currentMillis = millis();
    unsigned long hr = currentHr + currentMillis/3600000;
    currentMillis = currentMillis%3600000;
    unsigned long minute = currentMin + currentMillis/60000;
    unsigned long second = currentMillis%60000;
    unsigned long sec = second/1000;
  
    display.clear();
    display.setTextAlignment(TEXT_ALIGN_LEFT);
    display.setFont(ArialMT_Plain_24);
    if( hr <12 ) {
      display.drawString(0, 15, "AM");
    }
    else if( hr <24 ) {
      display.drawString(0, 15, "PM");
      hr = hr - 12;
    }
    else {
      hr = hr -24;
      display.drawString(0, 15, "AM");
    }
    if( minute >= 60 ) {
      hr = hr + 1;
      minute = minute - 60;
    }
    display.drawString(0, 36, String(hr));
    display.drawString(25, 36,(":"));
    display.drawString(30, 36, String(minute));
    display.drawString(55, 36,(":"));
    display.drawString(60, 36, String(sec)); 
    display.display();
    delay(500);
}//프로그램 끝