반응형

개요

  • Cloud Mqtt를 이용하여 Python으로 MQTT 통신을 해본다.
  • Python으로 Publish, Subscribe를 해본다.

환경

  • Python 3.7 설치
  • Cloud MQTT 가입 및 브로커생성

Cloud MQTT 환경이 구축이 되지 않았다면 아래 2개를 진행합니다.

 

https://i5i5.tistory.com/88?category=1115768

 

[MQTT 환경 구축] Cloud MQTT 활용하여 MQTT 브로커 만들기

Cloud mqtt를 이용하여 MQTT 브로커를 만들어 MQTT 환경을 구축해보겠습니다. Cloud mqtt란? MQTT 브로커를 제공해주는 플랫폼 클라우드 서비스 이름 (github 사이트와 비슷한 것) 사용자가 직접 브로커 서버를 만..

i5i5.tistory.com

https://i5i5.tistory.com/89?category=1115768\

 

[MQTT 환경 구축] MQTT Cloud Client 설정하기

개요 지정된 Client만 브로커에 접속하도록 설정한다. 지정된 데이터 타입(토픽)만 송/수신하도록 설정한다. Client 설정 1. [USERS & ACL]에 접속합니다. 2. 아래 항목을 채웁니다. 나중에 Java, Python 등 APP..

i5i5.tistory.com

 

 

  • python pip 설치

아래 링크 참조.

https://kamang-it.tistory.com/entry/Windows%EC%97%90%EC%84%9C-pip%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-feateasyinstall

 

  • paho-mqtt 설치

Python에서 mqtt 모듈을 사용하기 위해 paho-mqtt를 설치해야합니다
[윈도우키] - "windows powershell" 검색 - 아래 명령어 입력
( 그전에 pip도 install 해야합니다. )


 

 

 pip install paho-mqtt

 

 

코드 실행

01_pubsubTest.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import paho.mqtt.client as mqtt
 
# 콜백 함수 정의하기
#  (mqttc.connect를 잘 되면) 서버 연결이 잘되면 on_connect 실행 (이벤트가 발생하면 호출)
def on_connect(client, userdata, flags, rc):
    print("rc: " + str(rc))
 
# 브로커에게 메시지가 도착하면 on_message 실행 (이벤트가 발생하면 호출)
def on_message(client, obj, msg):
    print(msg.topic + " " + str(msg.qos) + " " + str(msg.payload))
 
# (mqttc.publish가 잘 되면) 메시지를 publish하면 on_publish실행 (이벤트가 발생하면 호출)
def on_publish(client, obj, mid):
    # 용도 : publish를 보내고 난 후 처리를 하고 싶을 때
    # 사실 이 콜백함수는 잘 쓰진 않는다.
    print("mid: " + str(mid))
 
# (mqttc.subscribe가 잘 되면) 구독(subscribe)을 완료하면
# on_subscrbie가 호출됨 (이벤트가 발생하면 호출됨)
def on_subscribe(client, obj, mid, granted_qos):
    print("Subscribe complete : " + str(mid) + " " + str(granted_qos))
 
# 클라이언트 생성
mqttc = mqtt.Client()
 
# 콜백 함수 할당하기
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_publish = on_publish
mqttc.on_subscribe = on_subscribe
 
 
# 브로커 연결 설정
# 참고로 브로커를 Cloudmqtt 홈페이지를 사용할 경우
# 미리 username과 password, topic이 등록 되어있어야함.
url = "m16.cloudmqtt.com"
port = 14593
username = "HONG" # Cloud mqtt
password = "1234"
 
topic = "devs/DEV1"
 
# 클라이언트 설정 후 연결 시도
mqttc.username_pw_set(username, password)
mqttc.connect(host=url, port=port)
 
# QoS level 0으로 구독 설정, 정상적으로 subscribe 되면 on_subscribe 호출됨
mqttc.subscribe(topic, 0)
 
# 메시지 한번 보내보기
mqttc.publish(topic, "my message")
 
# 네트워크 loop를 계속 실행. 종료 에러가 발생하기 전까지 계속 실행
rc = 0
while rc == 0:
    rc = mqttc.loop()
 
print("rc: " + str(rc))
 

 

*코드 설명

36, 37 : cloud mqtt에서 제공한 IP주소와 port번호를 이용하였다. (만약 cloud mqtt가 아니라 자체 mqtt 브로커가 있다면 그 주소를 사용해도 좋다)

38, 39 : cloud mqtt에 설정한 client 이름과 비밀번호를 사용하였다.

55, 56 : 계속 루프를 돌면서 네트워크 상태 정보를 받는다.

 

실행화면

* 파이썬 실행화면

 

파이썬 실행화면

 

* Cloud MQTT화면

Cloud mqtt 실행화면

 

정상적으로 publish가 되어 브로커에게 전달된 것을 확인하였다!

이 말은 이제 devs/DEV1 을 구독한 client 들에게 브로커가 저 데이터를 publish 할 수 있다는 것이다!

 

그렇다면 브로커에서 직접 subscribe한 client들에게 메시지를 날려보자.

 

 

 

브로커가 메시지 보내기

* Cloud MQTT화면

 

아래의 메시지를 통해 보낸다.

 

 

* 파이썬 실행화면

 

파이썬 결과화면

 

이제 파이썬으로 subscribe, publish를 할 수 있다!

 

 


진행사항

  • Python 환경에서 MQTT Cloud 플랫폼을 활용해서 MQTT프로토콜로 데이터를 Pub, Sub 기능을 구현함

참고

https://www.cloudmqtt.com/docs/python.html

 

 

잘 안되거나, 오류나거나, 궁금한 사항은 댓글로 남겨주세요!

반응형