Allen's 데이터 맛집
MQTT를 활용한 네트워킹 프로젝트: 실시간 IoT 데이터 통신의 시작 본문
경량 메시지 프로토콜인 MQTT(Message Queuing Telemetry Transport)를 활용해 실시간 데이터 통신을 해보겠습니다. 이 기술은 IoT(사물 인터넷) 환경에서 장치 간 효율적이고 안정적인 데이터 교환을 가능하게 합니다.
이미지출처:https://dnai-deny.tistory.com/62
개요
1. MQTT란 무엇인가?
MQTT는 경량 통신 프로토콜로, 네트워크 대역폭과 에너지 소비를 최소화하도록 설계되었습니다.
IoT 장치, 센서 네트워크, 원격 모니터링 시스템 등에서 주로 사용됩니다.
- 주요 특징:
- 발행/구독 모델: 메시지를 발행(Publish)하고 구독(Subscribe)하여 데이터를 교환.
- 경량 프로토콜: 최소한의 네트워크 대역폭 소비.
- 품질 보장: 메시지 전송 품질(QoS) 설정 가능.
2. 목표
- MQTT를 활용한 실시간 데이터 통신 구현: IoT 장치 간 실시간 데이터 교환 가능.
- 경량 메시지 처리: 최소한의 리소스로 신뢰성 있는 데이터 전송.
- 유연한 네트워크 구성: 다양한 장치에서 MQTT 브로커와 통신 가능.
구성 및 구현
1️⃣ 시스템 구조
- MQTT 브로커
- 메시지의 중개 역할을 수행.
- 모든 발행자(Publisher)와 구독자(Subscriber)를 연결.
- 예: Eclipse Mosquitto.
- 발행자(Publisher)
- 데이터를 생성하고 특정 주제로 발행.
- 예: 온도 센서, 습도 센서 등.
- 구독자(Subscriber)
- 주제를 구독하고 메시지를 수신.
- 예: 대시보드, 데이터 로거.
2️⃣ MQTT 메시지 발행/구독
- Python 코드 예제: 메시지 발행
import paho.mqtt.client as mqtt
broker = "broker.hivemq.com"
port = 1883
topic = "home/sensor/temperature"
def on_connect(client, userdata, flags, rc):
print(f"Connected with result code {rc}")
client.publish(topic, "Temperature: 22°C")
client = mqtt.Client()
client.on_connect = on_connect
client.connect(broker, port, 60)
client.loop_forever()
- Python 코드 예제: 메시지 구독
import paho.mqtt.client as mqtt
broker = "broker.hivemq.com"
port = 1883
topic = "home/sensor/temperature"
def on_message(client, userdata, msg):
print(f"Received message: {msg.payload.decode()} on topic {msg.topic}")
client = mqtt.Client()
client.on_message = on_message
client.connect(broker, port, 60)
client.subscribe(topic)
client.loop_forever()
3️⃣ 품질 보장(QoS) 설정
MQTT는 QoS(Quality of Service) 설정을 통해 메시지 전송의 신뢰성을 제어합니다:
- QoS 0: 최소 보장 (최소 한 번 전달, 손실 가능).
- QoS 1: 전달 보장 (최소 한 번 전달, 중복 가능).
- QoS 2: 정확히 한 번 전달.
- QoS 설정 예제:
client.subscribe(topic, qos=2)
4️⃣ 주요 기능 구현
(1) 실시간 센서 데이터 전송
IoT 장치가 실시간으로 데이터를 발행하여 대시보드에서 확인할 수 있도록 구현.
- 예시: 온도 센서 데이터를 MQTT 브로커에 발행하고, 구독자가 이를 실시간으로 시각화.
(2) 다중 주제 구독
여러 주제를 구독하여 다양한 데이터를 동시에 수신.
- 예제: 온도와 습도 데이터를 별도의 주제로 관리.
client.subscribe("home/sensor/temperature")
client.subscribe("home/sensor/humidity")
(3) 메시지 로그 저장
수신한 메시지를 데이터베이스 또는 파일에 저장하여 이후 분석 가능.
- 코드 예제:
def on_message(client, userdata, msg):
with open("message_log.txt", "a") as f:
f.write(f"{msg.topic}: {msg.payload.decode()}\n")
https://github.com/siilver94/networking-with-mqtt
GitHub - siilver94/networking-with-mqtt
Contribute to siilver94/networking-with-mqtt development by creating an account on GitHub.
github.com
728x90