NodeMCU DHT22 센서 + 라즈베리 파이 3 B+ MQTT 브로커 연동 가이드
확장성 있는 IoT 솔루션 배포: NodeMCU 마이크로컨트롤러 + DHT22 온습도 센서 → 라즈베리 파이 3 B+ MQTT 브로커. 데이터 IoT MQTT 패널 앱 실시간 시각화.
이 가이드 하드웨어 연결, 소프트웨어 설정, 코드 구조 안내로 MQTT 토픽 편집만으로 센서 노드 추가/제거 가능. 네트워크 끊겨도 각 NodeMCU 로컬 발행 지속, 나중에 브로커 재연결로 버퍼 데이터 복구.
1. 네트워크 아키텍처
일반적 레이아웃: 라즈베리 파이 LAN, 각 NodeMCU 동일 와이파이 라우터 뒤. 센서 10초마다 값 읽어 /room1/temperature, /room1/humidity 등 고유 토픽 발행. 브로커 1883 포트 리슨, 메시지 MQTT 패널 앱 포워딩.
2. 소프트웨어 사전준비
2.1 아두이노 IDE 라이브러리
2.2 라즈베리 파이 파이썬 의존성
3. 펌웨어 업로드
제공 스케치로 NodeMCU 플래싱, 라즈베리 파이 파이썬 스크립트 실행해 토픽 구독·데이터 저장.
4. NodeMCU 스케치 개요
#include <ESP8266WiFi.h> // ESP8266 와이파이 라이브러리
#include <PubSubClient.h> // MQTT 클라이언트
#include "DHT.h" // DHT 센서 라이브러리
const char* mqtt_server = "Broker_IP_Address"; // 라즈베리 파이 IP로 교체
const char* clientID = "room1"; // 노드 식별자
const char* topicT = "/room1/temperature"; // 온도 토픽
const char* topicH = "/room1/humidity"; // 습도 토픽
const char* willTopic = "/room1/status"; // 윌 토픽
const char* willMessage = "0"; // 0 = disconnected
int willQoS = 0;
boolean willRetain = true;
int counter = 0;
const char* swversion = "1.0";
WiFiClient wifiClient;
PubSubClient client(mqtt_server, 1883, wifiClient);
DHT dhtA(2, DHT22); // DHT22 NodeMCU 핀 D4 (GPIO2)
void setup() {
Serial.begin(9600);
Serial.print(swversion);
dhtA.begin();
delay(2000); // 와이파이 안정화 대기
if (client.connect(clientID, "", "", willTopic, willQoS, willRetain, willMessage, true)) {
Serial.println("Connected to MQTT broker");
}
}
Broker_IP_Address를 파이 로컬 IP(예: 192.168.1.200)로 교체. 파이에서 ifconfig wlan0로 확인.
willTopic, willMessage로 노드 예기치 않은 연결 끊김 감지, 패널 시각화용 유지 "0" 상태 발행.
5. 라즈베리 파이 구독자 스크립트
파이썬 스크립트 브로커 지속 연결, 관련 토픽 구독, 수신 데이터 CSV 파일 기록해 추후 분석.
6. 시스템 확장
새 방 추가: 스케치 복제, clientID, topicT, topicH, willTopic 새 방명으로 변경, 다른 NodeMCU 업로드. MQTT 패널 앱 UI에 토픽 추가 시 자동 감지.
네트워크 연결 손실 시 NodeMCU 로컬 브로커 큐 발행 지속. 연결 복구 시 메시지 플러시, 데이터 손실 없음.
업데이트 팔로우, 전체 시스템 액션 데모 영상 기대.