- 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)
+ 브로커의 ip 입력하여 보내기 (_sub 뒤에 브로커 ip -t 추가)C:\Program Files\mosquitto>mosquitto_sub -t "my_topic"
- topic에 메시지 발행(Publish)
C:\Program Files\mosquitto>mosquitto_pub -t "my_topic" -m mosquitto_test!
- topic 구독(Subscribe)
- mosquito 설치 (https://mosquitto.org/download)
- 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()
- paho MQTT 설치
[참고사이트]
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 |