AWS IoT Jobs 라이브러리 데모 - FreeRTOS

AWS IoT Jobs 라이브러리 데모

중요

이 데모는 더 이상 사용되지 않는 Amazon-FreeRTOS 리포지토리에서 호스팅됩니다. 새 프로젝트를 생성할 때는 여기서 시작하는 것이 좋습니다. 현재 사용되지 않는 Amazon-FreeRTOS 리포지토리를 기반으로 하는 기존 FreeRTOS 프로젝트가 이미 있는 경우에는 Amazon-FreeRTOS Github 리포지토리 마이그레이션 가이드 섹션을 참조하세요.

소개

AWS IoT Jobs 라이브러리 데모는 MQTT 연결을 통해 AWS IoT Jobs 서비스에 연결하고, AWS IoT에서 작업을 검색하고, 디바이스에서 이 작업을 처리하는 방법을 보여줍니다. AWS IoT Jobs 데모 프로젝트는 FreeRTOS Windows 포트를 사용하므로 Windows의 Visual Studio Community 버전으로 빌드하고 평가할 수 있습니다. 마이크로컨트롤러 하드웨어는 필요하지 않습니다. 이 데모는 coreMQTT 상호 인증 데모와 동일한 방식으로 TLS를 사용하여 AWS IoT MQTT 브로커에 대한 보안 연결을 설정합니다.

참고

FreeRTOS 데모를 설정하고 실행하려면 FreeRTOS 시작하기의 단계를 따릅니다.

소스 코드 구성

데모 코드는 jobs_demo.c 파일에 있으며 GitHub 웹 사이트 또는 freertos/demos/jobs_for_aws/ 디렉터리에서 찾을 수 있습니다.

AWS IoT MQTT 브로커 연결 구성

이 데모에서는 AWS IoT MQTT 브로커에 대한 MQTT 연결을 사용합니다. 이 연결은 coreMQTT 상호 인증 데모와 동일한 방식으로 구성됩니다.

기능

이 데모에서는 AWS IoT에서 작업을 수신하고 디바이스에서 이 작업을 처리하는 데 사용되는 워크플로를 보여줍니다. 이 데모는 대화형이며 AWS IoT 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 작업을 생성해야 합니다. 작업 생성에 대한 자세한 내용은 AWS CLI 명령 참조create-job을 참조하세요. 이 데모는 메시지를 콘솔에 출력할 수 있도록 작업 문서에서 action 키가 print로 설정되어야 합니다.

이 작업 문서의 형식은 다음과 같습니다.

{ "action": "print", "message": "ADD_MESSAGE_HERE" }

AWS CLI를 사용하여 다음 예제 명령으로 작업을 생성할 수 있습니다.

aws iot create-job \ --job-id t12 \ --targets arn:aws:iot:region:123456789012:thing/device1 \ --document '{"action":"print","message":"hello world!"}'

또한 이 데모는 메시지를 주제에 다시 게시할 수 있도록 action 키가 publish로 설정된 작업 문서도 사용합니다. 이 작업 문서의 형식은 다음과 같습니다.

{ "action": "publish", "message": "ADD_MESSAGE_HERE", "topic": "topic/name/here" }

데모는 데모를 종료하도록 action 키가 exit로 설정된 작업 문서를 수신할 때까지 루프를 반복합니다. 이 작업 문서의 형식은 다음과 같습니다.

{ "action: "exit" }

Jobs 데모의 진입점

Jobs 데모 진입점 함수의 소스 코드는 GitHub에서 찾을 수 있습니다. 이 함수는 다음 작업을 수행합니다.

  1. mqtt_demo_helpers.c의 헬퍼 함수를 사용하여 MQTT 연결을 설정합니다.

  2. mqtt_demo_helpers.c의 헬퍼 함수를 사용하여 NextJobExecutionChanged API에 대한 MQTT 주제를 구독합니다. 주제 문자열은 AWS IoT Jobs 라이브러리에 정의된 매크로를 사용하여 이전에 어셈블되었습니다.

  3. mqtt_demo_helpers.c의 헬퍼 함수를 사용하여 StartNextPendingJobExecution API에 대한 MQTT 주제에 게시합니다. 주제 문자열은 AWS IoT Jobs 라이브러리에 정의된 매크로를 사용하여 이전에 어셈블되었습니다.

  4. prvEventCallback를 반복적으로 직접 호출하여 처리를 위해 MQTT_ProcessLoop에 전달되는 메시지를 수신합니다.

  5. 데모가 종료 작업을 수신하면 mqtt_demo_helpers.c 파일의 헬퍼 함수를 사용하여 MQTT 주제 구독을 취소하고 연결을 끊습니다.

수신된 MQTT 메시지에 대한 콜백

prvEventCallback 함수는 AWS IoT Jobs Jobs_MatchTopic 라이브러리에서 을 호출하여 들어오는 MQTT 메시지를 분류합니다. 메시지 유형이 새 작업에 해당하는 경우 prvNextJobHandler()가 호출됩니다.

PrvNextJobHandler 함수 및 이 함수가 호출하는 함수는 JSON 형식의 메시지에서 작업 문서를 파싱하고 작업에 지정된 작업을 실행합니다. 특히 주목할 것은 prvSendUpdateForJob 함수입니다.

실행 중인 작업에 대한 업데이트 전송

prvSendUpdateForJob() 함수는 Jobs 라이브러리에서 Jobs_Update()를 호출하여 바로 이어지는 MQTT 게시 작업에 사용되는 주제 문자열을 채웁니다.