데이터를 통신하는 방법이 여러 종류가 있는데 그중 MQTT라는 방식을 사용해보자. MQTT란 사물인터넷을 사용하기 위해 개발된 TCP 기반의 프로토콜이다.
특징을 살펴보면 낮은 전력, 낮은 대역폭 그리고 저사양의 성능에서도 사용이 가능하다.
때문에 간단한 데이터 전송을 위한 작업을 할 땐 MQTT 프로토콜이 이번 연구에 사용하는 도구로써 최적이다.
먼저 MQTT의 원리를 간단하게 알아보자.
<그림 1> MQTT 구동 예시
MQTT 프로토콜은 크게 3가지 역할이 존재한다. 어떠한 데이터를 전송하는 ‘publisher’, publisher에게 데이터를 받은 후 subscriber에게 데이터를 전해주는 ‘broker’, 데이터는 수신하는 ‘subscriber’로 구성된다.
<그림 1>과 같이 각각 topic에 해당하는 ‘A 신문’과 ‘B 신문’을 구독하는 2명의 구독자가 있다고 하면 신문사에서 A 신문을 발행하게 되면 신문 배달원은 A 신문을 구독하고 있는 구독자에게 신문을 배달하게 된다.
MQTT 구동 과정
위와 같은 방식으로 실제 MQTT의 구동방식을 살펴보면 어떤 핸드폰이 특정 topic을 구독하고 있고 라즈베리파이가 해당 topic으로 data를 pubilsh 하게 되면 브로커가 그 topic을 구독하고 있는 구독자에게 데이터를 전송하게 된다.
라즈베리파이에서 MQTT를 publish 와 subscribe를 하기 위해선 paho-mqtt package를 설치해야 한다.
설치는 sudo pip3 install paho-mqtt 를 이용하여 설치할 수 있다.
설치 후 간단한 mqtt 작업을 진행해보았다.
간단하게 라즈베리파이와 4핀 스위치를 연결하여 스위치를 누를 때마다 스위치를 몇 번 눌렀는지 count 해주는 작업을 진행했다.
라즈베리파이 - 스위치 연결
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import RPi.GPIO as GPIO
import time
%%paho mqtt패키지 import
import paho.mqtt.client as mqtt
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUB_UP)
maxcount = input("Enter the umber = ")
count = 0
%% broker주소 접속 및 mqtt 클라이언트 생성
broker_address="203.241.xxx.xxx"
client2 = mqtt.Client("ClientPublisher")
client2.connect(broker_address)
while True:
button_input = GPIO.input(21)
if button_input == False :
count = count + 1
print ("count push = %d" %(count))
client2.publish("BME", "count push = %d" %(count)) %% 'BME' 라는 topic에 데이터 전송
time.sleep(1)
if count >= maxcount :
break
GPIO.cleanup()
print("End")
clicent2.publish("BME", End)
|
cs |
위와 같이 스위치와 라즈베리파이를 연결하고 GPIO 21번 핀에 연결해준다.
'프로젝트' 카테고리의 다른 글
아두이노 로봇팔 프로젝트 - 1 (0) | 2020.12.11 |
---|---|
아두이노를 이용한 환자감시장치(Patient Monitor) 제작 (0) | 2020.12.10 |
4D프린팅 기술 (0) | 2020.12.10 |