MQTT · 2026-02-27

Raspberry Pi와 ESP32로 MQTT 스마트홈 구축

Raspberry Pi에 MQTT 브로커를 올리고 ESP32를 이용해 센서와 스위치를 연동하는 실무형 스마트홈 네트워크 설명서

작성일 : 2026-02-27 ㆍ 작성자 : 관리자
post
목차

소개

이 글은 Raspberry Pi와 ESP32를 사용해 집안 기기들을 MQTT로 연결하는 전체 흐름을 소개한다. 초보자도 따라오기 쉽도록 준비물, 브로커 설치, ESP32 코드 예제, 토픽 설계와 보안까지 순서대로 정리한다. 핵심 키워드는 raspberry pi esp32 mqtt 홈자동화, 스마트홈 mqtt 네트워크 구성, esp32 home mqtt 예제이다.

필요한 준비물

  • Raspberry Pi(라즈베리파이 3 이상 권장)와 전원
  • microSD 카드(OS 설치 완료)
  • ESP32 보드(개발 보드 형태)
  • 네트워크 라우터와 동일한 LAN
  • USB 케이블, 간단한 센서(온습도, 릴레이 등)

라즈베리파이에 MQTT 브로커 설치

1) 소프트웨어 설치

라즈베리파이에 Mosquitto 브로커를 설치한다. 기본 패키지로 충분하다. 다음 명령어는 설치와 서비스 시작을 포함한다.

sudo apt update
sudo apt install -y mosquitto mosquitto-clients
sudo systemctl enable mosquitto
sudo systemctl start mosquitto

2) 기본 설정

간단한 테스트는 같은 네트워크에서 mosquitto_pub과 mosquitto_sub로 가능하다. 라즈베리파이의 IP를 확인한 뒤 다른 장치에서 테스트한다.

# 라즈베리파이에서 구독
mosquitto_sub -h 192.168.1.100 -t home/test
# 다른 장치에서 발행
mosquitto_pub -h 192.168.1.100 -t home/test -m "hello"

운영 환경에서는 암호화와 인증을 추가한다. mosquitto_passwd로 사용자 추가 후 /etc/mosquitto/conf.d에 설정 파일을 둬 인증을 강제한다.

ESP32 MQTT 연결 예제

ESP32는 Arduino IDE나 PlatformIO에서 개발 가능하다. 아래 예제는 WiFi 연결과 MQTT 접속, 간단한 토픽 구독과 주기적 상태 발행을 포함한다.

#include <WiFi.h>
#include <PubSubClient.h>

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_WIFI_PASS";
const char* mqtt_server = "192.168.1.100";

WiFiClient espClient;
PubSubClient client(espClient);

void callback(char* topic, byte* payload, unsigned int length) {
  // 수신 처리 간단 예
}

void reconnect() {
  while (!client.connected()) {
    if (client.connect("ESP32Client")) {
      client.subscribe("home/relay1");
    } else {
      delay(2000);
    }
  }
}

void setup() {
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() {
  if (!client.connected()) reconnect();
  client.loop();
  // 상태 전송 예
  client.publish("home/temperature", "23.5");
  delay(5000);
}

코드 설명

  • WiFi 연결: SSID와 비밀번호로 네트워크에 접속한다.
  • MQTT 클라이언트: 브로커 IP와 포트로 연결하고 토픽을 구독/발행한다.
  • callback: 수신 메시지를 처리하는 함수로 기기 제어 로직을 넣는다.
  • reconnect: 연결 끊김 대비 재접속 루틴이다.

토픽 설계와 네트워크 구조

토픽 구조는 명확할수록 관리가 쉽다. 권장 구조는 다음과 같다.

  • home/{room}/{device}/{attribute} 예: home/livingroom/light1/set
  • 센서 데이터는 주기적 발행(topics: home/+/temperature)
  • 명령 토픽과 상태 토픽을 분리한다(set과 state)

이 구조는 자동화 규칙 구성과 로그 수집을 단순화한다. 또한 토픽에 QoS 수준을 설정해 신뢰도를 조절할 수 있다.

보안과 유지관리

기본 브로커는 인증과 암호화가 없다. 운영 환경에서는 다음 사항이 필요하다.

  • 사용자 인증(passwd 파일로 계정 관리)
  • TLS를 통한 암호화(인증서 설치)
  • 주기적 백업과 로그 모니터링
  • 펌웨어 OTA나 자동 업데이트로 ESP32 보안 유지

네트워크 분리나 VLAN을 이용하면 IoT 기기를 별도 구간에 둘 수 있다. 과도한 포트 공개를 피하는 것이 권장된다.

실무 적용 사례와 확장

이 기본 구성은 조명 제어, 온습도 모니터링, 릴레이 기반 기기 제어 등 다양한 서비스에 바로 적용 가능하다. 홈 어시스턴트(또는 기타 자동화 플랫폼)와 연동하면 장치 추가와 룰 구성에 유리하다. 이후에는 센서 추가, 메시지 형식(JSON 표준화), QoS 조정으로 확장한다.

요약

Raspberry Pi에 Mosquitto를 설치하고 ESP32로 토픽을 주고받는 흐름을 이해하면 스마트홈 MQTT 네트워크 구성에 필요한 기본을 갖추게 된다. 토픽 설계와 보안을 고려해 운영하면 안정적인 홈자동화 환경을 구현할 수 있다.

raspberry pi esp32 mqtt 홈자동화 스마트홈 mqtt 네트워크 구성 esp32 home mqtt 예제 mosquitto 설치 ESP32 MQTT 예제 홈오토메이션 MQTT 토픽 설계 IoT 보안