본문 바로가기
-----ETC-----/C++ 임베디드 시스템 프로그래밍 시리즈

[C++ 임베디드 시스템 프로그래밍] Day 20: Wi-Fi 통신

by cogito21_cpp 2024. 8. 1.
반응형

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 보드 매니저 설치

  1. Arduino IDE 보드 매니저 열기:
    • File -> Preferences를 선택합니다.
    • Additional Boards Manager URLs 필드에 http://arduino.esp8266.com/stable/package_esp8266com_index.json을 추가하고 OK를 클릭합니다.
  2. 보드 매니저에서 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를 제어하는 프로젝트를 만들어보겠습니다.

 

하드웨어 연결

  1. 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 프로토콜을 사용하여 메시지를 송수신하는 방법을 학습하고, 실습 예제를 통해 이해를 돕겠습니다.

반응형