구현개요
1) windows 에 broker 설치
2) windows 에 subscriber 구현
3) 라즈베리파이에 publisher 구현. 센서정보전달
실제구현
참고링크: //www.steves-internet-guide.com/into-mqtt-python-client/
참고링크2: //www.hardcopyworld.com/ngine/aduino/index.php/archives/2725
다양한 callback 사용코드: //github.com/eclipse/paho.mqtt.python/tree/master/examples
이번에는라즈베리파이에서 vds1/data 라는토픽으로 Broker 에게 publish 하는 Publisher 를구현해보자
실습하는라즈베리파이에는센서가하나달려있고, 매우 빠르게 (= 약 3ms) 값을갱신한다.
paho-mqtt package 설치
- 파이썬으로 mqtt Client 로서 publish, subscribe 를할수있게해주는패키지이다.
- 라즈베리파이에서는sudo pip3 install paho-mqtt명령으로설치할수있었다.
코드보기
- mqtt 와관계없는 부분은생략합니다.
import datetime as dt import paho.mqtt.client as mqtt count = 0 # mqtt publisher broker_address="192.168.2.9" client2 = mqtt.Client("ClientPublisher") client2.connect(broker_address) while True: count += 1 dist = lidar.getDistance() time = dt.datetime.now().strftime("%M%S.%f") pub_data = "{0},{1},{2}".format(count, dist, time) # mqtt publisher client2.publish("vds1/data", pub_data) | 1) 시간값을얻기위한datetime패키지와 paho mqtt패키지를 import 2) 전송되는메시지의 id 값의의미로 count 를순증가하여넣게함 3) lidar.getDistance() 함수를통해센서의값을 읽어온다. 4) datetime.datetime.now() 함수로현재시간값을읽어와 string 으로바꿔준다. 5) pub_data 라는변수에전송할메시지를구성해둔다. - count, 센서값, 측정시간 여기서부터 mqtt client 를이용한 publish 과정이다. 1) 접속할 broker 서버의 ip 주소를알고있어야 한다. 2) broker 서버에연결후 3) 특정한 topic 으로 (여기서는 vds1/data) message 를 publish 하면끝 |
구현후기
- 생각보다매우쉽고도깔끔하게동작하였다.
- 다양한 상황을대비한구현방법, 옵션이많아보인다.
→앞으로 몇개의 publisher 와몇개의 subscriber, 혹은 publisher 이며 subscriber 인 구조,
데이터의양이크지않은구조일때는 mqtt 를선택하게 될것같다.
- 현재센서의측정주기는 3ms 인데, 위 #mqtt publisher 코드를넣었음에도속도저하가거의없었으며, 데이터손실도거의발견되지 않았음