티스토리 뷰
구현개요
1) windows 에 broker 설치
2) windows 에 subscriber 구현
3) 라즈베리파이에 publisher 구현. 센서정보 전달
실제 구현
참고링크: http://www.steves-internet-guide.com/into-mqtt-python-client/
이번에는 windows 에서 vds1/data 라는 토픽을 받는 subscriber 를 구현해보자
* 현재 구현에서는 broker 와 subscriber 는 동일한 windows PC에서 동작하지만, 다른 PC인게 더욱 일반적일 것이다.
paho-mqtt package 설치
- 파이썬으로 mqtt Client 로서 publish, subscribe 를 할 수 있게 해주는 패키지이다.
시행착오. 이 부분은 컴퓨터와 환경에 따라 다를 수 있을 것 같음
1) pip3 install paho-mqtt 로 설치 (version 1.3.1)
- 파이썬 3를 사용하기에 pip3 로 설치하였는데 경로를 못찾는듯함
2) python-etcd 도 설치해봄
- 구글링했는데 설치해보라는 글이 있었으나 해결안됨
3) pip install paho-mqtt 로 설치하니 그냥 해결됨
- (참고) 라즈베리 파이에서는 또 pip3 로 설치해야 동작하였음
- sudo pip3 install paho-mqtt
코드 보기
import paho.mqtt.client as mqtt
# subscriber callback def on_message(client, userdata, message): print("message received " ,str(message.payload.decode("utf-8"))) print("message topic=",message.topic) print("message qos=",message.qos) print("message retain flag=",message.retain)
# subscriber broker_address="192.168.2.9" client1 = mqtt.Client("ClientSubscriber") client1.connect(broker_address) client1.subscribe("vds1/data") client1.on_message = on_message client1.loop_forever()
|
1) paho.mqtt.client 를 import 함
2) broker_address 는 Broker 가 설치된 PC 의 IP 주소임
3) client1 이라는 mqtt.Client() 인스턴스를 생성하고
4) Broker 에 연결한다음
5) Broker 에게 구독 (=subscribe) 하고 싶은 topic 이름을 전달한다 - 여기서는 vds1/data 라는 이름의 topic 이다.
6) Broker 로부터 message 가 오면 동작할 callback 함수를 등록한다 - on_message
7) loop_forever() 함수로 지속적으로 buffer 를 체크하고 이벤트를 발생한다. - 참고링크: https://goo.gl/dhVVBu |
Loop 에 대한 정리
- 참고링크 / 이미지 출처: https://goo.gl/dhVVBu
Broker → Client 로 message 가 오면 receibe buffer 에 위치하게 된다.
버퍼의 메시지를 어떻게 읽을까? 일일이 가서 있나보고 읽어올까?
아니다. 메시지가 있다면, 그 메시지를 처리할 함수를 미리 정해두면 편하다.
그게 callback 함수이다.
loop() 함수는 무엇을 할까?
1) send buffer, receive buffer 를 지켜보다가
2) 메시지가 있으면 그것을 처리한다.
Paho Python client 는 세 종류의 loop() 를 제공한다
- loop_start()
- loop_forever()
- loop()
loop_start()
- 새로운 thread() 를 생성해서 loop() 를 정기적으로 호출하며
- 자동으로 reconnect 도 해준다
- 멈출때는 loop_stop()
loop_forever()
- 새로운 thread() 가 아니라 프로그램을 block() 한다.
- 자동으로 reconnect 하는 것과, 멈출때 loop_stop() 부르는 것은 똑같다
- 무한루프를 돌며 실행될때 유용하다
loop()
- 호출되면 한번 실행한다.
- loop_start() 와 loop_forever() 는 결국 이 함수를 계속 부르는 것이다.
- loop() 의 default timeout 은 1초이며 파라미터로 timeout 값을 정할 수 있다.
'embedded' 카테고리의 다른 글
banana pi quick start - 원격 접속 (0) | 2018.07.18 |
---|---|
banana pi quick start - microSD 용량 (0) | 2018.07.18 |
banana pi quick start - os 설치 (2) | 2018.07.18 |
mqtt - raspberry pi 센서 데이터를 서버로 보내기 (3) (1) | 2018.07.13 |
mqtt - raspberry pi 센서 데이터를 서버로 보내기 (1) (0) | 2018.07.13 |
- Total
- Today
- Yesterday
- 2023
- agile
- Bug
- ChatGPT
- solid
- intellij
- 체호프
- 클린 애자일
- golang
- API
- 티스토리챌린지
- strange
- Gin
- 노션
- 인텔리제이
- 2024년
- 잡학툰
- clean agile
- 영화
- 독서
- OpenAI
- github
- notion
- bun
- websocket
- go
- 독서후기
- 엉클 밥
- folklore
- 오블완
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |