📝 시작하기전에...
안녕하세요, 오늘은 ESP8266을 사용해서 와이파이로 제어해보겠습니다.
ESP8266 모듈을 사용하기 위해 라이브러리를 설치해주어야 합니다.
아두이노 IDE에서 파일 > 환경설정
에 들어갑니다.
추가적인 보드 매니저 URLs에 다음 주소를 입력한 후 확인 버튼을 눌러줍니다.
http://arduino.esp8266.com/stable/package_esp8266com_index.json
툴>보드>보드매니저
에서 ESP8266을 검색한 후 ESP8266
을 설치합니다.
설치 후 아두이노IDE를 재실행시킵니다.
툴>보드>NodeMCU 1.0(ESP-12E Module)
을 선택한 후 포트를 설정하면 사용가능합니다.
아두이노IDE를 실행 후 파일 > 예제 > ESP8266 > Blink
를 클릭합니다.
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, LOW); // LED ON
delay(1000);
digitalWrite(LED_BUILTIN, HIGH); // LED OFF
delay(2000);
}
내장 LED가 켜졌다 꺼졌다 반복되는 것을 확인했다면 본격적으로 LED제어를 해보겠습니다.
ESP8266의 기본 예제인 LED제어를 해보겠습니다.
#include <ESP8266WiFi.h>
#define PIN_LED D1
const char* ssid = "와이파이 아이디";
const char* password = "와이파이 비밀번호";
WiFiServer server(80);
void setup() {
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, LOW);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connecting to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
Serial.println("Server started");
}
void loop() {
WiFiClient client = server.available();
if(!client) return;
Serial.println("새로운 클라이언트");
client.setTimeout(5000);
String request = client.readStringUntil('\r');
Serial.println("request: ");
Serial.println(request);
if(request.indexOf("/ledoff") != -1) {
digitalWrite(PIN_LED, LOW);
}
else if(request.indexOf("/ledon") != -1) {
digitalWrite(PIN_LED, HIGH);
}
else {
Serial.println("invalid request");
digitalWrite(PIN_LED, digitalRead(PIN_LED));
}
while(client.available()) {
client.read();
}
client.print("HTTP/1.1 200 OK");
client.print("Content-Type: text/html\r\n\r\n");
client.print("<!DOCTYPE HTML>");
client.print("<html>");
client.print("<head>");
client.print("<meta charset=\"UTF-8\">");
client.print("<title>LED CONTROL</title>");
client.print("</head>");
client.print("<body>");
client.print("<h2>HANIUM LED Control Page</h2>");
client.print("<a href='/ledon'>LED ON</a>");
client.print("<br>");
client.print("<a href='/ledoff'>LED OFF</a>");
client.print("<br>");
client.print("LED Status : ");
client.print((digitalRead(PIN_LED)) ? "ON" : "OFF");
client.print("</body>");
client.print("</html>");
Serial.println("클라이언트 연결 해제");
}
와이파이 이름
, 와이파이 비밀번호
라고 되어있는 부분은 각자 네트워크 환경에 맞게 수정해야합니다.
업로드 후 시리얼모니터에 들어가면 웹페이지 링크가 뜹니다.
링크로 접속해주면 아래와같은 화면을 확인할 수 있습니다.
웹페이지에는 LED를 켜고 끌 수 있는 버튼(?)과 현재 LED의 상태가 나타나 있습니다.
홈페이지에서 LED ON
을 누르면 LED가 켜집니다.
홈페이지에서 LED OFF
을 누르면 LED가 꺼집니다.
앞에서 했던 LED제어 예제에서 LED를 적외선 센서로 바꾸어 진행했습니다.
적외선센서 모듈을 사용하기 위한 라이브러리도 include해줍니다.
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
const char* ssid = "와이파이 이름";
const char* password = "와이파이 비밀번호";
WiFiServer server(80);
void setup() {
Serial.begin(115200);
mlx.begin();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connecting to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
Serial.println("Server started");
}
void loop() {
WiFiClient client = server.available();
if(!client) return;
Serial.println("새로운 클라이언트");
client.setTimeout(5000);
String request = client.readStringUntil('\r');
Serial.println("request: ");
Serial.println(request);
client.print("HTTP/1.1 200 OK");
client.print("Content-Type: text/html\r\n\r\n");
client.print("<!DOCTYPE HTML>");
client.print("<html>");
client.print("<head>");
client.print("<meta charset=\"UTF-8\" http-equiv=\"refresh\" content=\"1\">");
client.print("<title>LED CONTROL</title>");
client.print("</head>");
client.print("<body>");
client.print("<h2>HANIUM Read Object TempC</h2>");
Serial.print("Object : ") ;
Serial.println(mlx.readObjectTempC());
client.print("Object: ");
client.println(mlx.readObjectTempC());
delay(500);
client.print("</body>");
client.print("</html>");
Serial.println("클라이언트 연결 해제");
}
손을 갖다대지 않았을 때 실내온도인 26.29도가 측정됩니다.
손을 갖다대면 체온인 36.65도가 측정됩니다.
✍ 마무리하며..
ESP8266을 사용하여 웹페이지를 만들고 웹페이지에서 사용자의 현재 온도를 확인했습니다.
다음 시간에는 사용자의 현재 경도와 위도를 받아와서 국가로 변환 후 웹페이지에 나타내보겠습니다.