* 선행 조건
- 이 블로그에서 사용하는 분할 코딩 규칙을 알고 있다
사용제품: NodeMCU V2 CP2102/ESP8266/ESP-12E
핀 연결: x
외부 라이브러리:
x
소스 코드:
- 프로젝트 이름: web
더보기
web 탭
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
softAp_setup();
web_setup();
}
void loop() {
web_start();
}
_web 탭
#include <ESP8266WebServer.h>
IPAddress local_IP(192,168,4,1);
IPAddress gateway(192,168,4,1);
IPAddress subnet(255,255,255,0);
ESP8266WebServer server(80);
_html 탭
// 공통 html
const char HTTP_HEADER[] PROGMEM = "<!DOCTYPE html><html lang=\"en\"><head>"
"<meta charset=\"utf-8\" name=\"viewport\"content=\"width=device-width,initial-scale=1,user-scalable=no\"/><link rel=\"icon\" href=\"data:,\">"
"<title> Test Web </title>";
const char HTTP_STYLE[] PROGMEM = "<style>"
".c{text-align:center;}div,"
"input{padding:5px;font-size:1em;}input{width:95%;}"
"body{text-align:center;font-family:verdana;}" // max-width:300px;
"button{border:0;border-radius:0.3rem;background-color:#1fa3ec;color:#fff;line-height:2.4rem;font-size:1.2rem;width:100%} "
"</style>";
const char HTTP_HEAD_END[] PROGMEM = "</head><body><div style=\"text-align:center;display:inline-block;min-width:260px;\">";
const char HTTP_END[] PROGMEM = "</div></body></html>\r\n";
// wifi html
const char HTTP_PORTAL_OPTIONS[] PROGMEM = "<form action=\"/wifi\"method=\"get\"><button>Configure WiFi</button></form><br/>";
_softap 탭
// ap
String ssid_AP = "AP 이름";
String pass_AP = "AP 비밀번호";
// mac
uint8_t mac_array[6];
char _mac[17];
String mac;
page 탭
String Common_page(){
String page;
page = (const __FlashStringHelper *)HTTP_HEADER;
page += (const __FlashStringHelper *)HTTP_STYLE;
page += (const __FlashStringHelper *)HTTP_HEAD_END;
return page;
}
handler 탭
void handleNotFound() {
String message = "Page Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
}
void handleRoot() {
String page = Common_page();
page+= (const __FlashStringHelper *)HTTP_PORTAL_OPTIONS;
page+= (const __FlashStringHelper *)HTTP_END;
server.send(200, "text/html", page);
}
main 탭
void web_setup(){
server.begin();
Serial.println("Web Server started");
server.onNotFound(handleNotFound);
server.on("/", handleRoot);
server.on("/main", handleRoot);
}
void web_start(){
server.handleClient();
}
softap 탭
void softAp_setup(){
delay(10);
Serial.println();
Serial.print("AP mode start....");
if(WiFi.mode(WIFI_AP)){
Serial.println("Succeed");
}
else{
Serial.println("Failed");
}
Serial.print("Setting softAP....");
if(WiFi.softAP(ssid_AP,pass_AP)){
Serial.println("Succeed");
Serial.println();
Serial.print("AP SSID: ");
Serial.println(ssid_AP);
}
else{
Serial.println("Failed");
Serial.println("Password should be at least 8 character long");
}
WiFi.softAPConfig(local_IP, gateway, subnet);
Serial.print("Web Server Address: ");
Serial.println(local_IP);
mac = get_mac();
Serial.println("MAC address: ");
Serial.println(mac);
}
String get_mac(){
WiFi.macAddress(mac_array);
for (int i = 0; i < sizeof(mac_array); i++){
if(i == sizeof(mac_array)-1){
sprintf(_mac, "%s%02x", _mac, mac_array[i]);
}
else{
sprintf(_mac, "%s%02x-", _mac, mac_array[i]);
}
}
String result(_mac);
return result;
}
시리얼 모니터 및 결과
더보기
* wifi 설정 기능이 궁금하다면 링크 클릭
소스 파일
'아두이노 > NodeMCU' 카테고리의 다른 글
[NodeMCU] EEPROM 읽기 및 쓰기 (0) | 2020.07.25 |
---|---|
[NodeMCU] WiFi 연결 테스트 (0) | 2020.07.24 |
[NodeMCU] DHT11 측정 테스트 (0) | 2020.07.24 |
[NodeMCU] 아두이노 IDE 설정 (0) | 2020.07.24 |