Ex1. ④ AWS IOT CORE 연결
( 태그 : AWS_IoT_FreeRTOS, AWS_IoT )
1. AWS IoT Thing 등록
1-1. IoT Thing 생성
AWS Console에 Login 한 후 AWS IoT Core 콘솔로 이동합니다. 오른쪽 Side Menu에서 Manage를 선택 합니다.
Things 항목을 선택하고 Register a thing을 클릭하여 디바이스 생성 메뉴에 진입합니다.
Create a single thing을 선택 하여 생성을 시작합니다.
Thing의 이름을 입력합니다. 예를 들면
iot-stm-sensor-nodeA
라고 입력할 수 있습니다.필요에 따라 Device Type을 생성하고 Group을 생성하여 관리할 수 있습니다. 이번 실습에서는 생성하지 않습니다.
Next를 선택한 후 다음 단계로 이동합니다.
Certificate을 생성 또는 등록하는 단계 입니다.
이전 단계의 Terminal 로그에서 복사한 STSAFE-A110의 device certificate을 사용해야 합니다.
Create thing without certificate을 선택하여 certificate을 등록하지 않고 thing 생성을 마무리 합니다.
생성이 완료되면 List에서 Thing을 확인할 수 있습니다.
생성된 Thing의 이름을 선택하면 다음과 같이 상세 항목들을 볼 수 있습니다.
1-2. Policy 생성
오른쪽 Side Menu에서 Secure를 선택한 후 Policies를 선택합니다. Create a policy를 선택하여 정책 생성을 시작합니다.
Policy 이름을 입력합니다. 예를 들면
policy-stm32-iot-node
라고 입력할 수 있습니다.Add statements의 Advance mode를 클릭하여 정책 입력 editor를 활성화 합니다.
정책 입력 editor가 활성화 됩니다.
IoT 서비스의 모든 리소스에 대한 Action을 허용합니다.
- 허용 Action : Connect, Publish, Subscribe, Receive
- 아래의 정책을 복사하여 editor에 입력 합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "*"
}
]
}
정책을 붙여 넣은 후 Create를 클릭하여 생성을 완료합니다.
다음과 같이 생성된 정책을 확인할 수 있습니다.
1-3. Private Certficate 등록
오른쪽 Side Menu에서 Secure를 선택한 후 Create a Certificates를 선택합니다.
STM32 MCU에서 가져온 Certificate을 사용해야 하므로 Use my certificate의 Get started를 선택합니다.
Next를 클릭한 후 다음 단계를 넘어갑니다.
Select certificates를 클릭하여 STM32 MCU에서 가져온 Certiifcate을 선택합니다.
Activate all을 선택한 후 Register certificate을 눌러 등록을 완료합니다.
다음과 같이 등록된 Certificate을 확인할 수 있습니다.
1-4. Thing에 Certificate 연결
- 등록된 certificate의 왼쪽에 있는 … 아이콘을 클릭합니다.
Menu List에서 Attach thing을 선택합니다.
Pop-up 된 thing 선택 창에서 생성한 thing을 선택한 후 Attach 버튼을 클릭합니다.
등록된 certificate의 왼쪽에 있는 … 아이콘을 클릭합니다.
Menu List에서 Attach policy를 선택합니다.
Pop-up 된 policy 선택 창에서 생성한 policy를 선택한 후 Attach 버튼을 클릭합니다.
오른쪽의 Manage 메뉴의 Things 를 선택한 후 표시되는 Thing을 선택합니다.
Thing의 상세 항목 중 Security를 선택하면 연결 된 Certificate 정보가 표시됩니다.
연결된 Certificate을 선택하면 상세 정보가 표시됩니다.
- STM의 인증서 정보가 정상적으로 나온것을 확인할 수 있습니다.
세부 정보 중 Policies를 선택하면 연결된 정책을 볼 수 있습니다.
Policy를 선택하면 상세 정책을 확인할 수 있습니다.
서비스 정책 변경이 필요하면 Edit policy document 를 선택하여 변경할 수 있습니다.
2. Device를 AWS IoT Core에 연결
2-1. WiFi 연결 설정
- WiFi 연결을 설정합니다.
- STM32CubeExpansion_Cloud_AWS_V2.0.0/Middlewares/Third_Party/amazon-freertos/demos/include/aws_clientcredential.h
- STM32 CubeIDE에서 B-L4S5I-IOT01_aws_dems project를 선택한 후 includes의 ‘amazon-freertos/demos/include’를 확장한 후 aws_clientcredential.h 파일을 선택합니다.
- File 속성이 읽기 모드로 되어 있는 경우 쓰기가 가능하도록 변경합니다.
- 파일 속성을 쓰기 가능 모드로 변경 합니다.
- 접속할 WiFI 공유기의 SSID와 비밀 번호를 설정합니다.
/*
* @brief Wi-Fi network to join.
*
* @todo If you are using Wi-Fi, set this to your network name.
*/
#define clientcredentialWIFI_SSID "xxxx"
/*
* @brief Password needed to join Wi-Fi network.
* @todo If you are using WPA, set this to your network password.
*/
#define clientcredentialWIFI_PASSWORD "xxxx"
2-2. MCU보드 MQTT Clinet 설정
- B-L4S5I-IOT01_aws_demos 프로젝트에 AWS IoT Core의 MQTT Broker 정보를 등록해야 합니다.
AWS IoT 콘솔에서 MQTT Endpoint와 생성한 Thing의 이름을 가져옵니다.
MQTT Endpoint를 AWS IoT 콘솔에서 확인합니다.
- AWS IoT 콘솔의 Side Menu에서 Setting 항목을 선택합니다.
- Custom endpoint로 MQTT 메시지를 publish/subcribe 할 수 있습니다. Custom endpoint를 복사합니다.
- AWS IoT 콘솔의 Manage 메뉴에서 Things를 선택한 후 Things Name을 복사합니다.
STM32 CubeIDE에서 includes의 ‘amazon-freertos/demos/include’를 확장한 후 aws_clientcredential.h 파일을 선택합니다.
복사한 Custom endpoint를 clientcredentialMQTT_BROKER_ENDPOINT에 입력 합니다.
/*
* @brief MQTT Broker endpoint.
*
* @todo Set this to the fully-qualified DNS name of your MQTT broker.
*/
#define clientcredentialMQTT_BROKER_ENDPOINT "a3mrkcguk6khw6-ats.iot.ap-northeast-2.amazonaws.com"
- 복사한 Thing의 이름을 clientcredentialIOT_THING_NAME에 입력합니다.
/*
* @brief Host name.
*
* @todo Set this to the unique name of your IoT Thing.
*/
#define clientcredentialIOT_THING_NAME "iot-stm-sensor-nodeA"
2-3. Project Build & Programming
- B-L4S5I-IOT01_aws_demos 프로젝트를 재 build한 후 생성된 binary image를 STM32 MCU 보드에 programming 합니다.
- B-L4S5I-IOT01_aws_demos.bin 파일이 저장되는 위치는 ‘STM32CubeExpansion_Cloud_AWS_V2.0.0/Projects/B-L4S5I-IOT01A/Applications/Cloud/aws_demos/STM32CubeIDE/PostBuild/’ 입니다.
- MCU 보드 재 부팅 후 AWS IoT Core의 MQTT Broker에 연결되는 것을 확인 할 수 있습니다. (MQTT connection established)
- MQTT Broker가 연결되면 iotdemo/topic 으로 테스트 메시지를 publish 하는 것을 확인할 수 있습니다.
4 3712 [Tmr Svc] WiFi connected to AP andyhouse.
5 3716 [Tmr Svc] IP Address acquired 192.168.0.120
6 3721 [iot_thread] [INFO ][DEMO][3721] ---------STARTING DEMO---------
7 3728 [iot_thread] [INFO ][INIT][3728] SDK successfully initialized.
..8 7327 [iot_thread] [INFO ][DEMO][7327] Successfully initialized the demo. Network type for the demo: 1
9 7336 [iot_thread] [INFO ][MQTT][7336] MQTT library successfully initialized.
10 7343 [iot_thread] [INFO ][DEMO][7343] MQTT demo client identifier is Iot-stm-sensor-nodeA (length 20).
..11 11970 [iot_thread] [INFO ][MQTT][11970] Establishing new MQTT connection.
12 11978 [iot_thread] [INFO ][MQTT][11977] Anonymous metrics (SDK language, SDK version) will be provided to AWS IoT. Recompile with AWS_IOT_MQTT_ENABLE_METRICS set to 0 to disable.
13 11995 [iot_thread] [INFO ][MQTT][11995] (MQTT connection 0x20044920, CONNECT operation 0x20044aa8) Waiting for operation completion.
.14 12117 [iot_thread] [INFO ][MQTT][12116] (MQTT connection 0x20044920, CONNECT operation 0x20044aa8) Wait complete with result SUCCESS.
15 12129 [iot_thread] [INFO ][MQTT][12129] New MQTT connection 0x2004307c established.
16 12138 [iot_thread] [INFO ][MQTT][12138] (MQTT connection 0x20044920) SUBSCRIBE operation scheduled.
17 12148 [iot_thread] [INFO ][MQTT][12148] (MQTT connection 0x20044920, SUBSCRIBE operation 0x20044ac8) Waiting for operation completion.
18 12229 [iot_thread] [INFO ][MQTT][12228] (MQTT connection 0x20044920, SUBSCRIBE operation 0x20044ac8) Wait complete with result SUCCESS.
19 12241 [iot_thread] [INFO ][DEMO][12241] All demo topic filter subscriptions accepted.
20 12250 [iot_thread] [INFO ][DEMO][12249] Publishing messages 0 to 1.
21 12257 [iot_thread] [INFO ][MQTT][12257] (MQTT connection 0x20044920) MQTT PUBLISH operation queued.
22 12267 [iot_thread] [INFO ][MQTT][12267] (MQTT connection 0x20044920) MQTT PUBLISH operation queued.
23 12277 [iot_thread] [INFO ][DEMO][12277] Waiting for 2 publishes to be received.
24 12296 [iot_thread] [INFO ][DEMO][12295] MQTT PUBLISH 0 successfully sent.
25 12312 [iot_thread] [INFO ][DEMO][12311] MQTT PUBLISH 1 successfully sent.
26 12370 [iot_thread] [INFO ][DEMO][12370] Incoming PUBLISH received:
Subscription topic filter: iotdemo/topic/1
Publish topic name: iotdemo/topic/1
Publish retain flag: 0
Publish QoS: 1
Publish payload: Hello world 0!
TLS Communication Flow
- STM32 MCU 보드와 AWS 간의 TLS 통신은 다음과 같은 절차에 의해 설정 됩니다.
Credits
Korean version
Jongwoo Lee (rainny@)
Sejun Kim (sejun@)
Albert Lee (sehyul@)
Original Contents Author
Vanitha Ramaswami (rvanitha@)
© 2020 Amazon Web Services, Inc. or its Affiliates. All rights reserved.
메이커스페이스 G·캠프에서 만든 콘텐츠가 아니며, 서울하드웨어해커톤에서 강의가 진행될 예정입니다.
'05_Toolkit > AWS_IoT' 카테고리의 다른 글
Ex2. ADDING TEMPERATURE & LED CONTROL (0) | 2020.11.26 |
---|---|
Ex1. ⑤ SENSOR DATA PUBLISH (0) | 2020.11.26 |
Ex1. ③ AWS IOT APPLICATION (0) | 2020.11.26 |
Ex1. ② STM SECURE BOOT (0) | 2020.11.26 |
Ex1. ① STSAFE PROVISIOING (0) | 2020.11.26 |