ESP8266 사용하기

이하정·2021년 7월 25일
0

한이음

목록 보기
3/3

📝 시작하기전에...
안녕하세요, 오늘은 ESP8266을 사용해서 와이파이로 제어해보겠습니다.

라이브러리 설치하기


에듀이노 ESP8266

ESP8266 모듈을 사용하기 위해 라이브러리를 설치해주어야 합니다.
아두이노 IDE에서 파일 > 환경설정에 들어갑니다.

추가적인 보드 매니저 URLs에 다음 주소를 입력한 후 확인 버튼을 눌러줍니다.

http://arduino.esp8266.com/stable/package_esp8266com_index.json

툴>보드>보드매니저에서 ESP8266을 검색한 후 ESP8266을 설치합니다.

설치 후 아두이노IDE를 재실행시킵니다.

툴>보드>NodeMCU 1.0(ESP-12E Module)을 선택한 후 포트를 설정하면 사용가능합니다.

Blink 예제


아두이노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제어를 해보겠습니다.

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&nbsp;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을 사용하여 웹페이지를 만들고 웹페이지에서 사용자의 현재 온도를 확인했습니다.

다음 시간에는 사용자의 현재 경도와 위도를 받아와서 국가로 변환 후 웹페이지에 나타내보겠습니다.

0개의 댓글

관련 채용 정보