[MQTT 환경 구축] Python으로 MQTT통신하기 (MQTT Cloud 사용)
2020. 4. 19. 17:30개요
- Cloud Mqtt를 이용하여 Python으로 MQTT 통신을 해본다.
- Python으로 Publish, Subscribe를 해본다.
환경
- Python 3.7 설치
- Cloud MQTT 가입 및 브로커생성
Cloud MQTT 환경이 구축이 되지 않았다면 아래 2개를 진행합니다.
https://i5i5.tistory.com/88?category=1115768
https://i5i5.tistory.com/89?category=1115768\
- python pip 설치
아래 링크 참조.
- 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화면
정상적으로 publish가 되어 브로커에게 전달된 것을 확인하였다!
이 말은 이제 devs/DEV1 을 구독한 client 들에게 브로커가 저 데이터를 publish 할 수 있다는 것이다!
그렇다면 브로커에서 직접 subscribe한 client들에게 메시지를 날려보자.
브로커가 메시지 보내기
* Cloud MQTT화면
* 파이썬 실행화면
이제 파이썬으로 subscribe, publish를 할 수 있다!
진행사항
- Python 환경에서 MQTT Cloud 플랫폼을 활용해서 MQTT프로토콜로 데이터를 Pub, Sub 기능을 구현함
참고
https://www.cloudmqtt.com/docs/python.html
잘 안되거나, 오류나거나, 궁금한 사항은 댓글로 남겨주세요!
'MQTT Protocol' 카테고리의 다른 글
[MQTT 환경 구축] MQTT Cloud Client 설정하기 (0) | 2020.04.19 |
---|---|
[MQTT 환경 구축] Cloud MQTT 활용하여 MQTT 브로커 만들기 (0) | 2020.04.19 |
MQTT Protocol 이란? (0) | 2020.04.19 |