Ex2. ② SENSOR 추가 및 제어
( 태그 : AWS_IoT_FreeRTOS, AWS_IoT )
1. 온도 Sensor Node 추가
- CubeMonitor의 작업 공간에 STM32 MCU 보드의 온도 Sensor 데이터를 수신하는 node를 추가 합니다.
- CubeMonitor의 Pallete에서 function node를 작업 공간으로 drag하여 추가 합니다.
- MQTT 수신 데이터를 Relay하는 json function node의 출력을 추가한 function node의 입력으로 연결합니다.
- 추가한 function node를 더블 클릭하여 속성 편집 창을 활성화 합니다.
- Name 항목에 temperature를 입력 합니다.
- Function 항목에 MQTT message의 Temperature 값을 가져오는 코드를 입력합니다.
msg.payload = msg.payload.Temp
return msg;
- Done 버튼을 눌러 편집을 완료 합니다. 온도 Sensor node 추가가 완료 되었습니다.
2. Dashboard에 온도 Sensor 추가
- CubeMonitor의 Pallete에서 dashboard의 gauge를 작업 공간으로 drag하여 가져옵니다.
- 추가된 gauge의 입력을 온도 Sensor node의 출력과 연결시킵니다.
- gauge를 더블 클릭하여 속성 편집 창을 표시합니다.
- Group 항목은 [STM32 IOT Discovery Board] ENVIRONMENT SENSOR DATA를 선택합니다.
- Label에는 temperature를 입력합니다.
- Unit은 degC를 입력합니다.
- Range의 최대값을 50으로 변경합니다.
- Done 버튼을 클릭하여 편집을 완료합니다.
- DEPLOY 버튼을 클릭하여 추가된 gauge를 반영합니다.
- DASHBOARD 버튼을 클릭하면 Temperature gauge가 추가된 것을 확인할 수 있습니다.
3. Dashboard에서 LED 제어
3-1. IoT Shadow 생성
- AWS IoT 콘솔의 Things 메뉴에서 Shadows를 선택한 후 Add a shadow를 클릭하여 추가합니다.
- shadow name을 입력한 후 Add 버튼을 클릭합니다.
- Things 메뉴에서 추가된 Shadow를 확인할 수 있습니다.
3-2. STM32 CubeMonitor의 Shadow 설정
- CubeMonitor 작업 파일에 구성되어 있는 Shadow node를 생성한 IoT Shadow 설정으로 변경합니다.
- LED CONTROL은 Dashboard의 switch node 입니다. Dashboard의 toggle switch UI에 연결되어 있습니다.
- LED CONTROL은 MQTT out node에 연결 되어 있습니다. MQTT out node는 AWS IoT MQTT broker로 메시지를 publish 합니다.
- LED CONTROL node와 연결된 Shadow node를 더블 클릭하여 속성을 편집 합니다.
- Server 편집 버튼을 클릭하여 속성을 변경 합니다.
- Name에 AP-NORTHEAST-2를 입력합니다.
- Server 항목에 AWS IoT의 MQTT Broker endpoint 주소를 입력합니다.
- 입력 후 Update 버튼을 클릭하여 업데이트 합니다.
- Topic에 IoT Shadow Topic을 입력합니다.
- Topic : $aws/things/Iot-stm-sensor-nodeA/shadow/update
- IoT Shadow를 통해 Iot-stm-sensor-nodeA의 상태 업데이트 Topic 입니다.
- Done 버튼을 클릭하여 수정 사항을 업데이트 한 후 DEPLOY 버튼을 클릭하여 변경 내용을 반영합니다.
- LED Control node를 클릭하여 속성 창을 표시합니다.
- Topic에 IoT Shadow Topic을 입력합니다.
- Topic : $aws/things/Iot-stm-sensor-nodeA/shadow/update
- 속성 창의 On Payload의 상세 내용을 확인 합니다.
- Payload에 desired field를 생성하여 값을 update 하도록 합니다.
- On Payload는 powerON 값을 1로 설정하고 Off Payload는 powerON 값을 0으로 설정합니다.
- DASHBOARD를 선택하여 LED CONTROL을 toggle 하여 제어 할 수 있습니다.
- LED CONTROL을 on/off 로 toggle 하면 ST-Link connector 옆의 녹색 LED가 on/off 되는 것을 확인할 수 있습니다.
- CubeMonitor 작업 공간의 LED CONTROL node 값도 on/off 되는 것을 확인할 수 있습니다.
3-3. STM32 MCU 보드 동작
- Dashboard의 LED Switch를 toggle 할 때 MCU 보드의 로그 입니다.
.162 64469 [iot_thread] [INFO ][ST-L475E-MAIN][64469] Shadow was updated!
Previous: {"state":{"desired":{"welcome":"aws-iot","powerOn":0},"reported":{"welcome":"aws-iot","powerOn":0}}}
Current: {"state":{"desired":{"welcome":"aws-iot","powerOn":1},"reported":{"welcome":"aws-iot","powerOn":0}}}
163 64510 [iot_thread] [INFO ][ST-L475E-MAIN][64510] Iot-stm-sensor-nodeA changing state from 0 to 1.
164 64520 [iot_thread] [INFO ][MQTT][64520] (MQTT connection 0x20045250) SUBSCRIBE operation scheduled.
165 64530 [iot_thread] [INFO ][MQTT][64530] (MQTT connection 0x20045250, SUBSCRIBE operation 0x20046118) Waiting for operation completion.
166 64590 [iot_thread] [INFO ][MQTT][64590] (MQTT connection 0x20045250, SUBSCRIBE operation 0x20046118) Wait complete with result SUCCESS.
167 64603 [iot_thread] [INFO ][MQTT][64603] (MQTT connection 0x20045250) SUBSCRIBE operation scheduled.
168 64613 [iot_thread] [INFO ][MQTT][64613] (MQTT connection 0x20045250, SUBSCRIBE operation 0x20046118) Waiting for operation completion.
169 64676 [iot_thread] [INFO ][MQTT][64676] (MQTT connection 0x20045250, SUBSCRIBE operation 0x20046118) Wait complete with result SUCCESS.
170 64689 [iot_thread] [INFO ][MQTT][64689] (MQTT connection 0x20045250) MQTT PUBLISH operation queued.
171 64699 [iot_thread] [INFO ][ST-L475E-MAIN][64699] Iot-stm-sensor-nodeA sent new state report.
172 64786 [iot_thread] [INFO ][ST-L475E-MAIN][64785] Shadow was updated!
Previous: {"state":{"desired":{"welcome":"aws-iot","powerOn":1},"reported":{"welcome":"aws-iot","powerOn":0}}}
Current: {"state":{"desired":{"welcome":"aws-iot","powerOn":1},"reported":{"welcome":"aws-iot","powerOn":1}}}
173 64827 [iot_thread] [INFO ][Shadow][64827] Shadow UPDATE of Iot-stm-sensor-nodeA was ACCEPTED.
.174 66250 [iot_thread] [INFO ][ST-L475E-MAIN][66249] Shadow was updated!
Previous: {"state":{"desired":{"welcome":"aws-iot","powerOn":1},"reported":{"welcome":"aws-iot","powerOn":1}}}
Current: {"state":{"desired":{"welcome":"aws-iot","powerOn":0},"reported":{"welcome":"aws-iot","powerOn":1}}}
175 66290 [iot_thread] [INFO ][ST-L475E-MAIN][66290] Iot-stm-sensor-nodeA changing state from 1 to 0.
176 66299 [iot_thread] [INFO ][MQTT][66299] (MQTT connection 0x20045250) MQTT PUBLISH operation queued.
177 66310 [iot_thread] [INFO ][ST-L475E-MAIN][66310] Iot-stm-sensor-nodeA sent new state report.
- LED off 상태에서 Dashboard Switch를 on 시켜 LED on message가 전송 되었습니다.
LED Previous state {desired : 0, reported : 0} 에서 Current state가 {desired : 1, reported : 0}로 변경 되었습니다.
- desired 값은 update 하고자 하는 값이고 reported 값은 디바이스가 IoT Shadow에 공유한 상태 값 입니다.
MCU 보드의 LED가 off 였기 때문에 reported 값은 0이고 desired 값은 Dashboard에서 on 으로 변경하였기 때문에 1 입니다.
Previous: {"state":{"desired":{"welcome":"aws-iot","powerOn":0},"reported":{"welcome":"aws-iot","powerOn":0}}} Current: {"state":{"desired":{"welcome":"aws-iot","powerOn":1},"reported":{"welcome":"aws-iot","powerOn":0}}}
- MCU 보드가 LED를 on 시킨 후 Shadow report를 보내면서 Current의 reported 값을 1로 변경합니다.
bash 163 64510 [iot_thread] [INFO ][ST-L475E-MAIN][64510] Iot-stm-sensor-nodeA changing state from 0 to 1. 171 64699 [iot_thread] [INFO ][ST-L475E-MAIN][64699] Iot-stm-sensor-nodeA sent new state report. Previous: {"state":{"desired":{"welcome":"aws-iot","powerOn":1},"reported":{"welcome":"aws-iot","powerOn":0}}} Current: {"state":{"desired":{"welcome":"aws-iot","powerOn":1},"reported":{"welcome":"aws-iot","powerOn":1}}} .174 66250 [iot_thread] [INFO ][ST-L475E-MAIN][66249] Shadow was updated!
- MCU 보드가 LED를 on 시킨 후 Shadow report를 보내면서 Current의 reported 값을 1로 변경합니다.
바로 Dashboard에서 Switch를 off 시키면서 LED Previous state {desired : 1, reported : 1} 에서 Current state를 {desired : 0, reported : 1} 가 되었습니다.
.174 66250 [iot_thread] [INFO ][ST-L475E-MAIN][66249] Shadow was updated!
Previous: {"state":{"desired":{"welcome":"aws-iot","powerOn":1},"reported":{"welcome":"aws-iot","powerOn":1}}}
Current: {"state":{"desired":{"welcome":"aws-iot","powerOn":0},"reported":{"welcome":"aws-iot","powerOn":1}}}
175 66290 [iot_thread] [INFO ][ST-L475E-MAIN][66290] Iot-stm-sensor-nodeA changing state from 1 to 0.
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' 카테고리의 다른 글
Ex3. ① OTA FW IMAGE 생성 (0) | 2020.11.26 |
---|---|
Ex3. OTA FIRMWARE UPDATE (0) | 2020.11.26 |
Ex2. ① SENSOR DASHBOARD (0) | 2020.11.26 |
Ex2. ADDING TEMPERATURE & LED CONTROL (0) | 2020.11.26 |
Ex1. ⑤ SENSOR DATA PUBLISH (0) | 2020.11.26 |