본문 바로가기

Arduino/[2] Arduino Module

[Arduino Module] #24. 와이파이 모듈(NodeMcu/ESP8266)

728x90
반응형

와이파이 모듈(ESP8266)

esp8266

아래 접은 글 [더보기]에서 ESP8266에 대한 설명을 확인한다.

더보기
  • ESP8266 12-E chip에는 17개의 다 기능 핀이 있다. 그러나 모든 Pin이 개발보드의 Pin에 연결되어 있는 것은 아니다.
  • 위 NodeMCU-8266 개발보드(ESP8266 개발보드는 ESP-12E 기반 개발 보드 임)는 13개의 Pin을 갖고 있다. 개발보드에 따라 다른 Pin 배열을 갖고 있을 수 있기 때문에 자신 사용하는 개발보드의 Pin 배열을 확인하고 사용하여야 한다.
  • GPIO6 - GPIO11은 통합된 SPI flash에 연결되어 있기 때문에 다른 용도로는 권장되지 않는다. NodeMCU-8266 개발보드의 Pin에는 이들 Pin이 연결되어 있지 않다.
  • 아래 Pin은 Booting 시 영향을 받는다. Booting 시 영향을 고려하여 Pin을 사용하여야 한다.
  • GPIO0는 개발보드의 Switch에 연결되어 있고 Booting 시 LOW 이면 FLASH Mode, HIGH 이면 BOOT Mode 가 된다. Booting이 종료된 다음에는 다른 용도로 사용할 수 있다.
  • GPIO2는 개발보드의 LED에 연결되어 있다. LED와 함께 연동되는 것이 문제되지 않는 경우에는 다른 용도로 사용할 수 있다.
  • GPIO16 사용하여 ESP8266 Deep sleep에서 Wake up 있다. Deep sleep에서 Wake up 용도로 사용하려면 GPIO16 RST 핀에 연결해야 한다.

라이브러리 설치하기

24.04.01 수정

 

NodeMCU Devkit 1.0(ESP-12E)을 아두이노 IDE에서 사용하기 위해서는 ESP8266 라이브러리를 포함하고 있는 ESP8266 아두이노 코어를 아두이노 IDE에 설치하여야만 한다.

 

ESP8266 모듈을 사용하기 위해 라이브러리를 설치해주어야 한다.
아두이노 IDE에서 파일 > 환경설정에 들어갑니다. 추가적인 보드 매니저 URLs에 다음 주소를 입력한 후 확인 버튼을 눌러준다.

 

툴 > 보드 > 보드매니저에서 ESP8266을 검색한 후 ESP8266을 설치한다. 이때 파일 다운로드 과정을 확인할 수 있다. 다운로드에 약 20분 정도 소요된다.

설치 후 아두이노IDE를 재실행시킨다. 툴> 보드> NodeMCU 1.0(ESP-12E Module)을 선택한 후 포트를 설정하면 사용 가능하다.

외부 라이브러리 설치하기

환경설정의 추가적인 보드 매니저 URLs에 아래의 URL을 복사하여 붙여 넣기 한 뒤 확인을 클릭한다.

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

 

그다음 툴 -> 보드 -> 보드 매니저를 클릭한다. 

시리얼 드라이버 설치 

모델에 따라서 UART 칩셋으로 보통 CH340 또는 CP210x를 사용하는데 이 칩셋용 드라이버가 설치되어 있지 않다면 시리얼 모니터를 열 수 없고 스케치의 업로드도 할 수 없게 된다. 

 

제어판의 장치관리자에서 포트항목을 펼쳤을때 CH340 포트 또는 CP210x 포트가 없다면 모듈을 USB로 연결한 상태에서 아래 드라이버를 설치해 주면 포트가 생성되고 시리얼 모니터를 사용할 수 있게 된다. 

예제 실행하기

아두이노 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);
}

아두이노 ESP8266 모듈 자체가 '아두이노' 자체처럼 작동하는 것을 볼 수 있다.

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("클라이언트 연결 해제");
}

와이파이 이름, 와이파이 비밀번호라고 되어있는 부분은 각자 네트워크 환경에 맞게 수정해야 한다.

업로드 후 시리얼모니터에 들어가면 웹페이지 링크가 뜨며, 링크로 접속해 주면 아래와 같은 화면을 확인할 수 있다.

728x90
반응형
댓글