Wi-Fi 통신의 개요
Wi-Fi는 무선 네트워크 기술로, 인터넷에 연결하거나 장치 간에 데이터를 무선으로 송수신할 수 있습니다. 임베디드 시스템에서는 ESP8266과 같은 Wi-Fi 모듈을 사용하여 네트워크 기능을 구현할 수 있습니다. 오늘은 Wi-Fi를 사용하여 데이터를 송수신하는 방법을 학습하겠습니다.
1. Wi-Fi 모듈의 기본 개념
ESP8266은 널리 사용되는 Wi-Fi 모듈로, 자체적으로 마이크로컨트롤러 기능을 제공하여 독립적으로 동작할 수 있습니다. ESP8266을 사용하여 Wi-Fi 네트워크에 연결하고, 데이터를 송수신하는 방법을 살펴보겠습니다.
2. ESP8266 설정
ESP8266 모듈을 설정하려면 Arduino IDE에서 ESP8266 보드 매니저를 설치해야 합니다.
ESP8266 보드 매니저 설치
- Arduino IDE 보드 매니저 열기:
File
->Preferences
를 선택합니다.Additional Boards Manager URLs
필드에http://arduino.esp8266.com/stable/package_esp8266com_index.json
을 추가하고OK
를 클릭합니다.
- 보드 매니저에서 ESP8266 설치:
Tools
->Board
->Boards Manager
를 선택합니다.esp8266
을 검색하고Install
을 클릭하여 설치합니다.
3. Wi-Fi 연결 설정
ESP8266을 사용하여 Wi-Fi 네트워크에 연결하고 데이터를 송수신하는 기본 예제를 살펴보겠습니다.
4. Wi-Fi 연결 예제
하드웨어 연결
ESP8266 보드는 일반적으로 USB를 통해 컴퓨터에 직접 연결됩니다.
예제: Wi-Fi 네트워크에 연결
다음 예제는 ESP8266 모듈을 Wi-Fi 네트워크에 연결하고, IP 주소를 시리얼 모니터에 출력하는 방법을 보여줍니다.
#include <ESP8266WiFi.h>
const char* ssid = "your_SSID"; // Wi-Fi SSID
const char* password = "your_PASSWORD"; // Wi-Fi 비밀번호
void setup() {
Serial.begin(115200); // 시리얼 통신 시작
delay(10);
// Wi-Fi 연결 시작
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); // IP 주소 출력
}
void loop() {
// 메인 루프는 비워둠
}
위 코드에서는 WiFi.begin
함수를 사용하여 Wi-Fi 네트워크에 연결하고, WiFi.localIP
함수를 사용하여 할당된 IP 주소를 시리얼 모니터에 출력합니다.
5. Wi-Fi를 활용한 프로젝트
Wi-Fi를 사용하여 간단한 웹 서버를 구현하고, 웹 브라우저를 통해 LED를 제어하는 프로젝트를 만들어보겠습니다.
하드웨어 연결
- LED 연결:
- LED의 + 단자: GPIO 2 (D4)
- LED의 - 단자: GND
예제: 간단한 웹 서버를 사용한 LED 제어
다음 예제는 ESP8266을 사용하여 간단한 웹 서버를 구현하고, 웹 페이지를 통해 LED를 제어하는 방법을 보여줍니다.
#include <ESP8266WiFi.h>
const char* ssid = "your_SSID"; // Wi-Fi SSID
const char* password = "your_PASSWORD"; // Wi-Fi 비밀번호
WiFiServer server(80); // 웹 서버 포트 설정
const int ledPin = 2; // LED 핀 (GPIO 2)
void setup() {
Serial.begin(115200); // 시리얼 통신 시작
pinMode(ledPin, OUTPUT); // LED 핀을 출력 모드로 설정
digitalWrite(ledPin, LOW); // LED 초기 상태 설정
// Wi-Fi 연결 시작
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); // IP 주소 출력
server.begin(); // 웹 서버 시작
}
void loop() {
WiFiClient client = server.available(); // 클라이언트 연결 확인
if (client) {
Serial.println("New Client.");
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n') {
if (currentLine.length() == 0) {
// HTTP 요청 처리
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
client.print("Click <a href=\"/LED=ON\">here</a> to turn the LED on.<br>");
client.print("Click <a href=\"/LED=OFF\">here</a> to turn the LED off.<br>");
client.println();
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}
// LED 제어
if (currentLine.endsWith("GET /LED=ON")) {
digitalWrite(ledPin, HIGH); // LED 켜기
}
if (currentLine.endsWith("GET /LED=OFF")) {
digitalWrite(ledPin, LOW); // LED 끄기
}
}
}
client.stop();
Serial.println("Client Disconnected.");
}
}
위 코드에서는 ESP8266을 사용하여 웹 서버를 구현하고, 클라이언트가 웹 페이지를 통해 LED를 제어할 수 있도록 합니다. 웹 브라우저에서 "LED ON" 링크를 클릭하면 LED가 켜지고, "LED OFF" 링크를 클릭하면 LED가 꺼집니다.
마무리
오늘은 Wi-Fi 통신을 사용하여 데이터를 송수신하는 방법을 학습했습니다. ESP8266 모듈을 사용하여 Wi-Fi 네트워크에 연결하고, 간단한 웹 서버를 구현하여 웹 페이지를 통해 LED를 제어하는 예제를 통해 Wi-Fi 통신의 기본 개념과 활용 방법을 익혔습니다. 다음 날에는 MQTT 프로토콜에 대해 더 깊이 알아보겠습니다.
질문이나 추가적인 피드백이 있으면 언제든지 댓글로 남겨 주세요.
Day 21 예고
다음 날은 "MQTT 프로토콜"에 대해 다룰 것입니다. MQTT 프로토콜을 사용하여 메시지를 송수신하는 방법을 학습하고, 실습 예제를 통해 이해를 돕겠습니다.
'-----ETC----- > C++ 임베디드 시스템 프로그래밍 시리즈' 카테고리의 다른 글
[C++ 임베디드 시스템 프로그래밍] Day 22: 프로젝트: 스마트 홈 시스템 구축 (1) (0) | 2024.08.01 |
---|---|
[C++ 임베디드 시스템 프로그래밍] Day 19: 블루투스 통신 (0) | 2024.08.01 |
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 17: SPI 통신 (0) | 2024.08.01 |
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 18: CAN 통신 (0) | 2024.08.01 |
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 16: I2C 통신 (0) | 2024.08.01 |