Tiny Bunny
본문 바로가기
Python

python - MQTT

by 내이름효주 2024. 8. 20.
  • MQTT: 클라이언트 publish / subscribe 메시지 전송 프로토콜, M2M 및 IOT에 적합

    • client: MQTT의 broker에 연결된 모든 것
    • broker: 모든 메시지를 수신, 필터링, 메시지 구독하는 사람 결정, 클라이언트에게 메시지를 보내는 역할
      • 종류: mosquito, HiveMQ, RabbitMQ 등
    • publish: topic을 지정하여 topic을 subscribe하고 있는 클라이언트에게 메세지를 보냄
    • subscribe: topic을 구독하여 topic으로 publish된 메시지를 받음
      • topic: /를 분리 문자로 사용하여 폴더 및 파일과 유사한 계층구조를 가짐 
    • callback 함수 : 연결 상태를 확인 하고 싶을 때, 연결 직후 수행해야 할 기능이 있을 때 사용
      • on_connect(): 브로커에 접속
      • on_disconnect(): 브로커에 접속종료
      • on_publish(): 메시지 발행
      • on_subscribe(): topic 구독
      • on_message(): 발행된 메시지가 들어왔을 때

  • Mosquito를 이용한 MQTT 통신
    • mosquito 설치 (https://mosquitto.org/download
      apt install mosquito
      mosquito 

    • 설치 후 구독/발행 테스트 하니까 "Error: 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다." 라는 에러가 발생함 > mosquitto가 윈도우 서비스로 등록은 되는데 실행이 되지 않아서 나오는 오류! > 작업관리자를 통하여 서비스를 실행시켜줌
    • mosquito 실행하면 127.0.0.1:1883이 활성화됨
    • Mosquitto 실행 테스트
      • topic 구독(Subscribe)
        C:\Program Files\mosquitto>mosquitto_sub -t "my_topic"
        + 브로커의 ip 입력하여 보내기 (_sub 뒤에 브로커 ip -t 추가)
      •  topic에 메시지 발행(Publish)
        C:\Program Files\mosquitto>mosquitto_pub -t "my_topic" -m mosquitto_test!

 

  • Python을 이용한 MQTT 통신
    • paho MQTT 설치
      pip install paho-mqtt
    • subscribe.py 설정(메시지 구독, 수신)
      import paho.mqtt.client as mqtt
      
      def on_connect(client, userdata, flags, rc):
          if rc == 0:
              print("subscribe connected OK")
          else:
              print("Bad connection Returned code=", rc)
      
      def on_disconnect(client, userdata, flags, rc=0):
          print(str(rc))
      
      def on_subscribe(client, userdata, mid, granted_qos):
          print("subscribed: " + str(mid) + " " + str(granted_qos))
      
      def on_message(client, userdata, msg):
          print("메시지 받음")
          print(str(msg.payload.decode("utf-8")) + " / Topic: " + msg.topic)
      
      client = mqtt.Client()
      
      client.on_connect = on_connect
      client.on_disconnect = on_disconnect
      client.on_subscribe = on_subscribe
      client.on_message = on_message
      
      client.connect('localhost', 1883)
      # client.connect_async('localhost', 1883) 비동기 연결
      client.subscribe('my_topic', 1) # 메시지 발행(최소 1회)
      client.loop_forever() # 메시지를 계속 수신
    • publish.py 설정(메시지 전송)
      import paho.mqtt.client as mqtt
      
      def on_connect(client, userdata, flags, rc):
          if rc == 0:
              print("publish connected OK")
          else:
              print("Bad connection Returned code=", rc)
      
      def on_disconnect(client, userdata, flags, rc=0):
          print(str(rc))
      
      def on_publish(client, userdata, mid):
          print("mid= ", mid)
      
      client = mqtt.Client()
      
      client.on_connect = on_connect
      client.on_disconnect = on_disconnect
      client.on_publish = on_publish
      
      client.connect('localhost', 1883)
      
      client.loop_start() # 비동기적으로 mqtt 메시지 처리
      
      # common topic 으로 메세지 발행
      while True:
          user_input = input("메시지 입력: ")
          if user_input == 'end':
              break
          # user_input을 'common' 토픽으로 발행
          client.publish('my_topic', user_input, qos=1)
      
      client.loop_stop()
      # 연결 종료
      client.disconnect()

 

 

[참고사이트]
Python 에서 MQTT 사용하기 (tistory.com)

 

Python 에서 MQTT 사용하기

1.MQTT MQTT는 클라이언트 publish / subscribe 메시지 전송 프로토콜입니다. 가볍고 개방적이며 간단하며 구현하기 쉬워서 M2M(Machine-to-Manchine)및 IOT(internet of Things) 에 적합한 선택이다. 1-1.MQTT 특징ClientMQ

developer-finn.tistory.com

MQTT 사용 하기 Python , mosquitto (tistory.com)

 

MQTT 사용 하기 Python , mosquitto

MQTT란? MQTT(Message Queuing Telemetry Transport)는 TCP/IP 프로토콜 위에서 동작하는 발행-구독(Pub/Sub) 모델의 메시징 프로토콜입니다. 경량 메시지 프로토콜로 불리며, 대규모의 IoT 기기에서 데이터를 전송

doa-oh.tistory.com

 

 

 

 

 

'Python' 카테고리의 다른 글

Django Channels & Web socket  (0) 2024.08.16
알고리즘 - python  (0) 2024.08.08
Python - pygame  (0) 2024.04.29