아두이노 ESP8266 NodeMCU 와이파이 0.96 모노크롬 OLED IOT 시계
필요한 예제 코딩과 절차에 관해서는 곧 출간 준비중인 종이 책 "라즈베리 와이파이 코딩"을 참고하기 바란다
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);
}//프로그램 끝