와이파이 모듈(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로 연결한 상태에서 아래 드라이버를 설치해 주면 포트가 생성되고 시리얼 모니터를 사용할 수 있게 된다.
예제 실행하기
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);
}
아두이노 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 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("클라이언트 연결 해제");
}
와이파이 이름, 와이파이 비밀번호라고 되어있는 부분은 각자 네트워크 환경에 맞게 수정해야 한다.
업로드 후 시리얼모니터에 들어가면 웹페이지 링크가 뜨며, 링크로 접속해 주면 아래와 같은 화면을 확인할 수 있다.
'Arduino > [2] Arduino Module' 카테고리의 다른 글
[Arduino Module] #26. ESP32 CAM (0) | 2024.07.12 |
---|---|
[Arduino Module] #25. Wemos D1 R32 (1) | 2024.04.08 |
[Arduino Module] #23. 센서모듈(MPU6050) (0) | 2024.04.01 |
[Arduino Module] #22. 레이저 발광 (0) | 2024.04.01 |
[Arduino Module] #21. 조이스틱 모듈 (0) | 2024.04.01 |