본문 바로가기

PROGRAMMING/PYTHON

[MQTT] Python MQTT , client와 broker 연결

새로운 사업에 참여하게되어 기존에 썼던 python-MQTT통신 방법을 다시 상기시키고 되짚어 보기 위해 작성하는 포스트



  MQTT


  • 센서, 디바이스 + 모바일 기기들의 연결을 위한 프로토콜, 오픈 소스
  • 브로커(broker)를 중앙에 두고 publish / subscribe 메시징 체제로 데이터를 주고 받는다.
  • 토픽(topic)으로 자신들이 주고받는 데이터가 무엇인지 구분한다.

  paho.mqtt.client


  • Python으로 MQTT 통신을 구현할 때 import해야 하는 라이브러리
  • 브로커 접속(connect) / 발행(publish) / 구독(subscribe) / 구독한 메세지 처리 등 각 상황에 맞는 콜백 함수 설정으로 
    원하는 기능 구현 가능
  • 해당 포스트와 관련한, MQTT 포스트는 Python 언어를 이용한 비동기연결 위주의 설명 

  client 객체 생성과 connect()


1
2
3
4
5
6
import paho.mqtt.client as mqtt
 
broker_address="XXX.XXX.XXX.XXX"
broker_port=1883
client = mqtt.Client() //mqtt client 객체 생성
client.connect(host=broker_address, port=broker_port)
cs

▲ 이렇게 연결하면 브로커와 연결을 유지하기때문에 다른 작업을 할 수 없다.


5
6
client.connect_async(host=broker_address, port=broker_port)
client.loop_start()
cs

▲ 비동기 연결



  client.connect() 선택적 매개변수

1
client.connect(host=broker_address, port=1883 , keepalive=60 , bind_address=””)
cs


host이름(브로커 주소)은 도메인이든 IP 주소로든 꼭 입력 해야한다.



  on_connect() callback

  • 연결 상태를 확인 하고 싶을 때, 연결 직후 수행해야 할 기능이 있을 때
  • client 객체안에는 callback 함수 자리(?)가 있는데 그 자리에 사용자가 만든 함수를 연결하여 callback 함수 역할을 하도록 함.

  on_connect() callback 순서

    1. Client 객체 생성
    2. callback 함수인 on_connect()를 만든다.
    3. callback 함수로 사용자가 만든 on_connect()를 가지고 온다.
    4. 브로커와 연결한다.
    5. loop 시작
1
2
3
def on_connect(self, client, userdata, flags, rc):
    //connect 직후 수행해야 할 기능
    print "connect with result code "+str(rc)
cs