raspberry pi aws iot에 연결해보기 (part.1 사물 생성 및 인증서)
요즘 aws를 사용해볼일이 있어서 awsiot를 이용해보려고 하는데 생각보다 공식 문서나 자료가 조금 기간상 차이가 있다보니 오류가 발생해서 내가 해본 방법을 기록하기 위해서 올려본다. (나중에
pjw97.tistory.com
지난번에 사물생성과 인증을 성공했다.
이제 이걸 라즈베리파이에서 확인해볼 차례이다. 나의 경우 python3를 기준으로 사용하였다.
우선 기본적으로 mqtt 통신을 사용하기 때문에 python 코드 작성전에 라이브러리 패키지가 필요하다.
pip 이 없다면 이것부터 설치
$ curl https://bootstrap.pypa.io/get-pip.py | sudo python3
paho-mqtt 설치
$ sudo python3 -m pip install paho-mqtt
정상적으로 설치가 끝났다면 이제 통신을 위한 코드를 작성해주면 된다.
대충 mqtt 연결을 수립하고, 연결되면 pi/1 주제를 구독하기 시작하며, pi/1에는 랜덤으로 선언된 값이 주기적으로 올라가고
pi/2 주제로 메시지가 게시되면 json 으로 load 해서 message 키의 값을 출력하는 코드를 구현해보자.
import time, json, ssl
import paho.mqtt.client as mqtt
import random
ENDPOINT = 'a2y1x9fw8lrrds-ats.iot.ap-northeast-2.amazonaws.com'
THING_NAME = 'rpi_test'
sub = 'pi/2'
def on_connect(mqttc, obj, flags, rc):
if rc == 0:
print('connected!!')
mqttc.subscribe(sub, qos=0)
def on_message(mqttc, obj, msg):
if msg.topic == sub:
payload = msg.payload.decode('utf-8')
j = json.loads(payload)
print(j['message'])
mqtt_client = mqtt.Client(client_id=THING_NAME)
mqtt_client.on_connect = on_connect
mqtt_client.on_message = on_message
mqtt_client.tls_set('/home/pi/Desktop/awsiot/cer/CAG2.pem', certfile='/home/pi/Desktop/awsiot/cer/certificate.pem.crt',
keyfile='/home/pi/Desktop/awsiot/cer/private.pem.key', tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None)
mqtt_client.connect(ENDPOINT, port=8883)
mqtt_client.loop_start() # threaded network loop
while True:
time.sleep(2)
test = random.randint(0,180)
payload = json.dumps({'action': test})
mqtt_client.publish('pi/1', payload, qos=1)
코드를 실행해보면 인증서 위치등이 정확하게 일치하고 서버와 연결이 된다면 connected!! 라는 문구가 나온다.
또한 연결된후에 지속적으로 랜덤 인자가 서버에서 구독중인 pi/1에 계속해서 자동적으로 기록되는 것을 볼 수 있다.
또한 pi/2에 구독 상태이기 때문에 아래와 같은 메세지 형태로 보내게 되면 cui창에서 보내온 메세지를 다시 echo해주는 것을 볼 수 있다.
{
"message": "Hello!!"
}
위와 같은 iot기반의 서비스는 메세지 구독 서비스이기때문에 개인적으로 여타 다른 aws 서비스보다 가격이 저렴한 것이 특징이고 일반적인 get post를 통한 db를 쌓는 방식보다 좀더 안전한것이 특징일거 같다.
물론 메세지 방식이라.. 메세지 로그를 남기려면 좀더 다른 방법들을 이용해야 하지만....
그래도 이런 방식을 통해서 smart home device 제어 또는 smart 농장 같은곳에서 적용된다면 대규모적인 사물에서도 메세지 사용만을 통한 적은 트래픽을 이용해서 다양한 사물 제어 시설 모니터링이 가능할 것으로 기대 된다.
'임베디드 > raspberry pi' 카테고리의 다른 글
raspberry pi aws kinesis video stream 설치 및 사용 (2) | 2020.10.09 |
---|---|
raspberry pi aws iot에 연결해보기 (part.1 사물 생성 및 인증서) (0) | 2020.10.05 |