안녕하세요~ 지난 글에서는 NodeMCU와 네트워크를 연결하고, 주변 WIFI를 스캔해서 검색해보는 것을 공부해봤습니다.
2019/07/17 - [메이커 자료/NodeMCU] - NodeMCU ( 3 / 4 ) : WiFi 연결, 스캔하기
이번 글은 NodeMCU가 WiFi연결을 해서 네트워크를 통해 원격으로 LED를 조정하는 예제를 해보겠습니다.
1. NodeMCU의 소개
2. 아두이노 IDE에서 NodeMCU 환경 설정하기
3. NodeMCU - LED / 푸시버튼 연결하기
4. NodeMCU - WiFi 네트워크에 연결하기
5. NodeMCU 주변 WiFi 스캔하기
6. NodeMCU 네트워크로 LED원격 조정하기
6. NodeMCU 네트워크로 LED 원격 조정하기
이번 예제는 NodeMCU에서 클라이언트를 생성하고, 인터넷에서 접속하여 LED를 원격 조정하는 예제입니다.
#include <ESP8266WiFi.h>
const char* ssid = "와이파이 이름";
const char* password = "비밀번호";
int ledPin=2;
WiFiServer server(80); //NODE MCU를 서버로 사용하겠다 // 포트번호는 80
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
delay(100);
pinMode(ledPin,OUTPUT);
digitalWrite(ledPin,LOW);
Serial.println();
Serial.print("CONNECTING TO ");
Serial.println(ssid);
WiFi.begin(ssid, password); // 와이파이 이름과 비밀번호를 통해 WIFI연결을 시작하겠다
// WL_CONNECTED라는 값을 돌려준다
while(WiFi.status() != WL_CONNECTED){ // 네트워크의 연결 상태, 8개의 리턴값
/ STATUS와 WL_CONNECTED 값이 같은지를 통해 제대로 연결이 되있는지를 확인할 수 있다
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("Wifi connected!");
server.begin();
Serial.println("Server started");
Serial.print("Use this URL to connect: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
//서버 IP주소를 알려준다. 브라우저의 주소란에 치면 NODE MCU가 서버로 있는 것으로 접근할 수 있다.
Serial.println("/");
Serial.println("");
}
void loop() {
// put your main code here, to run repeatedly:
WiFiClient client = server.available();
if(!client) {
return;
}
Serial.println("new client");
while(!client.available()){
delay(1);
}
//서버와 연결된 클라이언트가 있으면 다음으로 넘어가라
String request = client.readStringUntil('\r');
// \r 명령어, 즉 줄 바꿈 명령어가 나오기 전까지 계속 데이터를 읽어라
Serial.println(request);
client.flush();
//버퍼에 남은것을 없애라
int value = LOW;
if(request.indexOf("/LED=ON") != -1){
digitalWrite(ledPin,HIGH);
value=HIGH;
}
// 읽어들인 문자에 /LED=ON 이 있는지 없는지 확인하라, (즉 /LED=ON 이 -1 인 상태)
//그리고 digitalWrite에 적용되는 핀에 맞추어서 값을 HIGH로 가져라 ==> 불을 켜라
if(request.indexOf("/LED=OFF") != -1){
digitalWrite(ledPin,LOW);
value=LOW;
}
//
// 읽어들인 문자에 /LED=OFF 이 있는지 없는지 확인하라, (즉 /LED=OFF 이 -1 인 상태)
//그리고 digitalWrite에 적용되는 핀에 맞추어서 값을 LOW로 가져라 ==> 불을 꺼라
client.println("HTTP/1.1 200 OK");
client.println("Content-Type : text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("LED is turned ");
if(value)
client.println("On");
else
client.print("Off");
client.println("<br><br>");
client.println("<a href = \"/LED=ON\"\"><button>Turn On</button></a>");
client.println("<a href = \"/LED=OFF\"\"><button>Turn Off</button></a>");
client.println("</html>");
//HTML로 서버에 버튼을 생성하고 사이트를 만들어라
delay(1);
Serial.println(client.connect("http://newsky2.kma.go.kr/service/SecndSrtpdFrcstInfoService2/ForecastSpaceData?serviceKey=VlJoz90r6QOqEXPQIwP0jdLqCtgkQbgXo%2Fy0L%2B4x6z6VjH5LPx3RPYAH4RAJmaqSWCh7BM7s5KCSDPR5s%2F27Lg%3D%3D&base_date=20190704&base_time=0500&nx=60&n=127&numOfRows=10&pageNo=1&_type=xml",8));
Serial.println("Client disconnected !! ");
Serial.println();
}
<setup 부분>
네트워크 연결시 led의 불을 끄고 시작합니다.
<loop문>
WiFiClient client = server.available();
=>서버와 연결된 클라이언트가 있으면 다음으로 넘어갑니다.
String request = client.readStringUntil('\r');
=>\r 명령어, 즉 줄 바꿈 명령어가 나오기 전까지 계속 데이터를 읽습니다
if(request.indexOf("/LED=ON") != -1){
digitalWrite(ledPin,HIGH);
value=HIGH; }
읽어 들인 문자에 /LED=ON 이 있는지 없는지 확인하고, (즉 /LED=ON 이 -1 인 상태) 그리고 digitalWrite에 적용되는 핀에 맞추어서 값을 HIGH로 가져갑니다 ==> LED 전구를 켜라.
if(request.indexOf("/LED=OFF") != -1){
digitalWrite(ledPin,LOW);
value=LOW; }
읽어 들인 문자에 /LED=OFF 이 있는지 없는지 확인하고, (즉 /LED=OFF 이 -1 인 상태) 그리고 digitalWrite에 적용되는 핀에 맞추어서 값을 LOW로 가져갑니다 ==> LED 전구를 꺼라
client.println("HTTP/1.1 200 OK");
client.println("Content-Type : text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("LED is turned ");
if(value)
client.println("On");
else
client.print("Off");
client.println("<br><br>");
client.println("<a href = \"/LED=ON\"\"><button>Turn On</button></a>");
client.println("<a href = \"/LED=OFF\"\"><button>Turn Off</button></a>");
client.println("</html>");
=>Html을 활용해서 접속 사이트에 Turn On, Turn Off 버튼을 만들고 주소에 Turn On 상태 일시 /LED=ON을 추가하며, Turn Off 일시 주소에 /LED=OFF를 추가합니다.
주의! 같은 wifi로 접속해야만 가능합니다.
이렇게 WiFi를 통해 원격 LED 조정하기 예제가 완성되었습니다.
알기 쉽게 풀어서 쓰려고 노력을 했는데,
NodeMCU에 대해 좀 이해가 되셨을런지 모르겠네요.
NodeMCU의 기초는 여기까지입니다.
고생하셨습니다.
'메이커 자료 > NodeMCU' 카테고리의 다른 글
NodeMCU ( 3 / 4 ) : WiFi 연결, 스캔하기 (0) | 2019.07.17 |
---|---|
NodeMCU ( 2 / 4 ) : LED, 푸시버튼 연결하기 (0) | 2019.07.17 |
NodeMCU ( 1 / 4 ) : 소개, 환경설정 (0) | 2019.07.17 |