Doarchive

MQTT 사용 하기 Python , mosquitto 본문

ETC/Python

MQTT 사용 하기 Python , mosquitto

오순발닦개 2023. 6. 14. 14:32

MQTT란?

MQTT(Message Queuing Telemetry Transport)는 TCP/IP 프로토콜 위에서 동작하는 발행-구독(Pub/Sub) 모델의 메시징 프로토콜입니다. 경량 메시지 프로토콜로 불리며, 대규모의 IoT 기기에서 데이터를 전송하고 처리하기 위해 개발되었습니다. 단순하고 경량화되어 있기 때문  주로  IoT 기기 및 센서에서 데이터를 수집하고 전송하기 위해 많이 사용됩니다 

MQTT의 구조

MQTT는 발행자(Publisher)와 구독자(Subscriber) 사이의 메시지 전송을 위해 발행-구독(Pub/Sub) 모델을 사용합니다. 이 모델은 중앙 서버 없이 메시지를 전송할 수 있습니다. MQTT 메시지는 Topic과 Payload로 구성됩니다.

MQTT의 동작 방식

MQTT의 동작 방식은 크게 4단계로 구성됩니다.

  1. 연결 설정 (Connection Setup)
  2. 발행 (Publish)
  3. 구독 (Subscribe)
  4. 연결 종료 (Disconnect)

MQTT 브로커

MQTT 브로커는 MQTT 메시지의 발행과 구독을 관리하는 서버입니다. MQTT 브로커는 대개 메시지 브로커(Message Broker)라고도 불리며, 여러 개의 클라이언트가 연결하여 메시지를 교환할 수 있도록 합니다.

 

 

MQTT 사용해보기 

 

1.준비하기

 

1-1. MQTT Broker Mosquitto 사용  : https://mosquitto.org/download/

 

Download

Source mosquitto-2.0.15.tar.gz (GPG signature) Git source code repository (github.com) Older downloads are available at https://mosquitto.org/files/ Binary Installation The binary packages listed be

mosquitto.org

1-2. Mosquitto 에 보안기능을 추가하기위한 Open SSL  https://slproweb.com/products/Win32OpenSSL.html

 

Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions

Minimum system requirements: Windows XP or later 32MB RAM 200MHz CPU 30MB hard drive space Recommended system requirements: Windows XP or later 128MB RAM 500MHz CPU 300MB hard drive space March 14, 2023 - OpenSSL 3.1 is available. Also, Happy Pi Day. Users

slproweb.com

 1-3. 발행 (Publish) , 구독 (Subscribe) 구현 코드 

 

publish.py

import random
import time
from paho.mqtt import client as mqtt_client

broker = 'broker.emqx.io'
port = 1883
topic = "python/mqtt"
client_id = f'publish-{random.randint(0, 1000)}'

def connect_mqtt():
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("MQTT 브로커에 연결되었습니다!")
        else:
            print(f"연결 실패, 반환 코드: {rc}")

    client = mqtt_client.Client(client_id)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client

def publish(client, message):
    result, _ = client.publish(topic, message)
    if result == mqtt_client.MQTT_ERR_SUCCESS:
        print(f"메시지를 Topic '{topic}'로 전송했습니다:")
    else:
        print(f"메시지 전송 실패: {topic}")

def run():
    client = connect_mqtt()
    client.loop_start()
    time.sleep(1)
    while True:
        user_input = input("전송할 메시지를 입력하세요 : ")
        if user_input == 'q':
            break
        publish(client, user_input)
    client.loop_stop()

if __name__ == '__main__':
    run()

 

subscribe.py

import random
from paho.mqtt import client as mqtt_client

broker = 'broker.emqx.io'
port = 1883
topic = "python/mqtt"
client_id = f'subscribe-{random.randint(0, 100)}'


def connect_mqtt() -> mqtt_client:
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("MQTT 브로커에 연결되었습니다!")  # MQTT Broker에 성공적으로 연결되었을 때 출력
        else:
            print(f"연결 실패, 반환 코드: {rc}")  # 연결 실패 시 반환 코드 출력

    client = mqtt_client.Client(client_id)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client


def on_message(client, userdata, msg):
    print(f"Topic '{msg.topic}'에서 메시지를 받았습니다: {msg.payload.decode()}")  


def run():
    client = connect_mqtt()
    client.on_message = on_message
    client.subscribe(topic)
    client.loop_forever()


if __name__ == '__main__':
    run()

 

 

 

 

2. Mosquitto  와 OpenSSL 설치 

2-1.  OpenSSL  bin 폴더에서 아래 파일들을 복사해  Mosquitto  폴더에 붙여넣기 

libcrypto-3-x64

libssl-3-x64

 

 

 

 

 

3. CMD 관리자 권한으로 실행

 

4. C:\Program Files\mosquitto> mosquitto -v 커멘드 실행

      MQTT Broker 실행되며 트래픽 모니터링 가능함

(선택). netstat -an  TCP 1883 실행중인지 확인

 

6. 서버 실행  Publish

7. 클라이언트 실행 Subscribe

 

 

 

8.  결과확인 : 서버에서  메세지 publish  하면 클라이언트가 subscribe 가능

 결과확인 :  브로커에서 메세지 전송내역 확인가능

 

 

 

 

 
 
728x90