라즈베리파이 실시간 데이터 전송 - lajeubelipai silsigan deiteo jeonsong

구현개요

1) windows broker 설치

2) windows subscriber 구현

3) 라즈베리파이에 publisher 구현. 센서정보전달

실제구현

참고링크: http://www.steves-internet-guide.com/into-mqtt-python-client/

참고링크2: http://www.hardcopyworld.com/ngine/aduino/index.php/archives/2725

다양한 callback 사용코드: https://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 코드를넣었음에도속도저하가거의없었으며, 데이터손실도거의발견되지 않았음