다음과 같이 동작하는 IoT 서비스를 AWS 서비스를 이용하여 구축해 본다.
IoT 서비스 아키텍처
주요 학습내용
X.509 인증서를 생성하기 위해서, 아두이노 보드에서 CSR(Certificate Signing Request)를 생성한후, 이를 AWS 콘솔에서 업로드할 것이다.
CSR 생성 절차
Both NL & CR로 되어 있어야 함)
시리얼 모니터 창에서 CSR에 포함될 정보를 입력하는데, 아래 그림과 같이 Common Name 을 제외하곤 모두 빈칸을 입력 (아무 입력없이 전송 버튼을 누름)
-----BEGIN CERTIFICATE REQUEST-----
과 -----END CERTIFICATE REQUEST-----
사이에 생성된 CSR 문자열을 복사하여 텍스트 에디터에 붙여넣기 한 후, csr.txt 파일로 저장한다.
이 파일은 후에 AWS 콘솔에서 X.509 인증서 생성을 위해 업로드 됨
csr.txt 예시
아직 사물이 없습니다
페이지에서 사물 등록을 선택합니다.
Creating AWS IoT things(AWS IoT 사물 생성) 페이지에서 Create a single thing(단일 사물 생성)을 선택합니다.
사물 생성 페이지의 이름 필드에 MyMKRWiFi1010과 같은 사물의 이름을 입력합니다. 나머지 부분은 그대로 나두고 다음을 선택합니다.
사물에 인증서 추가 페이지에서 CSR을 통한 생성을 선택합니다.
다음 화면에서 사물 등록을 클릭합니다.
이제 여러분은 사물 페이지에서 새롭게 등록된 사물을 확인할 수 있습니다.
AWS IoT 정책을 생성하려면
왼쪽 탐색 창에서 보안을 선택하고 정책을 선택합니다. [You don't have a policy yet] 페이지에서 [Create a policy]를 선택합니다.
정책 생성 페이지의 이름 필드에 정책 이름(예: AllowEverything)을 입력합니다.
정책을 생성했으면 디바이스 인증서에 이 정책을 연결해야 합니다. 인증서에 AWS IoT 정책을 연결하는 것은 정책에 지정된 권한을 디바이스에 부여하는 것입니다.
왼쪽 탐색 창에서 보안을 선택하고 인증서를 선택합니다.
앞서 생성한 인증서의 상자에서 ...를 선택해 드롭다운 메뉴를 연 다음 [정책 연결]를 선택합니다.
인증서에 정책 연결 대화 상자에서 앞 단계에서 생성한 정책(AllowEverything) 옆의 확인란을 선택한 다음 연결을 선택합니다.
모든 디바이스에는 AWS IoT와 통신할 수 있도록 디바이스 인증서가 설치되어 있어야 합니다.
Arduino IDE의 파일-예제-Arduino Cloud Provider Examples-AWSIoT-AWS_IoT_WiFi 메뉴 선텍
arduino_secrets.h 탭에서, 사용가능한 WiFi의 SSID와 Password를 설정
// Fill in your WiFi networks SSID and password
#define SECRET_SSID ""
#define SECRET_PASS ""
앞에서 확인한 엔드포인트를 SECRET_BROKER 값으로 설정
// Fill in the hostname of your AWS IoT broker
#define SECRET_BROKER "xxxxxxxxxxxxxx.iot.xx-xxxx-x.amazonaws.com"
앞에서 다운로드한 인증서 파일을 텍스트 에디터로 열고 값을 복사하여 다음 영역에 붙여넣기 한다.
// Fill in the boards public certificate
const char SECRET_CERTIFICATE[] = R"(
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
)";
스케치 프로그램을 보드에 업로드하고, 시리얼 모니터 창을 연다.
보드는 WiFi 네트워크와 연결을 시도하고, 성공하면 AWS IoT에 MQTT를 통해 연결을 시도한다.
MQTT Client를 통해 AWS IoT Core와 디바이스 간의 상호작용을 모니터링 한다.
디바이스에서 AWS IoT로의 상호작용 모니터링
구독 주제 (Subscribe topic) 박스에 arduino/outgoing을 입력하고 주제 구독 (Subscribe to topic) 버튼을 클릭한다.
AWS IoT에서 디바이스로의 상호작용 모니터링
주제 게시메뉴의 게시섹션에서, 게시할 주제로 arduino/incoming을 입력하고, 주제 게시 (Publish to topic) 버튼을 클릭한다.
시리얼 모니터 창에서 메시지 수신을 확인한다.
2. AWS IoT Core와 아두이노 (MKR WiFi 1010) 연결하기에서 수행한 실습 설정을 바탕으로 다음 과정을 진행합니다.
필요한 라이브러리 설치
AWS IoT MQTT Client를 통해 다음 주제를 구독하여, 현재 디바이스 상태 업데이트가 제대로 수신되는 지를 확인한다.
AWS IoT MQTT Client를 통해 다음 주제와 메시지를 지정하여 게시하여, 아두이노의 LED가 켜지는지 확인한다.
메시지
{
"state": {
"desired": {
"LED": "ON"
}
}
}
결과 (시리얼 모니터창)