ESP8266 이란?
ESP8266은 Espressif System에서 개발한 저렴하고 소형의 Wi-Fi 모듈 및 MicroControllerUnit이다.
이 모듈은 무선 통신 기능을 갖추고 있어 다양한 무선 프로젝트 및 인터넷 연결 디바이스에 적합하다.
ESP8266은 저전력 소비, 저렴한 가격, 강력한 성능, 오픈 소스 코드 및 커뮤니티의 지원으로 인기가 많다.
ESP8266 모듈은 주로 아두이노와 같은 플랫폼에서 프로그래밍되며, 많은 코드 및 라이브러리가 이 모듈을 지원한다.
이 모듈을 사용하면 Wi-Fi 연결이 필요한 다양한 프로젝트를 구현할 수 있다.
예를 들어 스마트 홈 기기, IoT(Internet of Things) 장치, 원격 제어시스템, 센서 네트워크 등이 있다.
ESP8266은 여러가지 모델과 버전이 있으며,
ESP-01, ESP-12, ESP-32 등이 널리 사용되는 것 중 일부이다.
이러한 모듈은 다양한 핀 구성과 기능을 제공하므로 프로젝트에 맞게 선택할 수 있다.
ESP8266 Library
ESP8266 모듈을 사용하는 아두이노 기반 프로젝트를 개발할 때 유용한 일부 라이브러리이며
각 프로젝트 목적에 따라 필요한 라이브러리를 선택하여 사용할 수 있다.
라이브러리는 Arduino IDE의 라이브러리 관리자를 통해 쉽게 설치하고 사용할 수 있다.
- ESP8266WiFi 라이브러리:
- 기능: Wi-Fi 네트워크에 연결하고 관리하는 기능을 제공한다.
- 활용 예시: Wi-Fi 연결, 웹 서버 및 클라이언트, MQTT 통신 등의 프로젝트에 사용된다.
- 참고: 아두이노 IDE에서 기본으로 제공되는 라이브러리 중 하나이다.
- PubSubClient 라이브러리:
- 기능: MQTT 프로토콜을 사용하여 메시지 브로커와 통신하기 위한 클라이언트를 제공한다.
- 활용 예시: IoT 프로젝트에서 메시지 브로커와 통신할 때 사용된다.
- ArduinoJson 라이브러리:
- 기능: JSON 데이터의 파싱 및 생성을 지원한다.
- 활용 예시: 웹 API와 통신하거나, 구조화된 데이터를 다룰 때 사용된다.
- DHT 라이브러리:
- 기능: DHT 시리즈 센서를 통해 온도 및 습도 값을 읽어오는 기능을 제공한다.
- 활용 예시: 환경 모니터링 및 제어 시스템에서 사용된다.
- Wire 라이브러리:
- rlsmd: I2C 통신을 위한 라이브러리로, 여러 디바이스 간에 데이터를 교환할 때 사용된다.
- 활용 예시: 센서 및 외부 장치와의 통신에 사용된다.
- ESP8266HTTPClient 라이브러리:
- 기능: HTTP 클라이언트를 구현하여 웹 서버와 통신하는 기능을 제공한다.
- 활용 예시: 웹 API 호출, 웹 서버와 데이터 교환 등에 사용된다.
ESP8266 라이브러리 초기 설정
ESP8266 라이브러리 활용
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#ifndef STASSID
#define STASSID "your-ssid"
#define STAPSK "your-password"
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
const char* host = "192.168.1.1"; // TCP 서버의 IP 주소
const uint16_t port = 3000; // TCP 서버의 포트 번호
ESP8266WiFiMulti WiFiMulti;
void setup() {
Serial.begin(115200);
// WiFi 연결을 위해 모드 설정 및 AP (접속점) 추가
WiFi.mode(WIFI_STA);
WiFiMulti.addAP(ssid, password);
Serial.println();
Serial.println();
Serial.print("Wait for WiFi... ");
// WiFi 연결 대기
while (WiFiMulti.run() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
delay(500);
}
void loop() {
Serial.print("connecting to ");
Serial.print(host);
Serial.print(':');
Serial.println(port);
// WiFiClient 클래스를 사용하여 TCP 연결 생성
WiFiClient client;
// 서버에 연결 시도
if (!client.connect(host, port)) {
Serial.println("connection failed");
Serial.println("wait 5 sec...");
delay(5000);
return;
}
// 서버에 문자열 전송
client.println("hello from ESP8266");
// 서버로부터 한 줄 읽기
Serial.println("receiving from remote server");
String line = client.readStringUntil('\r');
Serial.println(line);
// 연결 닫기
Serial.println("closing connection");
client.stop();
Serial.println("wait 5 sec...");
delay(5000);
}
위 코드는 ESP8266을 사용하여 Wi-Fi 네트워크에 연결하고, 지정된 IP 주소 및 포트 번호의 TCP 서버에 문자열을 보내는 예제이다. 다시 말해 문자열을 TCP 서버에 보내고 한 줄의 응답을 출력한다.로컬 네트워크에서 TCP 서버를 실행해댜 한다. 코드는 Arduino IDE 및 ESP8266 보드 지원을 사용하여 개발된다.
이 코드의 주요 기능은 다음과 같다.
- Wi-Fi 연결 설정:
'WiFi.mode(WIFI_STA)' 및 'WiFiMulti.addAP(ssid, password)'를 사용하여 Wi-Fi 연결 설정 - Wi-Fi 연결 대기:
'while (WiFimulti.run() != WL_CONNECTED)'를 사용하여 Wi-Fi 연결 성공시 까지 대기 - TCP 서버에 연결:
'WiFiCleint client'를 클래스 객체를 생성하여 지정된 IP주소와 포트 번호의 TCP 서버에 연결 시도 - 문자열 전송:
'client.println("Hello from ESP8266")' 을 사용하여 서버에 해당 문자열 전송 - 연결 종료 및 대기:
연결을 종료하고 5초 대기한 후에 루프 반복
코드 실랭하려면 ESP8266을 Wi-Fi에 연결하고, 지정된 IP 주소와 포트번호에 동작하는 TCP 서버 필요,
이 코드 실행시 ESP8266이 Wi-Fi에 연결하고 지정된 TCP 서버에 "hello from ESP8266" 문자열을 전송하며,
서버로부터의 응답을 Serial Monitor에 출력한다.
#include <ESP8266WiFi.h>
// Wi-Fi 설정: Wi-Fi 연결에 필요한 SSID와 비밀번호 설정
const char* ssid = "SSID";
const char* password = "password";
// Server 정보 설정: HTTP GET 요청 보낼 서버의 host와 port 설정
const char* host = "google.com"l
const uint16_t port = 80;
void setup()
{
// Serial 통신 시작
Serial.begin(115200);
Serial.print("Connecting to ");
Serial.println(ssid);
// Wi-Fi 연결 시도
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
// 연결이 완료될 때까지 대기
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
// 연결 성공 시 정보 출력
Serial.print("WiFi connected\nIP address: ");
Serial.println(WiFi.localIP());
}
/*
- Serial 통신을 시작하고, 지정된 SSID와 비밀번호로 Wi-Fi에 연결을 시도한다.
- 연결이 완료되면 Wi-Fi의 로컬 IP 주소를 Serial Monitor 에 출력한다.
*/
void loop()
{
// 정적 변수를 사용하여 한 번만 연결을 시도하도록 함
static bool watit = false;
Serial.print("Connecting to ");
Serial.println(host);
// Wi-Fi 클라이언트 생성 및 서버에 연결 시도
WiFiClient client;
if(!client.connect(host, port))
{
Serial.println("connection failed");
delay(5000);
return;
}
// Server에 데이터 전송
Serial.println("sending data to server");
if (client.connected())
{
client.print("GET / HTTP/1.1\n");
client.print("Host : www.google.com\n\n");
}
delay(1000);
// Server로부터 응답 출력
Serial.println("receiving from remote server");
while (client.available())
{
Serial.print(client.read());
}
Serial.println("\nClosing connection");
client.stop();
// 한 번만 연결을 시도한 후 30초 대기
if(wait)
{
delay(30000);
}
wait = true;
}
이 코드는 'google.com' 서버로 간단한 HTTP GET 요청을 보내고 응답을 출력하는 예제이다.
- 'loop' 함수에서는 한 번만 연결을 시도하기 위해 정적 변수 'wait'를 사용한다.
- 서버에 연결이 실패하면 "connection failed"를 출력하고 5초 대기한 후 함수를 종료한다.
- 성공적으로 연결되면 서버로 HTTP GET 요청을 보내고, 서버로부터의 응답을 출력한다.
- 연결을 닫은 후 'wait' 변수가 'true'로 설정되어 30초 대기하고, 이후에는 루프를 반복하여 다시 연결을 시도한다.
'Firmware & Embedded > Components' 카테고리의 다른 글
Issues with Enabling Pi Camera on Raspberry Pi 4 with Ubuntu 20.04 (0) | 2024.01.31 |
---|---|
DOF(Degree of Freedom) (0) | 2024.01.08 |
Voltage step-up DC to DC Converter Module (XL6009E1) (0) | 2022.12.03 |
Print Potentiometer Voltage and Resistance value. (0) | 2022.11.25 |
Switch toggle control source(Button, LED) (0) | 2022.11.23 |