250x250
반응형
관리 메뉴

Allen's 데이터 맛집

MQTT를 활용한 네트워킹 프로젝트: 실시간 IoT 데이터 통신의 시작 본문

기타 정보/통신

MQTT를 활용한 네트워킹 프로젝트: 실시간 IoT 데이터 통신의 시작

Allen93 2025. 1. 11. 14:52
경량 메시지 프로토콜인 MQTT(Message Queuing Telemetry Transport)를 활용해 실시간 데이터 통신을 해보겠습니다. 이 기술은 IoT(사물 인터넷) 환경에서 장치 간 효율적이고 안정적인 데이터 교환을 가능하게 합니다.

 

 

 

mqtt

이미지출처:https://dnai-deny.tistory.com/62


개요

1. MQTT란 무엇인가?

MQTT는 경량 통신 프로토콜로, 네트워크 대역폭과 에너지 소비를 최소화하도록 설계되었습니다.
IoT 장치, 센서 네트워크, 원격 모니터링 시스템 등에서 주로 사용됩니다.

  • 주요 특징:
    • 발행/구독 모델: 메시지를 발행(Publish)하고 구독(Subscribe)하여 데이터를 교환.
    • 경량 프로토콜: 최소한의 네트워크 대역폭 소비.
    • 품질 보장: 메시지 전송 품질(QoS) 설정 가능.

2. 목표

  1. MQTT를 활용한 실시간 데이터 통신 구현: IoT 장치 간 실시간 데이터 교환 가능.
  2. 경량 메시지 처리: 최소한의 리소스로 신뢰성 있는 데이터 전송.
  3. 유연한 네트워크 구성: 다양한 장치에서 MQTT 브로커와 통신 가능.

구성 및 구현

1️⃣ 시스템 구조

  1. MQTT 브로커
    • 메시지의 중개 역할을 수행.
    • 모든 발행자(Publisher)와 구독자(Subscriber)를 연결.
    • 예: Eclipse Mosquitto.
  2. 발행자(Publisher)
    • 데이터를 생성하고 특정 주제로 발행.
    • 예: 온도 센서, 습도 센서 등.
  3. 구독자(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