AWSIoTCore
Python으로 aws-iot 진행하였습니다.
준비과정 (AWSIoTCore 세팅방법)
1. AWS IoT Core -> 온보딩 -> 시작하기
2. 시작하기 클릭
3. 본인은 라즈베리파이에서 하기 때문에, Linux/OSX, Python 클릭
4. 사물등록, 이름은 아무거나
5. 연결키트 다운로드, Linux/OSX -> 다음 단계
6. 1단계부터 3단계까지 순차적으로 진행 -> 완료 클릭
7. 보안 -> 정책 클릭 후 새로운 정책을 만든다. Action과 Resource ARN을 아래 그림과 같이 수정
8. 보안 -> 인증서 -> 정책연결과 사물연결을 해준다.
9. 이제 cognito로 이동,
- cognito는 연동자격 증명에 대한 소비자 자격 증명 관리 및 AWS 자격 증명이다.
10. 자격 증명 풀 관리 클릭
11.새 자격 증명 풀 만들기 클릭
12. 자격 증명 풀 이름을 정하고, 빨간 네모 박스에 체크하고 -> 풀 생성 클릭
13. 편집 클릭 -> Resource 아래 "" 사이에 ARN을 입력한다.
14. ARN은 AWS IoT -> 관리-> 사물 클릭 [ (+추가) thing까지만 복사 붙여넣기 한다.]
15. ENDPOINT는 아래의 사진과 같이 iot core -> settings에 가면 확인할 수 있다.
AWSIoTCore MQTT Test
3. 본인은 라즈베리파이에서 하기 때문에, Linux/OSX, Python 클릭
4. 사물등록, 이름은 아무거나
5. 연결키트 다운로드, Linux/OSX -> 다음 단계
6. 1단계부터 3단계까지 순차적으로 진행 -> 완료 클릭
7. 보안 -> 정책 클릭 후 새로운 정책을 만든다. Action과 Resource ARN을 아래 그림과 같이 수정
8. 보안 -> 인증서 -> 정책연결과 사물연결을 해준다.
9. 이제 cognito로 이동,
- cognito는 연동자격 증명에 대한 소비자 자격 증명 관리 및 AWS 자격 증명이다.
10. 자격 증명 풀 관리 클릭
11.새 자격 증명 풀 만들기 클릭
12. 자격 증명 풀 이름을 정하고, 빨간 네모 박스에 체크하고 -> 풀 생성 클릭
13. 편집 클릭 -> Resource 아래 "" 사이에 ARN을 입력한다.
14. ARN은 AWS IoT -> 관리-> 사물 클릭 [ (+추가) thing까지만 복사 붙여넣기 한다.]
15. ENDPOINT는 아래의 사진과 같이 iot core -> settings에 가면 확인할 수 있다.
AWSIoTCore MQTT Test
5. 연결키트 다운로드, Linux/OSX -> 다음 단계
6. 1단계부터 3단계까지 순차적으로 진행 -> 완료 클릭
7. 보안 -> 정책 클릭 후 새로운 정책을 만든다. Action과 Resource ARN을 아래 그림과 같이 수정
8. 보안 -> 인증서 -> 정책연결과 사물연결을 해준다.
9. 이제 cognito로 이동,
- cognito는 연동자격 증명에 대한 소비자 자격 증명 관리 및 AWS 자격 증명이다.
10. 자격 증명 풀 관리 클릭
11.새 자격 증명 풀 만들기 클릭
12. 자격 증명 풀 이름을 정하고, 빨간 네모 박스에 체크하고 -> 풀 생성 클릭
13. 편집 클릭 -> Resource 아래 "" 사이에 ARN을 입력한다.
14. ARN은 AWS IoT -> 관리-> 사물 클릭 [ (+추가) thing까지만 복사 붙여넣기 한다.]
15. ENDPOINT는 아래의 사진과 같이 iot core -> settings에 가면 확인할 수 있다.
AWSIoTCore MQTT Test
7. 보안 -> 정책 클릭 후 새로운 정책을 만든다. Action과 Resource ARN을 아래 그림과 같이 수정
8. 보안 -> 인증서 -> 정책연결과 사물연결을 해준다.
9. 이제 cognito로 이동,
- cognito는 연동자격 증명에 대한 소비자 자격 증명 관리 및 AWS 자격 증명이다.
10. 자격 증명 풀 관리 클릭
11.새 자격 증명 풀 만들기 클릭
12. 자격 증명 풀 이름을 정하고, 빨간 네모 박스에 체크하고 -> 풀 생성 클릭
13. 편집 클릭 -> Resource 아래 "" 사이에 ARN을 입력한다.
14. ARN은 AWS IoT -> 관리-> 사물 클릭 [ (+추가) thing까지만 복사 붙여넣기 한다.]
15. ENDPOINT는 아래의 사진과 같이 iot core -> settings에 가면 확인할 수 있다.
AWSIoTCore MQTT Test
9. 이제 cognito로 이동,
- cognito는 연동자격 증명에 대한 소비자 자격 증명 관리 및 AWS 자격 증명이다.
10. 자격 증명 풀 관리 클릭
11.새 자격 증명 풀 만들기 클릭
12. 자격 증명 풀 이름을 정하고, 빨간 네모 박스에 체크하고 -> 풀 생성 클릭
13. 편집 클릭 -> Resource 아래 "" 사이에 ARN을 입력한다.
14. ARN은 AWS IoT -> 관리-> 사물 클릭 [ (+추가) thing까지만 복사 붙여넣기 한다.]
15. ENDPOINT는 아래의 사진과 같이 iot core -> settings에 가면 확인할 수 있다.
AWSIoTCore MQTT Test
10. 자격 증명 풀 관리 클릭
11.새 자격 증명 풀 만들기 클릭
12. 자격 증명 풀 이름을 정하고, 빨간 네모 박스에 체크하고 -> 풀 생성 클릭
13. 편집 클릭 -> Resource 아래 "" 사이에 ARN을 입력한다.
14. ARN은 AWS IoT -> 관리-> 사물 클릭 [ (+추가) thing까지만 복사 붙여넣기 한다.]
15. ENDPOINT는 아래의 사진과 같이 iot core -> settings에 가면 확인할 수 있다.
AWSIoTCore MQTT Test
12. 자격 증명 풀 이름을 정하고, 빨간 네모 박스에 체크하고 -> 풀 생성 클릭
13. 편집 클릭 -> Resource 아래 "" 사이에 ARN을 입력한다.
14. ARN은 AWS IoT -> 관리-> 사물 클릭 [ (+추가) thing까지만 복사 붙여넣기 한다.]
15. ENDPOINT는 아래의 사진과 같이 iot core -> settings에 가면 확인할 수 있다.
AWSIoTCore MQTT Test
14. ARN은 AWS IoT -> 관리-> 사물 클릭 [ (+추가) thing까지만 복사 붙여넣기 한다.]
15. ENDPOINT는 아래의 사진과 같이 iot core -> settings에 가면 확인할 수 있다.
AWSIoTCore MQTT Test
AWSIoTCore MQTT Test
이제 awsiotcoreSubTest.py와 awsiotcorePubTest.py로 먼저 MQTT테스트를 진행한다.
코드는 아래와 같다.
awsiotcoreSubTest.py
import time
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
# subsciber에서 hellowrtd 함수의 내용을 출력하게 된다.
def helloworld(self, params,packet):
print('Recieved Message from AWS IoT Core')
print('Topic: '+ packet.topic)
print("Payload: ", (packet.payload))
# For certificate based connection
myMQTTClient = AWSIoTMQTTClient("clientid")
# For TLS mutual authentication
# "" 사이에 본인의 ENDPOINT를 입력한다.
myMQTTClient.configureEndpoint("ai628r69tqiu1-ats.iot.ap-northeast-2.amazonaws.com", 8883) #Provide your AWS IoT Core endpoint (Example: "abcdef12345-ats.iot.us-east-1.amazonaws.com")
# root-CA.crt, cert.pem, private.key의 경로를 입력한다.
myMQTTClient.configureCredentials("/home/pi/Downloads/aws-iot/root-CA.crt", "/home/pi/Downloads/aws-iot/aws-iot.private.key", "/home/pi/Downloads/aws-iot/aws-iot.cert.pem") #Set path for Root CA and unique device credentials (use the private key and certificate retrieved from the logs in Step 1)
myMQTTClient.configureOfflinePublishQueueing(-1)
myMQTTClient.configureDrainingFrequency(2)
myMQTTClient.configureConnectDisconnectTimeout(10)
myMQTTClient.configureMQTTOperationTimeout(5)
print("Initiating IoT Core Topic ...")
# aws/iot 토픽에 입장하여 helloworld 함수의 내용을 받게 된다.
myMQTTClient.subscribe("aws/iot",1,helloworld)
myMQTTClient.connect()
while True:
time.sleep(5)
awsiotcorePubTest.py
import time
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
# For certificate based connection
myMQTTClient = AWSIoTMQTTClient("clientid")
# For TLS mutual authentication
myMQTTClient.configureEndpoint("ai628r69tqiu1-ats.iot.ap-northeast-2.amazonaws.com", 8883) #Provide your AWS IoT Core endpoint (Example: "abcdef12345-ats.iot.us-east-1.amazonaws.com")
myMQTTClient.configureCredentials("/home/pi/Downloads/aws-iot/root-CA.crt", "/home/pi/Downloads/aws-iot/aws-iot.private.key", "/home/pi/Downloads/aws-iot/aws-iot.cert.pem") #Set path for Root CA and unique device credentials (use the private key and certificate retrieved from the logs in Step 1)
myMQTTClient.configureOfflinePublishQueueing(-1)
myMQTTClient.configureDrainingFrequency(2)
myMQTTClient.configureConnectDisconnectTimeout(10)
myMQTTClient.configureMQTTOperationTimeout(5)
print("Initiating IoT Core Topic ...")
# myMQTTClient.subscribe("aws/iot")
myMQTTClient.connect()
print("Publishing Message from RPI")
myMQTTClient.publish(
topic="aws/iot",
QoS=1,
payload="{'Message' : 'Message By RPI'}"
)
미니프로젝트 소개
1. 시나리오
1)스마트홈 구축
- 문 앞에 접근하면 LED 등이 켜지면서 얼굴 인식이 시작된다. 얼굴 인식에 성공 할 시 “얼굴 인식 성공!” 이라는 단어가 뜨면서 문이 열리게 된다. (얼굴 인식 성공은 “나(Me)”만 얼굴 인식에 성공할 수 있다.)
- Subscriber(구독자)는 LED 소등 여부와 얼굴인식 성공여부를 보고 받는다.
- Publisher(발행자)는 LED소등 여부와 얼굴인식 성공여부를 보고한다.
- 초음파 거리센서와 가까워 질 때, LED가 켜지면서 얼굴인식이 시작된다.
- 반대로 초음파와 거리가 멀어지면 LED는 꺼지고, "얼굴인식 객체가 없습니다"라는 메세지를 보낸다.
2. 준비물
1)라즈베리파이4(풀세트, 센서포함)
3. 진행과정
1)문 앞, 초음파 거리 센서(sensor) 30cm 이내 위치할 시에
LED 전구가 켜진다.
2)전구가 켜지면서 얼굴인식이 진행된다.
3)얼굴 인식이 완료되면 “얼굴 인식 성공 !!” 이라는 메세지를 출력하게 되고, MQTT에서도 똑같이 메세지가 도착하게 된다.
** Sub.py에 출력된 내용
Subscriber는
LED 전구의 ON / OFF 여부,
얼굴 인식 성공 / 실패 여부를 보고 받는다.
** Pub.py에 출력된 내용
** 휴대폰 MQTT 앱에 도착한 내용
4. awsiotcore.py (코드내용)
# python3 -m venv venv
# source venv/bin/activate
# pip3 install opencv-python
# pip3 install dlib
# pip3 install face_recognition
# pip3 install RPi.GPIO
# pip3 install picamera
# pip3 install paho-mqtt
# pip3 install AWSIoTPythonSDK
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
import face_recognition
import picamera
import numpy as np
import paho.mqtt.client as mqtt
import RPi.GPIO as GPIO
import time
# For certificate based connection
myMQTTClient = AWSIoTMQTTClient("clientid")
# For TLS mutual authentication
myMQTTClient.configureEndpoint("ai628r69tqiu1-ats.iot.ap-northeast-2.amazonaws.com", 8883) #Provide your AWS IoT Core endpoint (Example: "abcdef12345-ats.iot.us-east-1.amazonaws.com")
myMQTTClient.configureCredentials("/home/pi/Downloads/aws-iot/root-CA.crt", "/home/pi/Downloads/aws-iot/aws-iot.private.key", "/home/pi/Downloads/aws-iot/aws-iot.cert.pem") #Set path for Root CA and unique device credentials (use the private key and certificate retrieved from the logs in Step 1)
myMQTTClient.configureOfflinePublishQueueing(-1)
myMQTTClient.configureDrainingFrequency(2)
myMQTTClient.configureConnectDisconnectTimeout(10)
myMQTTClient.configureMQTTOperationTimeout(5)
print("Initiating IoT Core Topic ...")
# GPIO ultra sonic Setting
trig=17
echo=18
ledpin=14
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(trig,GPIO.OUT)
GPIO.setup(echo,GPIO.IN)
####################
# Camera Setting
camera = picamera.PiCamera()
camera.resolution = (320, 240)
output = np.empty((240, 320, 3), dtype=np.uint8)
# Load a sample picture and learn how to recognize it.
print("Loading known face image(s)")
me_image = face_recognition.load_image_file("me.jpg")
me_face_encoding = face_recognition.face_encodings(me_image)[0]
# Initialize some variables
face_locations = []
face_encodings = []
#########################
while True:
myMQTTClient.connect()
GPIO.output(trig,False)
time.sleep(15)
GPIO.output(trig,True)
time.sleep(0.00001)
GPIO.output(trig,False)
while GPIO.input(echo)==0:
pulse_start=time.time()
while GPIO.input(echo)==1:
pulse_end=time.time()
pulse_duration=pulse_end - pulse_start
distance=pulse_duration*17000
distance=round(distance,2)
print("Distane: ",distance, "cm")
if distance<30:
GPIO.setwarnings(False)
GPIO.setup(ledpin,GPIO.OUT)
GPIO.output(ledpin,True)
print("distance is lower than 30")
print("LED ON")
print("Publishing Message from RPI")
myMQTTClient.publish(
topic="aws/iot",
QoS=1,
payload="{'Message' : LED ON'}"
)
print("Capturing image.")
# Grab a single frame of video from the RPi camera as a numpy array
camera.capture(output, format="rgb")
# Find all the faces and face encodings in the current frame of video
face_locations = face_recognition.face_locations(output)
print("Found {} faces in image.".format(len(face_locations)))
print("Face Recognition Failed !!")
myMQTTClient.publish(
topic="aws/iot",
QoS=1,
payload="{'Message' : Face Recognition Failed !!'}"
)
face_encodings = face_recognition.face_encodings(output, face_locations)
# Loop over each face found in the frame to see if it's someone we know.
for face_encoding in face_encodings:
# See if the face is a match for the known face(s)
match = face_recognition.compare_faces([me_face_encoding], face_encoding)
name = "<Unknown Person>"
if match[0]:
name = "Me"
if(name=="Me"):
print("Face Recognition PASS !!")
myMQTTClient.publish(
topic="aws/iot",
QoS=1,
payload="{'Message' : Face Recognition Success !!'}"
)
print("This image includes in our data {}!".format(name))
if distance>30:
GPIO.setwarnings(False)
GPIO.setup(ledpin,GPIO.OUT)
GPIO.cleanup(ledpin)
print("distance is higher than 30")
print("LED OFF")
print("please come to sensor closer")
myMQTTClient.publish(
topic="aws/iot",
QoS=1,
payload="{'Message' : LED OFF'}"
)
myMQTTClient.publish(
topic="aws/iot",
QoS=1,
payload="{'Message' : There is nothing to Recognize'}"
)
5. AWS 결과 사진
6. 참고 사이트
1)Ultrasonic (초음파거리센서)
2)LED전구
3)MQTT
4)Face Recognition (얼굴인식)
5)AWSIoTCore
7. 오류 해결 내역
1)Subscribe 채널에서 문장 앞에 b”LED ON”과 같이 b가 같이 출력되었음.
--> decode(“utf-8”)로 해결
2)기존의 face_recog.py 코드를 이용했을 경우, 코드가 동작은 했지만, 얼굴 인식 프로그램이 늦게 동작하여 랙이 상당히 많이 걸림.
--> 프레임 수 조절 및 코드를 단순 촬영하는 코드로 바꾸어서 문제 해결.
(기존의 코드는 실시간으로 webcam 프로그램이 실행되면서, 얼굴인식이 진행 되었다.)
3)AWS IoT Core 내의 MQTT 과정을 이해하기 위해서 유튜브링크를 참고하였다. 메세지 부분의 코드를 찾기 시작하였고 앞에서의 awsiotcoreSubTest.py, awsiotcorePubTest.py를 통해 코드의 이해에 큰 도움이 되었다.
'Tech Blog > AWS' 카테고리의 다른 글
AWS (Amazon Web Service) 활용 기초 (0) | 2021.07.15 |
---|