Baixe, crie, atualize e execute a demonstração do FreeRTOS OTA no Renesas N RX65 - FreeRTOS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Baixe, crie, atualize e execute a demonstração do FreeRTOS OTA no Renesas N RX65

Importante

Esta é uma versão arquivada do Guia do usuário do FreeRTOS para usar com a versão 202210.00 do FreeRTOS. Para obter a versão mais recente deste documento, consulte o Guia do usuário do FreeRTOS.

Este capítulo mostra como baixar, criar, atualizar e executar os aplicativos de demonstração FreeRTOS OTA no Renesas N. RX65

Configuração do ambiente operacional

Os procedimentos nesta seção usam os seguintes ambientes:

  • IDE: e2 studio 7.8.0, e2 studio 2020-07

  • Cadeia de ferramentas: compilador CCRX v3.0.1

  • Dispositivos de destino: RSKRX65 N-2MB

  • Depuradores: emulador E2, E2 Lite

  • Software: Renesas Flash Programmer, Renesas Secure Flash Programmer.exe, Tera Term

Como configurar o hardware
  1. Conecte o emulador E 2 Lite e a porta serial USB à placa RX65 N e ao PC.

  2. Conecte a fonte de alimentação ao RX65 N.

Configure seus AWS recursos

  1. Para executar as demonstrações do FreeRTOS, você deve ter AWS uma conta com um usuário do IAM que tenha permissão para acessar os serviços. AWS IoT Caso ainda não tenha, siga as etapas em Configurando sua AWS conta e permissões.

  2. Para configurar as atualizações OTA, siga as etapas em Pré-requisitos de atualização do OTA. Em especial, siga as etapas em Pré-requisitos para atualizações de OTA usando MQTT.

  3. Abra o console de AWS IoT.

  4. No painel de navegação à esquerda, escolha Gerenciar e, depois, Coisas para criar uma coisa.

    Uma coisa é uma representação de um dispositivo ou entidade lógica em AWS IoT. Ela pode ser um dispositivo físico ou sensor (por exemplo, uma lâmpada ou um interruptor em uma parede). Também pode ser uma entidade lógica, como uma instância de um aplicativo ou entidade física que não se conecta AWS IoT, mas está relacionada a dispositivos que o fazem (por exemplo, um carro com sensores de motor ou um painel de controle). AWS IoT fornece um registro de coisas que ajuda você a gerenciar suas coisas.

    1. Escolha Criar e Criar uma única coisa.

    2. Insira o Nome da coisa e escolha Próximo.

    3. Selecione Criar certificado.

    4. Faça download dos três arquivos criados e escolha Ativar.

    5. Selecione a opção Anexar uma política.

      tela do console mostrando os arquivos a serem baixados
    6. Selecione a política que você criou em Política de dispositivo.

      Cada dispositivo que recebe uma atualização OTA usando o MQTT deve ser registrado como um item AWS IoT e deve ter uma política anexada, como a listada. Você pode encontrar mais informações sobre os itens nos objetos "Resource" e "Action" em Ações da política principal do AWS IoT e Recursos da ação principal do AWS IoT.

      Observações
      • As iot:Connect permissões permitem que seu dispositivo se conecte AWS IoT ao MQTT.

      • As permissões de iot:Subscribe e iot:Publish para tópicos de trabalhos da AWS IoT (.../jobs/*) permitem que o dispositivo conectado receba notificações de trabalho e documentos de trabalho, e publique o estado de conclusão da execução de um trabalho.

      • As iot:Publish permissões iot:Subscribe e sobre os tópicos de fluxos AWS IoT OTA (.../streams/*) permitem que o dispositivo conectado busque dados de atualização do OTA de. AWS IoT Essas permissões são necessárias para executar atualizações de firmware pelo MQTT.

      • As iot:Receive permissões AWS IoT Core permitem publicar mensagens sobre esses tópicos no dispositivo conectado. Essa permissão é verificada em cada entrega de uma mensagem de MQTT. Você pode usar essa permissão para revogar o acesso a clientes que estão inscritos em um tópico atualmente.

  5. Para criar um perfil de assinatura de código e registrar um certificado de assinatura de código em. AWS

    1. Para criar as chaves e a certificação, consulte a seção 7.3 “Gerando pares de SHA256 chaves ECDSA com OpenSSL” na Política de design de atualização de firmware da Renesas MCU.

    2. Abra o console de AWS IoT. No painel de navegação esquerdo, selecione Gerenciar, depois, Trabalhos. Selecione Criar um trabalho, depois Criar trabalho de atualização OTA.

    3. Em Selecionar dispositivos para atualizar, escolha Selecionar e escolha a coisa que você criou anteriormente. Escolha Próximo.

    4. Na página Criar um trabalho de atualização OTA do FreeRTOS, faça o seguinte:

      1. Em Selecionar o protocolo para transferência de imagem do firmware, escolha MQTT.

      2. Em Selecionar e assinar a imagem de firmware, escolha Assinar uma nova imagem de firmware para mim.

      3. Em Perfil de assinatura de código, escolha Criar.

      4. Na janela Criar um perfil de assinatura de código, insira um nome de perfil. Para a plataforma de hardware de dispositivo, selecione o Windows Simulator. Para o certificado de assinatura de código, escolha Importar.

      5. Navegue para selecionar o certificado (secp256r1.crt), a chave privada do certificado (secp256r1.key) e a cadeia de certificados (ca.crt).

      6. Insira um nome de caminho do certificado de assinatura de código no dispositivo. Escolha Criar.

  6. Para conceder acesso à assinatura de código para AWS IoT, siga as etapas emConceda acesso à assinatura de código para AWS IoT.

Se não tiver o Tera Term instalado em seu PC, você pode baixá-lo https://ttssh2.osdn.jp/index.htmlem .en e configurá-lo conforme mostrado aqui. Conecte a porta serial USB do dispositivo ao PC.

Janela de configuração da porta serial do Tera Term

Importe, configure o arquivo de cabeçalho e compile aws_demos e boot_loader

Para começar, você seleciona a versão mais recente do pacote FreeRTOS, e ela será GitHub baixada e importada automaticamente para o projeto. Dessa forma, você pode se concentrar na configuração do FreeRTOS e na escrita do código da aplicação.

  1. Lançamento do e2 studio.

  2. Escolha o Arquivo e depois Importar....

  3. Selecione o projeto Renesas GitHub FreeRTOS (com bibliotecas de IoT).

    janela de importação do e-squared studio
  4. Escolha Verificar mais versões... para mostrar a caixa de diálogo de download.

    janela de diálogo de download do e-squared studio
  5. Selecione o pacote mais recente.

    janela de diálogo de download do módulo do e-squared studio
  6. Escolha Concordo para aceitar o contrato de licença do usuário final.

    Diálogo de EULA do e-squared studio
  7. Aguarde a conclusão do download.

    barra de progresso do download
  8. Selecione os projetos aws_demos e boot_loader e escolha Concluir para importá-los.

    janela de importação de projetos
  9. Para ambos os projetos, abra as propriedades do projeto. No painel de navegação, selecione Editor de cadeia de ferramentas.

    1. Escolha a Cadeia de ferramentas atual.

    2. Escolha o Builder atual.

    janela de propriedades do e-squared studio
  10. No painel de navegação, selecione Configurações. Escolha a guia Cadeia de ferramentas e, em seguida, escolha a Versão da cadeia de ferramentas.

    Toolchain settings interface showing Renesas CCRX toolchain selected with version v3.01.00.

    Escolha a guia Configurações de ferramenta, expanda Conversor e escolha Saída. Na janela principal, verifique se Arquivo hexadecimal de saída está selecionado e escolha o tipo de arquivo de saída.

    Settings interface showing Tool Settings tab with Output options for hex file and file type.
    Expanded menu structure in an IDE showing various project settings and configuration options.
  11. No projeto carregador de inicialização, abra projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h e insira a chave pública. Para obter informações sobre como criar uma chave pública, consulte Como implementar o FreeRTOS OTA usando o Amazon Web Services RX65 em N e a seção 7.3 “Gerando pares de chaves ECDSA com OpenSSL” na Política de SHA256 design de atualização de firmware da Renesas MCU.

    Code editor showing a header file with a PEM-encoded public key definition.

    Em seguida, compile o projeto para criar boot_loader.mot.

  12. Abra o projeto aws_demos.

    1. Abra o console de AWS IoT.

    2. No painel de navegação à esquerda, escolha Configurações. Anote seu endpoint personalizado na caixa de texto Endpoint de dados do dispositivo.

    3. Escolha Gerenciar e, em seguida, Coisas. Anote o nome do AWS IoT item do seu quadro.

    4. No projeto aws_demos, abra demos/include/aws_clientcredential.h e especifique os seguintes valores.

      #define clientcredentialMQTT_BROKER_ENDPOINT[] = "Your AWS IoT endpoint"; #define clientcredentialIOT_THING_NAME "The AWS IoT thing name of your board"
      Code snippet defining MQTT broker endpoint and IoT thing name variables.
    5. Abra o arquivo tools/certificate_configuration/CertificateConfigurator.html.

    6. Importe o arquivo PEM do certificado e o arquivo PEM da chave privada que você baixou anteriormente.

    7. Escolha Gerar e salvar aws_clientcredential_keys.h e substitua esse arquivo no diretório demos/include/.

      Certificate Configuration Tool interface for uploading PEM files and generating AWS client credential keys.
    8. Abra o arquivo vendors/renesas/boards/rx65n-rsk/aws_demos/config_files/ota_demo_config.h e especifique esses valores.

      #define otapalconfigCODE_SIGNING_CERTIFICATE [] = "your-certificate-key";

      Onde your-certificate-key está o valor do arquivosecp256r1.crt. Lembre-se de adicionar "\" após cada linha na certificação. Para obter mais informações sobre a criação do secp256r1.crt arquivo, consulte Como implementar o FreeRTOS OTA usando o Amazon Web Services RX65 em N e a seção 7.3 “Gerando pares de chaves ECDSA com OpenSSL” na Política de SHA256 design de atualização de firmware da Renesas MCU.

      Code editor showing AWS project structure and PEM-encoded code signer certificate declaration.
  13. Tarefa A: Instalar a versão inicial do firmware

    1. Abra o arquivo vendors/renesas/boards/board/aws_demos/config_files/aws_demo_config.h, comente #define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED e defina CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED ou CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED.

    2. Abra o arquivo demos/include/ aws_application_version.h e defina a versão inicial do firmware como 0.9.2.

      Code snippet defining application version constants and including a header file.
    3. Altere as configurações a seguir em Visualizador de seção.

      Section Viewer window displaying memory addresses and corresponding section names.
    4. Escolha Compilar para criar o arquivo aws_demos.mot.

  14. Crie o arquivo userprog.mot com o Renesas Secure Flash Programmer. userprog.mot é uma combinação de aws_demos.mot e boot_loader.mot. Você pode atualizar esse arquivo para o RX65 N-RSK para instalar o firmware inicial.

    1. Baixe o https://github.com/renesas/Amazon-Freertos-Tools e abra. Renesas Secure Flash Programmer.exe

    2. Escolha a guia Firmware inicial e defina os seguintes parâmetros:

      • Caminho da chave privada: a localização de secp256r1.privatekey.

      • Caminho do arquivo do carregador de inicialização: a localização de boot_loader.mot (projects\renesas\rx65n-rsk\e2studio\boot_loader\HardwareDebug).

      • Caminho do arquivo: a localização do arquivo aws_demos.mot (projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug).

      Renesas Secure Flash Programmer interface with settings for MCU, firmware, and file paths.
    3. Crie um diretório chamado init_firmware gere userprog.mot e salve-o no diretório init_firmware. Verifique se o que foi gerado teve êxito.

  15. Atualize o firmware inicial no RX65 N-RSK.

    1. Baixe a versão mais recente do Renesas Flash Programmer (GUI de programação) em - .html. https://www.renesas.com/tw/ en/products/software-tools/tools/programmer/renesas flash-programmer-programming-gui

    2. Abra o arquivo vendors\renesas\rx_mcu_boards\boards\rx65n-rsk\aws_demos\flash_project\erase_from_bank\ erase.rpj para apagar dados no banco.

    3. Escolha Iniciar para apagar o banco.

      Renesas Flash Programmer interface showing project details and operation status.
    4. Para atualizar userprog.mot, escolha Procurar... e navegue até o diretório init_firmware, selecione o arquivo userprog.mot e escolha Iniciar.

      Renesas Flash Programmer interface showing project information and erase operation completed.
  16. A versão 0.9.2 (versão inicial) do firmware foi instalada em seu RX65 N-RSK. A placa RX65 N-RSK agora está ouvindo as atualizações do OTA. Ao abrir o Tera Term no PC, você verá algo parecido com o seguinte quando o firmware inicial for executado.

    ------------------------------------------------- RX65N secure boot program ------------------------------------------------- Checking flash ROM status. bank 0 status = 0xff [LIFECYCLE_STATE_BLANK] bank 1 status = 0xfc [LIFECYCLE_STATE_INSTALLING] bank info = 1. (start bank = 0) start installing user program. copy secure boot (part1) from bank0 to bank1...OK copy secure boot (part2) from bank0 to bank1...OK update LIFECYCLE_STATE from [LIFECYCLE_STATE_INSTALLING] to [LIFECYCLE_STATE_VALID] bank1(temporary area) block0 erase (to update LIFECYCLE_STATE)...OK bank1(temporary area) block0 write (to update LIFECYCLE_STATE)...OK swap bank... ------------------------------------------------- RX65N secure boot program ------------------------------------------------- Checking flash ROM status. bank 0 status = 0xf8 [LIFECYCLE_STATE_VALID] bank 1 status = 0xff [LIFECYCLE_STATE_BLANK] bank info = 0. (start bank = 1) integrity check scheme = sig-sha256-ecdsa bank0(execute area) on code flash integrity check...OK jump to user program 0 1 [ETHER_RECEI] Deferred Interrupt Handler Task started 1 1 [ETHER_RECEI] Network buffers: 3 lowest 3 2 1 [ETHER_RECEI] Heap: current 234192 lowest 234192 3 1 [ETHER_RECEI] Queue space: lowest 8 4 1 [IP-task] InitializeNetwork returns OK 5 1 [IP-task] xNetworkInterfaceInitialise returns 0 6 101 [ETHER_RECEI] Heap: current 234592 lowest 233392 7 2102 [ETHER_RECEI] prvEMACHandlerTask: PHY LS now 1 8 3001 [IP-task] xNetworkInterfaceInitialise returns 1 9 3092 [ETHER_RECEI] Network buffers: 2 lowest 2 10 3092 [ETHER_RECEI] Queue space: lowest 7 11 3092 [ETHER_RECEI] Heap: current 233320 lowest 233320 12 3193 [ETHER_RECEI] Heap: current 233816 lowest 233120 13 3593 [IP-task] vDHCPProcess: offer c0a80a09ip 14 3597 [ETHER_RECEI] Heap: current 233200 lowest 233000 15 3597 [IP-task] vDHCPProcess: offer c0a80a09ip 16 3597 [IP-task] IP Address: 192.168.10.9 17 3597 [IP-task] Subnet Mask: 255.255.255.0 18 3597 [IP-task] Gateway Address: 192.168.10.1 19 3597 [IP-task] DNS Server Address: 192.168.10.1 20 3600 [Tmr Svc] The network is up and running 21 3622 [Tmr Svc] Write certificate... 22 3697 [ETHER_RECEI] Heap: current 232320 lowest 230904 23 4497 [ETHER_RECEI] Heap: current 226344 lowest 225944 24 5317 [iot_thread] [INFO ][DEMO][5317] ---------STARTING DEMO--------- 25 5317 [iot_thread] [INFO ][INIT][5317] SDK successfully initialized. 26 5317 [iot_thread] [INFO ][DEMO][5317] Successfully initialized the demo. Network type for the demo: 4 27 5317 [iot_thread] [INFO ][MQTT][5317] MQTT library successfully initialized. 28 5317 [iot_thread] [INFO ][DEMO][5317] OTA demo version 0.9.2 29 5317 [iot_thread] [INFO ][DEMO][5317] Connecting to broker... 30 5317 [iot_thread] [INFO ][DEMO][5317] MQTT demo client identifier is rx65n-gr-rose (length 13). 31 5325 [ETHER_RECEI] Heap: current 206944 lowest 206504 32 5325 [ETHER_RECEI] Heap: current 206440 lowest 206440 33 5325 [ETHER_RECEI] Heap: current 206240 lowest 206240 38 5334 [ETHER_RECEI] Heap: current 190288 lowest 190288 39 5334 [ETHER_RECEI] Heap: current 190088 lowest 190088 40 5361 [ETHER_RECEI] Heap: current 158512 lowest 158168 41 5363 [ETHER_RECEI] Heap: current 158032 lowest 158032 42 5364 [ETHER_RECEI] Network buffers: 1 lowest 1 43 5364 [ETHER_RECEI] Heap: current 156856 lowest 156856 44 5364 [ETHER_RECEI] Heap: current 156656 lowest 156656 46 5374 [ETHER_RECEI] Heap: current 153016 lowest 152040 47 5492 [ETHER_RECEI] Heap: current 141464 lowest 139016 48 5751 [ETHER_RECEI] Heap: current 140160 lowest 138680 49 5917 [ETHER_RECEI] Heap: current 138280 lowest 138168 59 7361 [iot_thread] [INFO ][MQTT][7361] Establishing new MQTT connection. 62 7428 [iot_thread] [INFO ][MQTT][7428] (MQTT connection 81cfc8, CONNECT operation 81d0e8) Wait complete with result SUCCESS. 63 7428 [iot_thread] [INFO ][MQTT][7428] New MQTT connection 4e8c established. 64 7430 [iot_thread] [OTA_AgentInit_internal] OTA Task is Ready. 65 7430 [OTA Agent T] [prvOTAAgentTask] Called handler. Current State [Ready] Event [Start] New state [RequestingJob] 66 7431 [OTA Agent T] [INFO ][MQTT][7431] (MQTT connection 81cfc8) SUBSCRIBE operation scheduled. 67 7431 [OTA Agent T] [INFO ][MQTT][7431] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Waiting for operation completion. 68 7436 [ETHER_RECEI] Heap: current 128248 lowest 127992 69 7480 [OTA Agent T] [INFO ][MQTT][7480] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Wait complete with result SUCCESS. 70 7480 [OTA Agent T] [prvSubscribeToJobNotificationTopics] OK: $aws/things/rx65n-gr-rose/jobs/$next/get/accepted 71 7481 [OTA Agent T] [INFO ][MQTT][7481] (MQTT connection 81cfc8) SUBSCRIBE operation scheduled. 72 7481 [OTA Agent T] [INFO ][MQTT][7481] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Waiting for operation completion. 73 7530 [OTA Agent T] [INFO ][MQTT][7530] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Wait complete with result SUCCESS. 74 7530 [OTA Agent T] [prvSubscribeToJobNotificationTopics] OK: $aws/things/rx65n-gr-rose/jobs/notify-next 75 7530 [OTA Agent T] [prvRequestJob_Mqtt] Request #0 76 7532 [OTA Agent T] [INFO ][MQTT][7532] (MQTT connection 81cfc8) MQTT PUBLISH operation queued. 77 7532 [OTA Agent T] [INFO ][MQTT][7532] (MQTT connection 81cfc8, PUBLISH operation 818b80) Waiting for operation completion. 78 7552 [OTA Agent T] [INFO ][MQTT][7552] (MQTT connection 81cfc8, PUBLISH operation 818b80) Wait complete with result SUCCESS. 79 7552 [OTA Agent T] [prvOTAAgentTask] Called handler. Current State [RequestingJob] Event [RequestJobDocument] New state [WaitingForJob] 80 7552 [OTA Agent T] [prvParseJSONbyModel] Extracted parameter [ clientToken: 0:rx65n-gr-rose ] 81 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: execution 82 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: jobId 83 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: jobDocument 84 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: afr_ota 85 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: protocols 86 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: files 87 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: filepath 99 7651 [ETHER_RECEI] Heap: current 129720 lowest 127304 100 8430 [iot_thread] [INFO ][DEMO][8430] State: Ready Received: 1 Queued: 0 Processed: 0 Dropped: 0 101 9430 [iot_thread] [INFO ][DEMO][9430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 102 10430 [iot_thread] [INFO ][DEMO][10430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 103 11430 [iot_thread] [INFO ][DEMO][11430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 104 12430 [iot_thread] [INFO ][DEMO][12430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 105 13430 [iot_thread] [INFO ][DEMO][13430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 106 14430 [iot_thread] [INFO ][DEMO][14430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 107 15430 [iot_thread] [INFO ][DEMO][15430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0
  17. Tarefa B: Atualização da versão do firmware

    1. Abra o arquivo demos/include/aws_application_version.h e incremente o valor do token APP_VERSION_BUILD para 0.9.3.

    2. Recrie o projeto.

  18. Crie o arquivo userprog.rsu com o Renesas Secure Flash Programmer para atualizar a versão do seu firmware.

    1. Abra o arquivo Amazon-FreeRTOS-Tools\Renesas Secure Flash Programmer.exe.

    2. Escolha a guia Atualizar firmware e defina os seguintes parâmetros:

      • Caminho do arquivo: a localização do arquivo aws_demos.mot (projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug).

    3. Crie um diretório chamado update _firmware. Gere userprog.rsu e salve-o no diretório update_firmware. Verifique se o que foi gerado teve êxito.

      Renesas Secure Flash Programmer interface with MCU selection and firmware settings.
  19. Faça o upload da atualização do firmware userproj.rsu, em um bucket do Amazon S3, conforme descrito em Criação de um bucket do Amazon S3 para armazenar a atualização.

    Amazon S3 bucket interface showing folder structure and file details for s3testota bucket.
  20. Crie uma tarefa para atualizar o firmware no RX65 N-RSK.

    AWS IoT Jobs é um serviço que notifica um ou mais dispositivos conectados sobre um Job pendente. Um trabalho pode ser usado para gerenciar uma frota de dispositivos, atualizar o firmware e os certificados de segurança em dispositivos ou realizar tarefas administrativas, como reiniciar dispositivos e realizar diagnósticos.

    1. Faça login no console do AWS IoT. No painel de navegação, escolha Gerenciar e escolha Trabalhos.

    2. Escolha Criar um trabalho, e escolha Criar trabalho de atualização OTA. Selecione uma coisa e escolha Avançar.

    3. Crie um trabalho de atualização OTA do FreeRTOS desta forma:

      • Escolha MQTT.

      • Selecione o perfil de assinatura de código criado na seção anterior.

      • Selecione a imagem do firmware que você carregou em um bucket do Amazon S3.

      • Em Nome do caminho da imagem do firmware no dispositivo, insira test.

      • Selecione o perfil do IAM que você criou na seção anterior.

    4. Escolha Próximo.

      Firmware image selection and signing interface with options for code signing profile and IAM role.
    5. Insira um ID e escolha Criar.

  21. Reabra o Tera Term para verificar se o firmware foi atualizado com êxito para a versão de demonstração 0.9.3 do OTA.

    Console output showing successful initialization of MQTT demo client and connection to broker.
  22. No AWS IoT console, verifique se o status do trabalho é Bem-sucedido.

    Job status overview showing one succeeded task for AFR_OTA-demo_test job.