

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á.

# Over-the-air atualiza o aplicativo de demonstração
<a name="ota-demo"></a>

O FreeRTOS inclui um aplicativo de demonstração que demonstra a funcionalidade da over-the-air biblioteca (OTA). A aplicação de demonstração OTA está localizada no arquivo.`freertos/demos/ota/ota_demo_core_mqtt/ota_demo_core_mqtt.c` ou `freertos/demos/ota/ota_demo_core_http/ota_demo_core_http.c`.

A aplicação de demonstração OTA faz o seguinte:

1. Inicializa a pilha de rede do FreeRTOS e o grupo de buffers MQTT.

1. Cria uma tarefa para exercer a biblioteca OTA usando `vRunOTAUpdateDemo()`.

1. Cria um cliente MQTT usando `_establishMqttConnection()`.

1. Conecta-se ao corretor AWS IoT MQTT usando `IotMqtt_Connect()` e registra um retorno de chamada de desconexão do MQTT:. `prvNetworkDisconnectCallback`

1. Chama `OTA_AgentInit()` para criar a tarefa OTA e registra um retorno de chamada a ser usado quando a tarefa OTA é concluída.

1. Reutiliza a conexão MQTT com `xOTAConnectionCtx.pvControlClient = _mqttConnection;`

1. Se o MQTT se desconectar, a aplicação suspenderá o agente OTA, tentará se reconectar usando atraso exponencial com jitter e, em seguida, reiniciará o agente OTA.

Antes de usar as atualizações OTA, conclua todos os pré-requisitos no [Atualizações do FreeRTOS Over-the-Air](freertos-ota-dev.md)

Após concluir a configuração para atualizações OTA, faça download, compile, instale e execute a demonstração OTA do FreeRTOS em uma plataforma que ofereça suporte ao recurso OTA. As instruções de demonstração específicas do dispositivo estão disponíveis para os seguintes dispositivos qualificados para o FreeRTOS:
+ [Texas Instruments CC3220 SF-LAUNCHXL](download-ota-ti.md)
+ [Microchip Curiosity PIC32 MZEF](download-ota-mchip.md)
+ [Expressivo ESP32](download-ota-esp.md)
+ [Baixe, crie, atualize e execute a demonstração do FreeRTOS OTA no Renesas N RX65](download-rx65n-ota.md)

Depois de criar, atualizar e executar o aplicativo de demonstração OTA em seu dispositivo, você pode usar o AWS IoT console ou o AWS CLI para criar um trabalho de atualização do OTA. Depois de criar uma tarefa de atualização OTA, conecte um emulador de terminal para ver o progresso da atualização OTA. Anote os erros gerados durante o processo.

Uma tarefa de atualização OTA bem-sucedida exibe um resultado semelhante ao seguinte. Algumas linhas neste exemplo foram removidas da listagem para facilitar.

```
    249 21207 [iot_thread] [ota_demo_core_mqtt.c:1850] [INFO] [MQTT]  Received: 0   Queued: 0   Processed: 0   Dropped: 0
    250 21247 [MQTT Agent Task] [core_mqtt.c:886] [INFO] [MQTT] Packet received. ReceivedBytes=601.
    251 21247 [MQTT Agent Task] [core_mqtt.c:1045] [INFO] [MQTT] De-serialized incoming PUBLISH packet: DeserializerResult=MQTTSuccess.
    252 21248 [MQTT Agent Task] [core_mqtt.c:1058] [INFO] [MQTT] State record updated. New state=MQTTPubAckSend.
    253 21249 [MQTT Agent Task] [ota_demo_core_mqtt.c:976] [INFO] [MQTT] Received job message callback, size 548.
    254 21252 [OTA Agent Task] [ota.c:1645] [INFO] [OTA] Extracted parameter: [key: value]=[execution.jobId: AFR_OTA-9702f1a3-b747-4c3e-a0eb-a3b0cf83ddbb]
    255 21253 [OTA Agent Task] [ota.c:1645] [INFO] [OTA] Extracted parameter: [key: value]=[execution.jobDocument.afr_ota.streamname: AFR_OTA-945d320b-a18b-441b-b435-4a18d4e7671f]
    256 21255 [OTA Agent Task] [ota.c:1645] [INFO] [OTA] Extracted parameter: [key: value]=[execution.jobDocument.afr_ota.protocols: ["MQTT"]]
    257 21256 [OTA Agent Task] [ota.c:1645] [INFO] [OTA] Extracted parameter: [key: value]=[filepath: aws_demos.bin]
    258 21257 [OTA Agent Task] [ota.c:1684] [INFO] [OTA] Extracted parameter: [key: value]=[filesize: 1164016]
    259 21258 [OTA Agent Task] [ota.c:1684] [INFO] [OTA] Extracted parameter: [key: value]=[fileid: 0]
    260 21259 [OTA Agent Task] [ota.c:1645] [INFO] [OTA] Extracted parameter: [key: value]=[certfile: ecdsa-sha256-signer.crt.pem]
    261 21260 [OTA Agent Task] [ota.c:1575] [INFO] [OTA] Extracted parameter [ sig-sha256-ecdsa: MEQCIE1SFkIHHiZAvkPpu6McJtx7SYoD... ]
    262 21261 [OTA Agent Task] [ota.c:1684] [INFO] [OTA] Extracted parameter: [key: value]=[fileType: 0]
    263 21262 [OTA Agent Task] [ota.c:2199] [INFO] [OTA] Job document was accepted. Attempting to begin the update.
    264 21263 [OTA Agent Task] [ota.c:2323] [INFO] [OTA] Job parsing success: OtaJobParseErr_t=OtaJobParseErrNone, Job name=AFR_OTA-9702f1a3-b747-4c3e-a0eb-a3b0cf83ddbb
    265 21318 [iot_thread] [ota_demo_core_mqtt.c:1850] [INFO] [MQTT]  Received: 0   Queued: 0   Processed: 0   Dropped: 0
    266 21418 [iot_thread] [ota_demo_core_mqtt.c:1850] [INFO] [MQTT]  Received: 0   Queued: 0   Processed: 0   Dropped: 0
    267 21469 [OTA Agent Task] [ota.c:938] [INFO] [OTA] Setting OTA data interface.
    268 21470 [OTA Agent Task] [ota.c:2839] [INFO] [OTA] Current State=[CreatingFile], Event=[ReceivedJobDocument], New state=[CreatingFile]
    269 21482 [MQTT Agent Task] [core_mqtt.c:886] [INFO] [MQTT] Packet received. ReceivedBytes=3.
    270 21483 [OTA Agent Task] [ota_demo_core_mqtt.c:1503] [INFO] [MQTT] SUBSCRIBED to topic $aws/things/__test_infra_thing71/streams/AFR_OTA-945d320b-a18b-441b-b435-4a18d4e7671f/data/cbor to bro
    271 21484 [OTA Agent Task] [ota.c:2839] [INFO] [OTA] Current State=[RequestingFileBlock], Event=[CreateFile], New state=[RequestingFileBlock]
    272 21518 [iot_thread] [ota_demo_core_mqtt.c:1850] [INFO] [MQTT]  Received: 0   Queued: 0   Processed: 0   Dropped: 0
    273 21532 [MQTT Agent Task] [core_mqtt_agent_command_functions.c:76] [INFO] [MQTT] Publishing message to $aws/things/__test_infra_thing71/streams/AFR_OTA-945d320b-a18b-441b-b435-4a18d4e7671f/
    274 21534 [OTA Agent Task] [ota_demo_core_mqtt.c:1553] [INFO] [MQTT] Sent PUBLISH packet to broker $aws/things/__test_infra_thing71/streams/AFR_OTA-945d320b-a18b-441b-b435-4a18d4e7671f/get/cbor
    275 21534 [OTA Agent Task] [ota_mqtt.c:1112] [INFO] [OTA] Published to MQTT topic to request the next block: topic=$aws/things/__test_infra_thing71/streams/AFR_OTA-945d320b-a18b-441b-b435-4a1
    276 21537 [OTA Agent Task] [ota.c:2839] [INFO] [OTA] Current State=[WaitingForFileBlock], Event=[RequestFileBlock], New state=[WaitingForFileBlock]
    277 21558 [MQTT Agent Task] [core_mqtt.c:886] [INFO] [MQTT] Packet received. ReceivedBytes=4217.
    278 21559 [MQTT Agent Task] [core_mqtt.c:1045] [INFO] [MQTT] De-serialized incoming PUBLISH packet: DeserializerResult=MQTTSuccess.
    279 21560 [MQTT Agent Task] [core_mqtt.c:1058] [INFO] [MQTT] State record updated. New state=MQTTPublishDone.
    280 21561 [MQTT Agent Task] [ota_demo_core_mqtt.c:1026] [INFO] [MQTT] Received data message callback, size 4120.
    281 21563 [OTA Agent Task] [ota.c:2464] [INFO] [OTA] Received valid file block: Block index=0, Size=4096
    282 21566 [OTA Agent Task] [ota.c:2683] [INFO] [OTA] Number of blocks remaining: 284
     
    ... // Output removed for brevity
     
    3672 42745 [OTA Agent Task] [ota.c:2464] [INFO] [OTA] Received valid file block: Block index=284, Size=752
    3673 42747 [OTA Agent Task] [ota.c:2633] [INFO] [OTA] Received final block of the update.
    (428298) ota_pal: No such certificate file: ecdsa-sha256-signer.crt.pem. Using certificate in ota_demo_config.h.
    3674 42818 [iot_thread] [ota_demo_core_mqtt.c:1850] [INFO] [MQTT]  Received: 285   Queued: 285   Processed: 284   Dropped: 0
    3675 42918 [iot_thread] [ota_demo_core_mqtt.c:1850] [INFO] [MQTT]  Received: 285   Queued: 285   Processed: 284   Dropped: 0
     
    ... // Output removed for brevity
     
    3678 43197 [OTA Agent Task] [ota.c:2654] [INFO] [OTA] Received entire update and validated the signature.
    3685 43215 [OTA Agent Task] [ota_demo_core_mqtt.c:862] [INFO] [MQTT] Received OtaJobEventActivate callback from OTA Agent.
     
    ... // Output removed for brevity
     
    2 39 [iot_thread] [INFO ][DEMO][390] ---------STARTING DEMO---------
     
    [0;32mI (3633) WIFI: WIFI_EVENT_STA_CONNECTED
    [0;32mI (4373) WIFI: SYSTEM_EVENT_STA_GOT_IP
     
    ... // Output removed for brevity 
     
    4 351 [sys_evt] [INFO ][DEMO][3510] Connected to WiFi access point, ip address: 255.255.255.0.
    5 351 [iot_thread] [INFO ][DEMO][3510] Successfully initialized the demo. Network type for the demo: 1
    6 351 [iot_thread] [ota_demo_core_mqtt.c:1902] [INFO] [MQTT] OTA over MQTT demo, Application version 0.9.1
    7 351 [iot_thread] [ota_demo_core_mqtt.c:1323] [INFO] [MQTT] Creating a TLS connection to <endpoint>-ats.iot.us-west-2.amazonaws.com:8883.
    9 718 [iot_thread] [core_mqtt.c:886] [INFO] [MQTT] Packet received. ReceivedBytes=2.
    10 718 [iot_thread] [core_mqtt_serializer.c:970] [INFO] [MQTT] CONNACK session present bit not set.
    11 718 [iot_thread] [core_mqtt_serializer.c:912] [INFO] [MQTT] Connection accepted.
     
    ... // Output removed for brevity
     
    17 736 [OTA Agent Task] [ota_demo_core_mqtt.c:1503] [INFO] [MQTT] SUBSCRIBED to topic $aws/things/__test_infra_thing71/jobs/notify-next to broker.
    18 737 [OTA Agent Task] [ota_mqtt.c:381] [INFO] [OTA] Subscribed to MQTT topic: $aws/things/__test_infra_thing71/jobs/notify-next
    30 818 [iot_thread] [ota_demo_core_mqtt.c:1850] [INFO] [MQTT]  Received: 0   Queued: 0   Processed: 0   Dropped: 0
    31 819 [OTA Agent Task] [ota.c:1645] [INFO] [OTA] Extracted parameter: [key: value]=[execution.jobId: AFR_OTA-9702f1a3-b747-4c3e-a0eb-a3b0cf83ddbb]
    32 820 [OTA Agent Task] [ota.c:1684] [INFO] [OTA] Extracted parameter: [key: value]=[execution.statusDetails.updatedBy: 589824]
    33 822 [OTA Agent Task] [ota.c:1645] [INFO] [OTA] Extracted parameter: [key: value]=[execution.jobDocument.afr_ota.streamname: AFR_OTA-945d320b-a18b-441b-b435-4a18d4e7671f]
    34 823 [OTA Agent Task] [ota.c:1645] [INFO] [OTA] Extracted parameter: [key: value]=[execution.jobDocument.afr_ota.protocols: ["MQTT"]]
    35 824 [OTA Agent Task] [ota.c:1645] [INFO] [OTA] Extracted parameter: [key: value]=[filepath: aws_demos.bin]
    36 825 [OTA Agent Task] [ota.c:1684] [INFO] [OTA] Extracted parameter: [key: value]=[filesize: 1164016]
    37 826 [OTA Agent Task] [ota.c:1684] [INFO] [OTA] Extracted parameter: [key: value]=[fileid: 0]
    38 827 [OTA Agent Task] [ota.c:1645] [INFO] [OTA] Extracted parameter: [key: value]=[certfile: ecdsa-sha256-signer.crt.pem]
    39 828 [OTA Agent Task] [ota.c:1575] [INFO] [OTA] Extracted parameter [ sig-sha256-ecdsa: MEQCIE1SFkIHHiZAvkPpu6McJtx7SYoD... ]
    40 829 [OTA Agent Task] [ota.c:1684] [INFO] [OTA] Extracted parameter: [key: value]=[fileType: 0]
    41 830 [OTA Agent Task] [ota.c:2102] [INFO] [OTA] In self test mode.
    42 830 [OTA Agent Task] [ota.c:1936] [INFO] [OTA] New image has a higher version number than the current image: New image version=0.9.1, Previous image version=0.9.0
    43 832 [OTA Agent Task] [ota.c:2120] [INFO] [OTA] Image version is valid: Begin testing file: File ID=0
    53 896 [OTA Agent Task] [ota.c:794] [INFO] [OTA] Beginning self-test.
    62 971 [OTA Agent Task] [ota_demo_core_mqtt.c:1553] [INFO] [MQTT] Sent PUBLISH packet to broker $aws/things/__test_infra_thing71/jobs/AFR_OTA-9702f1a3-b747-4c3e-a0eb-a3b0cf83ddbb/update to br63 971 [MQTT Agent Task] [core_mqtt.c:1045] [INFO] [MQTT] De-serialized incoming PUBLISH packet: DeserializerResult=MQTTSuccess.
    65 973 [MQTT Agent Task] [core_mqtt.c:1058] [INFO] [MQTT] State record updated. New state=MQTTPublishDone.
    64 973 [OTA Agent Task] [ota_demo_core_mqtt.c:902] [INFO] [MQTT] Successfully updated with the new image.
```

# Over-the-air configurações de demonstração
<a name="ota-demo-specific-config"></a>

As configurações de demonstração OTA são opções de configuração específicas de demonstração fornecidas em `aws_iot_ota_update_demo.c`. Essas configurações são diferentes das configurações da biblioteca OTA fornecidas no arquivo de configuração da biblioteca OTA. 

**OTA\$1DEMO\$1KEEP\$1ALIVE\$1SECONDS**  
Para o cliente MQTT, essa configuração é o intervalo máximo de tempo que pode decorrer entre o término da transmissão de um pacote de controle e o início do envio do próximo. Na falta de um pacote de controle, um PINGREQ é enviado. O agente deve desconectar um cliente que não envia uma mensagem ou um pacote PINGREQ de vez em quando durante esse intervalo keep-alive. Essa configuração deve ser ajustada com base nos requisitos da aplicação.

**OTA\$1DEMO\$1CONN\$1RETRY\$1BASE\$1INTERVAL\$1SECONDS**  
O intervalo base, em segundos, antes de tentar a conexão de rede novamente. A demonstração OTA tentará se reconectar após esse intervalo de tempo base. O intervalo dobrará após cada tentativa com falha. Um atraso aleatório, até o máximo desse atraso de base, também é adicionado ao intervalo.

**OTA\$1DEMO\$1CONN\$1RETRY\$1MAX\$1INTERVAL\$1SECONDS**  
O intervalo máximo, em segundos, antes de tentar a conexão de rede novamente. O atraso de reconexão dobrará em cada tentativa com falha, mas só pode chegar até esse valor máximo, mais um jitter do mesmo intervalo.

# Baixe, crie, atualize e execute a demonstração do FreeRTOS OTA no Texas Instruments SF-LAUNCHXL CC3220
<a name="download-ota-ti"></a>

**Importante**  <a name="deprecation-message"></a>
Essa integração de referência está hospedada no repositório Amazon-FreeRTOS, que está preterido. Recomendamos [começar aqui](freertos-getting-started-modular.md) ao criar um novo projeto. Se você já tem um projeto FreeRTOS existente baseado no repositório Amazon-FreeRTOS que está preterido, consulte o [Guia de migração do repositório Github do Amazon FreeRTOS](github-repo-migration.md).<a name="download-demo"></a>

**Como fazer download do FreeRTOS e do código de demonstração OTA**
+ Você pode baixar o código-fonte no GitHub site [https://github.com/FreeRTOS/FreeRTOS](https://github.com/FreeRTOS/FreeRTOS). <a name="build-demo"></a>

**Para criar a aplicação de demonstração**

1. Siga as instruções em [Conceitos básicos do FreeRTOS](freertos-getting-started.md) para importar o `aws_demos` projeto para o Code Composer Studio, configurar seu AWS IoT endpoint, seu SSID e senha Wi-Fi, além de uma chave privada e certificado para sua placa.

1.  Abra `freertos/vendors/vendor/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`.

1. Crie a solução e verifique se ela foi criada sem erros.

1. Inicie um emulador de terminal e use as seguintes configurações para se conectar à placa:
   + Taxa de baud: 115200
   + Bits de dados: 8
   + Paridade: nenhum
   + Bits de parada: 1

1. Execute o projeto na placa para confirmar se ele pode se conectar ao Wi-Fi e ao agente de mensagens MQTT da AWS IoT .

Quando executado, o emulador de terminal deve exibir um texto como o seguinte:

```
    0 1000 [Tmr Svc] Simple Link task created
    Device came up in Station mode
    1 2534 [Tmr Svc] Write certificate...
    2 5486 [Tmr Svc] [ERROR] Failed to destroy object. PKCS11_PAL_DestroyObject failed.
    3 5486 [Tmr Svc] Write certificate...
    4 5776 [Tmr Svc] Security alert threshold = 15
    5 5776 [Tmr Svc] Current number of alerts = 1
    6 5778 [Tmr Svc] Running Demos.
    7 5779 [iot_thread] [INFO ][DEMO][5779] ---------STARTING DEMO---------
    8 5779 [iot_thread] [INFO ][INIT][5779] SDK successfully initialized.
    Device came up in Station mode
    [WLAN EVENT] STA Connected to the AP: afrlab-pepper , BSSID: 74:83:c2:b4:46:27
    [NETAPP EVENT] IP acquired by the device
    Device has connected to afrlab-pepper
    Device IP Address is 192.168.36.176 
    9 8283 [iot_thread] [INFO ][DEMO][8282] Successfully initialized the demo. Network type for the demo: 1
    10 8283 [iot_thread] [INFO] OTA over MQTT demo, Application version 0.9.0
    11 8283 [iot_thread] [INFO] Creating a TLS connection to <endpoint>-ats.iot.us-west-2.amazonaws.com:8883.
    12 8852 [iot_thread] [INFO] Creating an MQTT connection to <endpoint>-ats.iot.us-west-2.amazonaws.com.
    13 8914 [iot_thread] [INFO] Packet received. ReceivedBytes=2.
    14 8914 [iot_thread] [INFO] CONNACK session present bit not set.
    15 8914 [iot_thread] [INFO] Connection accepted.
    16 8914 [iot_thread] [INFO] Received MQTT CONNACK successfully from broker.
    17 8914 [iot_thread] [INFO] MQTT connection established with the broker.
    18 8915 [iot_thread] [INFO]  Received: 0   Queued: 0   Processed: 0   Dropped: 0
    19 8953 [OTA Agent T] [INFO] Current State=[RequestingJob], Event=[Start], New state=[RequestingJob]
    20 9008 [MQTT Agent ] [INFO] Packet received. ReceivedBytes=3.
    21 9015 [OTA Agent T] [INFO] SUBSCRIBED to topic $aws/things/__test_infra_thing73/jobs/notify-next to broker.
    22 9015 [OTA Agent T] [INFO] Subscribed to MQTT topic: $aws/things/__test_infra_thing73/jobs/notify-next
    23 9504 [MQTT Agent ] [INFO] Publishing message to $aws/things/__test_infra_thing73/jobs/$next/get.
    24 9535 [MQTT Agent ] [INFO] Packet received. ReceivedBytes=2.
    25 9535 [MQTT Agent ] [INFO] Ack packet deserialized with result: MQTTSuccess.
    26 9536 [MQTT Agent ] [INFO] State record updated. New state=MQTTPublishDone.
    27 9537 [OTA Agent T] [INFO] Sent PUBLISH packet to broker $aws/things/__test_infra_thing73/jobs/$next/get to broker.
    28 9537 [OTA Agent T] [WARN] OTA Timer handle NULL for Timerid=0, can't stop.
    29 9537 [OTA Agent T] [INFO] Current State=[WaitingForJob], Event=[RequestJobDocument], New state=[WaitingForJob]
    30 9539 [MQTT Agent ] [INFO] Packet received. ReceivedBytes=120.
    31 9539 [MQTT Agent ] [INFO] De-serialized incoming PUBLISH packet: DeserializerResult=MQTTSuccess.
    32 9540 [MQTT Agent ] [INFO] State record updated. New state=MQTTPublishDone.
    33 9540 [MQTT Agent ] [INFO] Received job message callback, size 62.
    34 9616 [OTA Agent T] [INFO] Failed job document content check: Required job document parameter was not extracted: parameter=execution
    35 9616 [OTA Agent T] [INFO] Failed job document content check: Required job document parameter was not extracted: parameter=execution.jobId
    36 9617 [OTA Agent T] [INFO] Failed job document content check: Required job document parameter was not extracted: parameter=execution.jobDocument
    37 9617 [OTA Agent T] [INFO] Failed job document content check: Required job document parameter was not extracted: parameter=execution.jobDocument.afr_ota
    38 9617 [OTA Agent T] [INFO] Failed job document content check: Required job document parameter was not extracted: parameter=execution.jobDocument.afr_ota.protocols
    39 9618 [OTA Agent T] [INFO] Failed job document content check: Required job document parameter was not extracted: parameter=execution.jobDocument.afr_ota.files
    40 9618 [OTA Agent T] [INFO] Failed job document content check: Required job document parameter was not extracted: parameter=filesize
    41 9618 [OTA Agent T] [INFO] Failed job document content check: Required job document parameter was not extracted: parameter=fileid
    42 9619 [OTA Agent T] [INFO] Failed to parse JSON document as AFR_OTA job: DocParseErr_t=7
    43 9619 [OTA Agent T] [INFO] No active job available in received job document: OtaJobParseErr_t=OtaJobParseErrNoActiveJobs
    44 9619 [OTA Agent T] [ERROR] Failed to execute state transition handler: Handler returned error: OtaErr_t=OtaErrJobParserError
    45 9620 [OTA Agent T] [INFO] Current State=[WaitingForJob], Event=[ReceivedJobDocument], New state=[CreatingFile]
    46 9915 [iot_thread] [INFO]  Received: 0   Queued: 0   Processed: 0   Dropped: 0
    47 10915 [iot_thread] [INFO]  Received: 0   Queued: 0   Processed: 0   Dropped: 0
    48 11915 [iot_thread] [INFO]  Received: 0   Queued: 0   Processed: 0   Dropped: 0
    49 12915 [iot_thread] [INFO]  Received: 0   Queued: 0   Processed: 0   Dropped: 0
    50 13915 [iot_thread] [INFO]  Received: 0   Queued: 0   Processed: 0   Dropped: 0
    51 14915 [iot_thread] [INFO]  Received: 0   Queued: 0   Processed: 0   Dropped: 0
```

# Baixe, crie, atualize e execute a demonstração do FreeRTOS OTA no Microchip Curiosity MZEF PIC32
<a name="download-ota-mchip"></a>

**Importante**  <a name="deprecation-message"></a>
Essa integração de referência está hospedada no repositório Amazon-FreeRTOS, que está preterido. Recomendamos [começar aqui](freertos-getting-started-modular.md) ao criar um novo projeto. Se você já tem um projeto FreeRTOS existente baseado no repositório Amazon-FreeRTOS que está preterido, consulte o [Guia de migração do repositório Github do Amazon FreeRTOS](github-repo-migration.md).

**nota**  
De acordo com a Microchip, estamos removendo o Curiosity PIC32 MZEF () DM320104 da ramificação principal do repositório de Integração de Referência do FreeRTOS e não o carregaremos mais em novas versões. A Microchip emitiu um [aviso oficial](https://www.microchip.com/DevelopmentTools/ProductDetails/PartNO/DM320104) de que o PIC32 MZEF (DM320104) não é mais recomendado para novos designs. Os projetos e o código-fonte do PIC32 MZEF ainda podem ser acessados por meio das tags de lançamento anteriores. A Microchip recomenda que os clientes usem a [placa de desenvolvimento Curiosity PIC32 MZ-EF-2.0 (](https://devices.amazonaws.com/detail/a3G0h0000077I69EAE/Curiosity-PIC32MZ-EF-2-0-Development-Board)) para novos designs. DM320209 A PIC32 MZv1 plataforma ainda pode ser encontrada na versão [v202012.00 do repositório de integração de referência do](https://github.com/aws/amazon-freertos/tree/202012.00) FreeRTOS. No entanto, não há mais suporte para a plataforma não na versão [v202107.00](https://github.com/aws/amazon-freertos/tree/202107.00) da Referência do FreeRTOS.<a name="mch-dowload-demo"></a>

**Como fazer download do código de demonstração OTA do FreeRTOS**
+ Você pode baixar o código-fonte no GitHub site [https://github.com/FreeRTOS/FreeRTOS](https://github.com/FreeRTOS/FreeRTOS). <a name="mch-build-demo"></a>

**Para criar a aplicação de demonstração de atualização OTA**

1. Siga as instruções em [Conceitos básicos do FreeRTOS](freertos-getting-started.md) para importar o `aws_demos` projeto para o MPLAB X IDE, configurar seu AWS IoT endpoint, seu SSID e senha Wi-Fi, além de uma chave privada e certificado para sua placa.

1. Abra o arquivo `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` e insira seu certificado.

   ```
   [] = "your-certificate-key";
   ```

1. Cole o conteúdo do certificado de assinatura de código aqui:

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

   Siga o mesmo formato que `aws_clientcredential_keys.h`, cada linha deve terminar com o novo caractere de linha ('\$1n') e estar entre aspas.

   Por exemplo, o certificado deve ser semelhante ao seguinte:

   ```
   "-----BEGIN CERTIFICATE-----\n"
   "MIIBXTCCAQOgAwIBAgIJAM4DeybZcTwKMAoGCCqGSM49BAMCMCExHzAdBgNVBAMM\n"
   "FnRlc3Rf62lnbmVyQGFtYXpvbi5jb20wHhcNMTcxMTAzMTkxODM1WhcNMTgxMTAz\n"
   "MTkxODM2WjAhMR8wHQYDVQBBZZZ0ZXN0X3NpZ25lckBhbWF6b24uY29tMFkwEwYH\n"
   "KoZIzj0CAQYIKoZIzj0DAQcDQgAERavZfvwL1X+E4dIF7dbkVMUn4IrJ1CAsFkc8\n"
   "gZxPzn683H40XMKltDZPEwr9ng78w9+QYQg7ygnr2stz8yhh06MkMCIwCwYDVR0P\n"
   "BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMAoGCCqGSM49BAMCA0gAMEUCIF0R\n"
   "r5cb7rEUNtWOvGd05MacrgOABfSoVYvBOK9fP63WAqt5h3BaS123coKSGg84twlq\n"
   "TkO/pV/xEmyZmZdV+HxV/OM=\n"
   "-----END CERTIFICATE-----\n";
   ```

1. Instale o [Python 3](https://www.python.org/downloads/) ou posterior.

1. Instale `pyOpenSSL` executando `pip install pyopenssl`.

1. Copie o certificado de assinatura de código no formato .pem no caminho `demos/ota/bootloader/utility/codesigner_cert_utility/`. Renomeie o arquivo de certificado `aws_ota_codesigner_certificate.pem`.

1.  Abra `freertos/vendors/vendor/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`.

1. Crie a solução e verifique se ela foi criada sem erros.

1. Inicie um emulador de terminal e use as seguintes configurações para se conectar à placa:
   + Taxa de baud: 115200
   + Bits de dados: 8
   + Paridade: nenhum
   + Bits de parada: 1

1. Desconecte o depurador da sua placa e execute o projeto na sua placa para confirmar se ele pode se conectar ao Wi-Fi e ao agente de mensagens MQTT. AWS IoT 

Quando você executa o projeto, o MPLAB X IDE deve abrir uma janela de saída. Verifique se a **ICD4**guia está selecionada. Você verá a saída a seguir.

```
Bootloader version 00.09.00
[prvBOOT_Init] Watchdog timer initialized.
[prvBOOT_Init] Crypto initialized.

[prvValidateImage] Validating image at Bank : 0
[prvValidateImage] No application image or magic code present at: 0xbd000000
[prvBOOT_ValidateImages] Validation failed for image at 0xbd000000

[prvValidateImage] Validating image at Bank : 1
[prvValidateImage] No application image or magic code present at: 0xbd100000
[prvBOOT_ValidateImages] Validation failed for image at 0xbd100000

[prvBOOT_ValidateImages] Booting default image.


>0 36246 [IP-task] vDHCPProcess: offer ac140a0eip
                                                 1 36297 [IP-task] vDHCPProcess: offer ac140a0eip
                 2 36297 [IP-task]

IP Address: 172.20.10.14
3 36297 [IP-task] Subnet Mask: 255.255.255.240
4 36297 [IP-task] Gateway Address: 172.20.10.1
5 36297 [IP-task] DNS Server Address: 172.20.10.1


6 36299 [OTA] OTA demo version 0.9.2
7 36299 [OTA] Creating MQTT Client...
8 36299 [OTA] Connecting to broker...
9 38673 [OTA] Connected to broker.
10 38793 [OTA Task] [prvSubscribeToJobNotificationTopics] OK: $aws/things/devthingota/jobs/$next/get/accepted
11 38863 [OTA Task] [prvSubscribeToJobNotificationTopics] OK: $aws/things/devthingota/jobs/notify-next
12 38863 [OTA Task] [OTA_CheckForUpdate] Request #0
13 38964 [OTA] [OTA_AgentInit] Ready.
14 38973 [OTA Task] [prvParseJSONbyModel] Extracted parameter [ clientToken: 0:devthingota ]
15 38973 [OTA Task] [prvParseJSONbyModel] parameter not present: execution
16 38973 [OTA Task] [prvParseJSONbyModel] parameter not present: jobId
17 38973 [OTA Task] [prvParseJSONbyModel] parameter not present: jobDocument
18 38973 [OTA Task] [prvParseJSONbyModel] parameter not present: streamname
19 38973 [OTA Task] [prvParseJSONbyModel] parameter not present: files
20 38975 [OTA Task] [prvParseJSONbyModel] parameter not present: filepath
21 38975 [OTA Task] [prvParseJSONbyModel] parameter not present: filesize
22 38975 [OTA Task] [prvParseJSONbyModel] parameter not present: fileid
23 38975 [OTA Task] [prvParseJSONbyModel] parameter not present: certfile
24 38975 [OTA Task] [prvParseJSONbyModel] parameter not present: sig-sha256-ecdsa
25 38975 [OTA Task] [prvParseJobDoc] Ignoring job without ID.
26 38975 [OTA Task] [prvOTA_Close] Context->0x8003b620
27 38975 [OTA Task] [prvPAL_Abort] Abort - OK
28 39964 [OTA] State: Ready  Received: 1   Queued: 1   Processed: 1   Dropped: 0
29 40964 [OTA] State: Ready  Received: 1   Queued: 1   Processed: 1   Dropped: 0
30 41964 [OTA] State: Ready  Received: 1   Queued: 1   Processed: 1   Dropped: 0
31 42964 [OTA] State: Ready  Received: 1   Queued: 1   Processed: 1   Dropped: 0
32 43964 [OTA] State: Ready  Received: 1   Queued: 1   Processed: 1   Dropped: 0
33 44964 [OTA] State: Ready  Received: 1   Queued: 1   Processed: 1   Dropped: 0
34 45964 [OTA] State: Ready  Received: 1   Queued: 1   Processed: 1   Dropped: 0
35 46964 [OTA] State: Ready  Received: 1   Queued: 1   Processed: 1   Dropped: 0
36 47964 [OTA] State: Ready  Received: 1   Queued: 1   Processed: 1   Dropped: 0
```

O emulador de terminal deve exibir um texto como o seguinte:

```
AWS Validate: no valid signature in descr: 0xbd000000
AWS Validate: no valid signature in descr: 0xbd100000


>AWS Launch:  No Map performed. Running directly from address: 0x9d000020?
AWS Launch:  wait for app at: 0x9d000020
WILC1000: Initializing...
0 0 

>[None] Seed for randomizer: 1172751941
1 0 [None] Random numbers: 00004272 00003B34 00000602 00002DE3
Chip ID 1503a0

[spi_cmd_rsp][356][nmi spi]: Failed cmd response read, bus error...

[spi_read_reg][1086][nmi spi]: Failed cmd response, read reg (0000108c)...

[spi_read_reg][1116]Reset and retry 10 108c

Firmware ver. : 4.2.1

Min driver ver : 4.2.1

Curr driver ver: 4.2.1

WILC1000: Initialization successful!

Start Wi-Fi Connection...
Wi-Fi Connected
2 7219 [IP-task] vDHCPProcess: offer c0a804beip
3 7230 [IP-task] vDHCPProcess: offer c0a804beip
4 7230 [IP-task] 

IP Address: 192.168.4.190
5 7230 [IP-task] Subnet Mask: 255.255.240.0
6 7230 [IP-task] Gateway Address: 192.168.0.1
7 7230 [IP-task] DNS Server Address: 208.67.222.222


8 7232 [OTA] OTA demo version 0.9.0
9 7232 [OTA] Creating MQTT Client...
10 7232 [OTA] Connecting to broker...
11 7232 [OTA] Sending command to MQTT task.
12 7232 [MQTT] Received message 10000 from queue.
13 8501 [IP-task] Socket sending wakeup to MQTT task.
14 10207 [MQTT] Received message 0 from queue.
15 10256 [IP-task] Socket sending wakeup to MQTT task.
16 10256 [MQTT] Received message 0 from queue.
17 10256 [MQTT] MQTT Connect was accepted. Connection established.
18 10256 [MQTT] Notifying task.
19 10257 [OTA] Command sent to MQTT task passed.
20 10257 [OTA] Connected to broker.
21 10258 [OTA Task] Sending command to MQTT task.
22 10258 [MQTT] Received message 20000 from queue.
23 10306 [IP-task] Socket sending wakeup to MQTT task.
24 10306 [MQTT] Received message 0 from queue.
25 10306 [MQTT] MQTT Subscribe was accepted. Subscribed.
26 10306 [MQTT] Notifying task.
27 10307 [OTA Task] Command sent to MQTT task passed.
28 10307 [OTA Task] [OTA] Subscribed to topic: $aws/things/Microchip/jobs/$next/get/accepted

29 10307 [OTA Task] Sending command to MQTT task.
30 10307 [MQTT] Received message 30000 from queue.
31 10336 [IP-task] Socket sending wakeup to MQTT task.
32 10336 [MQTT] Received message 0 from queue.
33 10336 [MQTT] MQTT Subscribe was accepted. Subscribed.
34 10336 [MQTT] Notifying task.
35 10336 [OTA Task] Command sent to MQTT task passed.
36 10336 [OTA Task] [OTA] Subscribed to topic: $aws/things/Microchip/jobs/notify-next

37 10336 [OTA Task] [OTA] Check For Update #0
38 10336 [OTA Task] Sending command to MQTT task.
39 10336 [MQTT] Received message 40000 from queue.
40 10366 [IP-task] Socket sending wakeup to MQTT task.
41 10366 [MQTT] Received message 0 from queue.
42 10366 [MQTT] MQTT Publish was successful.
43 10366 [MQTT] Notifying task.
44 10366 [OTA Task] Command sent to MQTT task passed.
45 10376 [IP-task] Socket sending wakeup to MQTT task.
46 10376 [MQTT] Received message 0 from queue.
47 10376 [OTA Task] [OTA] Set job doc parameter [ clientToken: 0:Microchip ]
48 10376 [OTA Task] [OTA] Missing job parameter: execution
49 10376 [OTA Task] [OTA] Missing job parameter: jobId
50 10376 [OTA Task] [OTA] Missing job parameter: jobDocument
51 10378 [OTA Task] [OTA] Missing job parameter: ts_ota
52 10378 [OTA Task] [OTA] Missing job parameter: files
53 10378 [OTA Task] [OTA] Missing job parameter: streamname
54 10378 [OTA Task] [OTA] Missing job parameter: certfile
55 10378 [OTA Task] [OTA] Missing job parameter: filepath
56 10378 [OTA Task] [OTA] Missing job parameter: filesize
57 10378 [OTA Task] [OTA] Missing job parameter: sig-sha256-ecdsa
58 10378 [OTA Task] [OTA] Missing job parameter: fileid
59 10378 [OTA Task] [OTA] Missing job parameter: attr
60 10378 [OTA Task] [OTA] Returned buffer to MQTT Client.
61 11367 [OTA] [OTA] Queued: 1   Processed: 1   Dropped: 0
62 12367 [OTA] [OTA] Queued: 1   Processed: 1   Dropped: 0
63 13367 [OTA] [OTA] Queued: 1   Processed: 1   Dropped: 0
64 14367 [OTA] [OTA] Queued: 1   Processed: 1   Dropped: 0
65 15367 [OTA] [OTA] Queued: 1   Processed: 1   Dropped: 0
66 16367 [OTA] [OTA] Queued: 1   Processed: 1   Dropped: 0
```

Esta saída mostra que o Microchip Curiosity PIC32 MZEF pode se conectar AWS IoT e assinar os tópicos do MQTT necessários para atualizações do OTA. As mensagens `Missing job parameter` são esperadas porque não há tarefas de atualização OTA pendentes.

# Baixe, crie, atualize e execute a demonstração do FreeRTOS OTA no Espressif ESP32
<a name="download-ota-esp"></a>

**Importante**  <a name="deprecation-message"></a>
Essa integração de referência está hospedada no repositório Amazon-FreeRTOS, que está preterido. Recomendamos [começar aqui](freertos-getting-started-modular.md) ao criar um novo projeto. Se você já tem um projeto FreeRTOS existente baseado no repositório Amazon-FreeRTOS que está preterido, consulte o [Guia de migração do repositório Github do Amazon FreeRTOS](github-repo-migration.md).

1. Faça o download da fonte do FreeRTOS em. [GitHub](https://github.com/aws/amazon-freertos) Consulte o arquivo [README.md](https://github.com/aws/amazon-freertos/blob/main/README.md) para obter instruções. Crie um projeto no seu IDE que inclua todas as fontes e bibliotecas necessárias.

1. Siga as instruções em [Conceitos básicos do Espressif](https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html) para configurar a cadeia de ferramentas necessária baseada em GCC.

1. Abra `freertos/vendors/vendor/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`.

1. Crie o projeto de demonstração, executando `make` no diretório `vendors/espressif/boards/esp32/aws_demos`. Você pode fazer o flash do programa de demonstração e verificar sua saída executando `make flash monitor`, conforme descrito em [Conceitos básicos do Espressif](https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html).

1. Antes de executar a demonstração da atualização OTA:
   + Abra `freertos/vendors/vendor/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`.
   + Abra `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` e copie seu certificado de assinatura de código SHA-256/ECDSA em:

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

# Baixe, crie, atualize e execute a demonstração do FreeRTOS OTA no Renesas N RX65
<a name="download-rx65n-ota"></a>

**Importante**  <a name="deprecation-message"></a>
Essa integração de referência está hospedada no repositório Amazon-FreeRTOS, que está preterido. Recomendamos [começar aqui](freertos-getting-started-modular.md) ao criar um novo projeto. Se você já tem um projeto FreeRTOS existente baseado no repositório Amazon-FreeRTOS que está preterido, consulte o [Guia de migração do repositório Github do Amazon FreeRTOS](github-repo-migration.md).

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

**Topics**
+ [Configuração do ambiente operacional](#download-rx65n-ota-environment)
+ [Configure seus AWS recursos](#download-rx65n-ota-setup)
+ [Importe, configure o arquivo de cabeçalho e compile aws\$1demos e boot\$1loader](#download-rx65n-ota-import-configure)

## Configuração do ambiente operacional
<a name="download-rx65n-ota-environment"></a>

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.

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

## Configure seus AWS recursos
<a name="download-rx65n-ota-setup"></a>

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](freertos-prereqs.md#freertos-account-and-permissions).

1. Para configurar as atualizações OTA, siga as etapas em [Pré-requisitos de atualização do OTA](ota-prereqs.md). Em especial, siga as etapas em [Pré-requisitos para atualizações de OTA usando MQTT](ota-mqtt-freertos.md).

1. Abra o [console do AWS IoT](https://console.aws.amazon.com/iot/home).

1. 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**.

   1. Insira o **Nome** da coisa e escolha **Próximo**.

   1. Selecione **Criar certificado**.

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

   1. Selecione a opção **Anexar uma política**.  
![\[tela do console mostrando os arquivos a serem baixados\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/download-these-files-rx65n.png)

   1. Selecione a política que você criou em [Política de dispositivo](ota-mqtt-freertos.md#ota-mqtt-freertos-device-policy).

      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](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html) e [Recursos da ação principal do AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-action-resources.html).

**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.

1. 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.](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)

   1. Abra o [console do AWS IoT](https://console.aws.amazon.com/iot/home). No painel de navegação esquerdo, selecione **Gerenciar**, depois, **Trabalhos**. Selecione **Criar um trabalho**, depois **Criar trabalho de atualização OTA**. 

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

   1. 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**. 

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

      1. Em **Perfil de assinatura de código**, escolha **Criar**.

      1. 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**.

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

      1. Insira um **nome de caminho do certificado de assinatura de código no dispositivo**. Em seguida, escolha **Criar**.

1. Para conceder acesso à assinatura de código para AWS IoT, siga as etapas em[Conceda acesso à assinatura de código para AWS IoT](code-sign-policy.md). 

Se não tiver o Tera Term instalado em seu PC, você pode baixá-lo [https://ttssh2.osdn.jp/index.htmlem .en](https://ttssh2.osdn.jp/index.html.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\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/tera-team-rx65n.png)


## Importe, configure o arquivo de cabeçalho e compile aws\$1demos e boot\$1loader
<a name="download-rx65n-ota-import-configure"></a>

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.

1. Escolha o **Arquivo** e depois **Importar...**.

1. Selecione o **projeto Renesas GitHub FreeRTOS (com bibliotecas de IoT**).  
![\[janela de importação do e-squared studio\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/import-renesas-project-rx65n.png)

1. Escolha **Verificar mais versões...** para mostrar a caixa de diálogo de download.  
![\[janela de diálogo de download do e-squared studio\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/check-more-version-rx65n.png)

1. Selecione o pacote mais recente.  
![\[janela de diálogo de download do módulo do e-squared studio\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/choose-latest-version-rx65n.png)

1. Escolha **Concordo** para aceitar o contrato de licença do usuário final.  
![\[Diálogo de EULA do e-squared studio\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/eula-rx65n.png)

1. Aguarde a conclusão do download.  
![\[barra de progresso do download\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/downloading-rx65n.png)

1. Selecione os projetos **aws\$1demos** e **boot\$1loader** e escolha **Concluir** para importá-los.  
![\[janela de importação de projetos\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/import-projects-rx65n.png)

1. 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**.

   1. Escolha o **Builder atual**.  
![\[janela de propriedades do e-squared studio\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/project-properties-rx65n.png)

1. 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.  
![\[Configurações de integração do conjunto de ferramentas para Renesas CCRX versão v3.01.00, com opção para alterar o conjunto de ferramentas.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/project-properties-toolchain-rx65n.png)

   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**.  
![\[Janela de configurações de compilação C/C++ mostrando opções do compilador e do vinculador, como arquivo hexadecimal de saída, tipo de arquivo de saída, diretório de saída e opções de divisão de arquivos.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/project-properties-settings-rx65n.png)  
![\[Árvore de configurações da interface com opções para análise de pilha, editor de conjunto de ferramentas, C/C++ geral, MCU, referências de projeto etc.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/project-properties-settings-2-rx65n.png)

1. 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](https://www.renesas.com/us/en/document/apn/rx-family-how-implement-freertos-ota-using-amazon-web-services-rx65n) Política de SHA256 design de atualização de firmware da Renesas MCU.](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)  
![\[Editor de código exibindo um arquivo de cabeçalho C com a definição de CODE_SIGNER_PUBLIC_KEY e uma variável de chave pública do assinante de código codificada em PEM.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/open-bootloader-project-rx65n.png)

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

1. Abra o projeto `aws_demos`.

   1. Abra o [console do AWS IoT](https://console.aws.amazon.com/iot/home).

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

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

   1. 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"
      ```  
![\[Trecho de código mostrando o nome da AWS IoT coisa e as configurações do endpoint do broker.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/client-credential-rx65n.png)

   1. Abra o arquivo `tools/certificate_configuration/CertificateConfigurator.html`.

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

   1. Escolha **Gerar e salvar aws\$1clientcredential\$1keys.h** e substitua esse arquivo no diretório `demos/include/`.  
![\[Ferramenta de configuração de certificados com campos para fornecer arquivos PEM de certificado de cliente e chave privada a partir do AWS IoT console e um botão para gerar e salvar o arquivo aws_clientcredential_keys.h.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/certificate-config-tool-rx65n.png)

   1. 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 arquivo`secp256r1.crt`. Lembre-se de adicionar "\$1" 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](https://www.renesas.com/us/en/document/apn/rx-family-how-implement-freertos-ota-using-amazon-web-services-rx65n) 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.](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)  
![\[Arquivo de código-fonte mostrando o código C que define uma string constante de certificado de assinatura de código codificada em PEM com dados de certificado ocultados.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/codesigner-cert-rx65n.png)

1. **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`.

   1. Abra o arquivo `demos/include/ aws_application_version.h` e defina a versão inicial do firmware como `0.9.2`.  
![\[Trecho de código mostrando as definições de versão para um aplicativo, incluindo macros para números de versão principal, secundária e de compilação.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/firmware-version-rx65n.png)

   1. Altere as configurações a seguir em **Visualizador de seção**.  
![\[Janela do visualizador de seções mostrando endereços de memória, nomes de seções como SU, SI, registradores e componentes de interface como buffers de rede, exceções e botões de ação.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/section-viewer-rx65n.png)

   1. Escolha **Compilar** para criar o arquivo `aws_demos.mot`.

1. 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](https://github.com/renesas/Amazon-FreeRTOS-Tools). `Renesas Secure Flash Programmer.exe`

   1. 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`).  
![\[Janela do Renesas Secure Flash Programmer com campos para MCU, verificação de firmware, número de sequência, caminho da chave AES e caminho do arquivo.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/secure-flash-rx65n.png)

   1. 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.

1. 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](https://www.renesas.com/tw/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui.html) 

   1. 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.

   1. Escolha **Iniciar** para apagar o banco.  
![\[Janela do Renesas Flash Programmer exibindo detalhes do projeto do microcontrolador RX Group, caminho do arquivo e opções de operação de flash, como Apagar, Programar e Verificar, com botões Iniciar e OK.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/flash-programmer-erasing-rx65n.png)

   1. Para atualizar `userprog.mot`, escolha **Procurar...** e navegue até o diretório `init_firmware`, selecione o arquivo `userprog.mot` e escolha **Iniciar**.  
![\[Janela do Renesas Flash Programmer mostrando as configurações da operação de apagamento, incluindo o grupo RX do microcontrolador, opção para navegar pelo arquivo do programa, botões Apagar e Iniciar, e detalhes do status dos blocos selecionados para apagar.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/flash-programmer-complete-rx65n.png)

1. 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
   ```

1. **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`.

   1. Recrie o projeto.

1. 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`.

   1. 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`).

   1. Crie um diretório denominado `update _firmware`. Gere `userprog.rsu` e salve-o no diretório `update_firmware`. Verifique se o que foi gerado teve êxito.  
![\[Janela do Renesas Secure Flash Programmer com seleção de MCU, tipo de verificação de firmware, número de sequência, campo de chave MAC AES e entrada de caminho de arquivo para geração de firmware seguro.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/update-firmware-rx65n.png)

1. 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](dg-ota-bucket.md).   
![\[Interface de gerenciamento de buckets do Amazon S3 com opções para pastas, uploads, versões e permissões\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/upload-firmware-rx65n.png)

1. 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](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html) 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](https://console.aws.amazon.com/iotv2/). No painel de navegação, escolha **Gerenciar** e escolha **Trabalhos**.

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

   1. 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.

   1. Escolha **Próximo**.  
![\[Configurações de assinatura de imagem de firmware e atualização OTA com opções para assinar um novo firmware, selecionar um firmware previamente assinado, usar um firmware com assinatura personalizada, especificar o perfil de assinatura de código, o arquivo de imagem do firmware, o caminho no dispositivo e o perfil do IAM para a tarefa de atualização OTA.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/create-job-next-rx65n.png)

   1. Insira um ID e escolha **Criar**.

1. 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.  
![\[Saída da linha de comando mostrando a inicialização e a conexão de uma thread a um agente.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/update-successful-rx65n.png)

1. No AWS IoT console, verifique se o status do trabalho é **Bem-sucedido**.  
![\[Visão geral do teste de demonstração AFR OTA, mostrando que 1 recurso foi concluído com sucesso.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/completed-succeeded-rx65n.png)

# Tutorial: Execute atualizações OTA no Espressif usando ESP32 FreeRTOS Bluetooth Low Energy
<a name="ota-updates-esp32-ble"></a>

**Importante**  <a name="deprecation-message"></a>
Essa integração de referência está hospedada no repositório Amazon-FreeRTOS, que está preterido. Recomendamos [começar aqui](freertos-getting-started-modular.md) ao criar um novo projeto. Se você já tem um projeto FreeRTOS existente baseado no repositório Amazon-FreeRTOS que está preterido, consulte o [Guia de migração do repositório Github do Amazon FreeRTOS](github-repo-migration.md).

Este tutorial mostra como atualizar um ESP32 microcontrolador Espressif conectado a um proxy MQTT Bluetooth Low Energy em um dispositivo Android. Ele atualiza o dispositivo usando trabalhos de atualização AWS IoT Over-the-air (OTA). O dispositivo se conecta AWS IoT usando as credenciais do Amazon Cognito inseridas no aplicativo de demonstração do Android. Um operador autorizado inicia a atualização OTA a partir da nuvem. Quando o dispositivo se conecta por meio da aplicação de demonstração do Android, a atualização OTA é iniciada e o firmware é atualizado no dispositivo. 

As versões principais e posteriores do FreeRTOS 2019.06.00 incluem suporte a proxy Bluetooth Low Energy MQTT que pode ser usado para provisionamento de Wi-Fi e conexões seguras a serviços. AWS IoT Ao usar o recurso Bluetooth Low Energy, você pode criar dispositivos de baixo consumo de energia que podem ser emparelhados com um dispositivo móvel para conectividade sem precisar de Wi-Fi. Os dispositivos podem se comunicar usando o MQTT conectando-se por meio de Bluetooth Low Energy para Android ou iOS SDKs que usam perfis genéricos de acesso (GAP) e atributos genéricos (GATT).

Confira as etapas que seguiremos para permitir atualizações OTA via Bluetooth Low Energy:

1. **Configurar o armazenamento:** crie um bucket e políticas do Amazon S3 e configure um usuário que possa realizar atualizações.

1. **Criar um certificado de assinatura de código:** crie um certificado de assinatura e permita que o usuário assine atualizações de firmware.

1. **Configurar a autenticação do Amazon Cognito:** crie um provedor de credenciais, um grupo de usuários e acesso de aplicações ao grupo de usuários.

1. **Configurar o FreeRTOS**: configure o Bluetooth Low Energy, as credenciais do cliente e o certificado público de assinatura de código.

1. **Configurar uma aplicação Android:** configure o provedor de credenciais, o grupo de usuários e implante a aplicação em um dispositivo Android.

1. **Executar o script de atualização OTA:** para iniciar uma atualização OTA, use o script de atualização OTA.

Para obter mais informações sobre como as atualizações funcionam, consulte [Atualizações do FreeRTOS Over-the-Air](freertos-ota-dev.md). Para obter informações adicionais sobre como configurar a funcionalidade de proxy MQTT Bluetooth Low Energy, consulte o post [Usando Bluetooth Low Energy com FreeRTOS no ESP32 Espressif, de Richard](https://aws.amazon.com/blogs/iot/using-bluetooth-low-energy-with-amazon-freertos-on-espressif-esp32/) Kang.

## Pré-requisitos
<a name="ota-updates-esp32-ble-prereq"></a>

Para executar as etapas neste tutorial, você precisa dos seguintes recursos:
+ Uma placa ESP32 de desenvolvimento.
+ Um cabo microUSB para USB A.
+ Uma AWS conta (o nível gratuito é suficiente).
+ Um telefone Android com Android v 6.0 ou posterior e Bluetooth versão 4.2 ou posterior.

No seu computador de desenvolvimento, você precisa:
+ Espaço em disco suficiente (\$1 500 Mb) para a cadeia de ferramentas Xtensa e o código-fonte e exemplos do FreeRTOS.
+ Android Studio instalado.
+ A [AWS CLI](https://aws.amazon.com/cli/) instalada.
+ Python3 instalado.
+ O [kit de desenvolvimento de AWS software (SDK) boto3 para Python](https://github.com/boto/boto3).

As etapas deste tutorial consideram que a cadeia de ferramentas Xtensa, o ESP-IDF e o código FreeRTOS estão instalados no diretório inicial `/esp`. Você deve adicionar `~/esp/xtensa-esp32-elf/bin` à sua variável `$PATH`.

## Etapa 1: configurar o armazenamento
<a name="ota-updates-esp32-ble-step1"></a>

1. [Criação de um bucket do Amazon S3 para armazenar a atualização](dg-ota-bucket.md) com o versionamento ativado para armazenar as imagens do firmware.

1. [Criação de uma função de serviço de atualização de OTA](create-service-role.md) e adicione as políticas gerenciadas a seguir ao perfil:
   + AWSIotRegistro
   + AWSIotRuleActions
   + AWSIotThingsRegistration
   + AWSFreeRTOSOTAUpdate

1. [Criar um usuário](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html) que possa realizar atualizações OTA. Esse usuário pode assinar e implantar atualizações de firmware em dispositivos IoT na conta e tem acesso para fazer atualizações OTA em todos os dispositivos. O acesso deve ser limitado a entidades confiáveis.

1. Siga as etapas em [Criação de uma política de usuário de OTA](create-ota-user-policy.md) e anexe-o ao seu usuário.

## Etapa 2: criar o certificado de assinatura de código
<a name="ota-updates-esp32-ble-step2"></a>

1. Crie um bucket do Amazon S3 com o versionamento habilitado para armazenar as imagens de firmware.

1. Crie um certificado de assinatura de código que possa ser usado para assinar o firmware. Observe o nome do recurso da Amazon (ARN) do certificado quando o certificado for importado.

   ```
   aws acm import-certificate --profile=ota-update-user --certificate file://ecdsasigner.crt --private-key file://ecdsasigner.key
   ```

   Resultado do exemplo:

   ```
   {
   "CertificateArn": "arn:aws:acm:us-east-1:<account>:certificate/<certid>"
   }
   ```

   Você usará o ARN mais tarde para criar um perfil de assinatura. Se desejar, você pode criar o perfil agora com o seguinte comando:

   ```
   aws signer put-signing-profile --profile=ota-update-user --profile-name esp32Profile --signing-material certificateArn=arn:aws:acm:us-east-1:account:certificate/certid --platform AmazonFreeRTOS-Default --signing-parameters certname=/cert.pem
   ```

   Resultado do exemplo:

   ```
   {
   "arn": "arn:aws:signer::<account>:/signing-profiles/esp32Profile"
   }
   ```

## Etapa 3: configuração da autenticação do Amazon Cognito
<a name="ota-updates-esp32-ble-step3"></a>

**Crie uma AWS IoT política**

1. Faça login no [console do AWS IoT](https://console.aws.amazon.com/iot/).

1. No canto superior direito do console, escolha **Minha conta**. Em **Configurações da conta**, anote o ID de conta de 12 dígitos.

1. No painel de navegação à esquerda, escolha **Configurações**. Em **Endpoint de dados do dispositivo**, anote o valor do endpoint. O endpoint deve ser algo com `xxxxxxxxxxxxxx.iot.us-west-2.amazonaws.com`. Neste exemplo, a região da AWS é definida como "us-west-2".

1. No painel de navegação, escolha **Segurança**, **Políticas** e **Criar**. Se você não tiver nenhuma política em sua conta, verá a mensagem "Você ainda não tem nenhuma política" e poderá escolher **Criar uma política**.

1. Insira um nome para a sua política, por exemplo, "esp32\$1mqtt\$1proxy\$1iot\$1policy".

1. Na seção **Add statements (Adicionar instruções)**, escolha **Advanced mode (Modo avançado)**. Copie e cole o seguinte JSON na janela do editor de política. Substitua `aws-account-id` pelo ID da sua conta e `aws-region` pela sua região (por exemplo, "us-west-2").

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iot:Connect",
               "Resource": "arn:aws:iot:us-east-1:123456789012:*"
           },
           {
               "Effect": "Allow",
               "Action": "iot:Publish",
               "Resource": "arn:aws:iot:us-east-1:123456789012:*"
           },
           {
               "Effect": "Allow",
               "Action": "iot:Subscribe",
               "Resource": "arn:aws:iot:us-east-1:123456789012:*"
           },
           {
               "Effect": "Allow",
               "Action": "iot:Receive",
               "Resource": "arn:aws:iot:us-east-1:123456789012:*"
           }
       ]
   }
   ```

------

1. Escolha **Criar**.

**Crie qualquer AWS IoT coisa**

1. Faça login no [console do AWS IoT](https://console.aws.amazon.com/iot/).

1. No painel de navegação à esquerda, escolha **Manage (Gerenciar)** e, depois, **Things (Coisas)**.

1. No canto superior direito, escolha **Criar**. Se você não tiver coisas registradas em sua conta, a mensagem "Você ainda não tem coisas registradas" é exibida e você poderá escolher **Registrar uma coisa**.

1. Na página **Criando AWS IoT coisas**, escolha **Criar uma única coisa**.

1. Na página **Adicionar o dispositivo ao registro de coisa**, insira um nome para a coisa (por exemplo, "esp32-ble"). São permitidos somente caracteres alfanuméricos, hífen (-) e sublinhados (\$1). Escolha **Próximo**.

1. Na página **Adicionar um certificado para a coisa**, em **Ignorar certificado e criar coisa**, escolha **Criar uma coisa sem certificado**. Como usamos a aplicação móvel proxy BLE que usa uma credencial do Amazon Cognito para autenticação e autorização, certificado de dispositivo é necessário.

**Criação de um cliente de aplicação do Amazon Cognito**

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/users/).

1. No banner de navegação superior direito, escolha **Criar um grupo de usuários**.

1. Insira o nome do grupo (por exemplo, "esp32\$1mqtt\$1proxy\$1user\$1pool").

1. Escolha **Revisar padrões**.

1. Em **Clientes de aplicação**, escolha **Adicionar cliente de aplicação** e, em seguida, escolha **Adicionar um cliente de aplicação**. 

1. Insira um nome de cliente de aplicação (por exemplo, "mqtt\$1app\$1client").

1. Verifique se a opção **Gerar segredo do cliente** está selecionada.

1. Escolha **Criar cliente da aplicação**.

1. Escolha **Return to pool details** (Retornar aos detalhes do grupo).

1. Na página **Revisar** do grupo de usuários, selecione **Criar grupo**. Você receberá uma mensagem dizendo: "O grupo de usuários foi criado com êxito". Anote o ID do grupo.

1. No painel de navegação à esquerda, escolha **Clientes de aplicação**.

1. Escolha **Mostrar detalhes**. Anote o ID e o segredo do cliente de aplicação.

**Como criar um banco de identidades do Amazon Cognito**

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/federated).

1. Escolha **Criar novo banco de identidades**.

1. Insira um nome para o banco de identidades (por exemplo, "mqtt\$1proxy\$1identity\$1pool").

1. Expanda os **Provedores de autenticação**.

1. Escolha a guia **Cognito**.

1. Insira o ID do grupo de usuários e do cliente de aplicação que você anotou nas etapas anteriores.

1. Selecione **Criar grupo**.

1. Na próxima página, para criar os perfis para identidades autenticadas e não autenticadas , escolha **Permitir**.

1. Anote o ID do banco de identidades, que está no formato `us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`. 

**Anexar uma política do IAM à identidade autenticada**

1. Abra o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/federated).

1. Selecione o banco de identidades que você acabou de criar (por exemplo, "mqtt\$1proxy\$1identity\$1pool").

1. Escolha **Edit identity pool** (Editar grupo de identidades).

1. Anote o perfil do IAM atribuído ao perfil autenticada (por exemplo, "Cognito\$1MQTT\$1Proxy\$1Identity\$1PoolAuth\$1Role").

1. Abra o [console do IAM](https://console.aws.amazon.com/iam/home).

1. No painel de navegação, escolha **Perfis**.

1. Pesquise o perfil atribuído (por exemplo, "Cognito\$1MQTT\$1Proxy\$1Identity\$1PoolAuth\$1Role") e selecione-o.

1. Escolha **Adicionar política em linha** e, em seguida, **JSON**.

1. Insira a seguinte política:

------
#### [ JSON ]

****  

   ```
   {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
          {
             "Effect": "Allow",
             "Action": [
                "iot:AttachPolicy",
                "iot:AttachPrincipalPolicy",
                "iot:Connect",
                "iot:Publish",
                "iot:Subscribe"
             ],
             "Resource": "*"
          }]
       }
   ```

------

1. Escolha **Revisar política**.

1. Insira um nome de política (por exemplo, "mqttProxyCognitoPolítica”).

1. Selecione **Criar política**.

## Etapa 4: configurar o Amazon FreeRTOS
<a name="ota-updates-esp32-ble-step4"></a>

1. [Baixe a versão mais recente do código do Amazon FreeRTOS no repositório do FreeRTOS. GitHub ](https://github.com/aws/amazon-freertos)

1. Para habilitar a demonstração da atualização OTA, siga as etapas em [Começando com o Espressif ESP32 - DevKit C e o ESP-WROVER-KIT](getting_started_espressif.md). 

1. Faça essas modificações adicionais nos seguintes arquivos: 

   1. Abra `vendors/espressif/boards/esp32/aws_demos/config_files/aws_demo_config.h` e defina `CONFIG_OTA_UPDATE_DEMO_ENABLED`.

   1. Abra `vendors/espressif/boards/esp32/aws_demos/common/config_files/aws_demo_config.h` e mude `democonfigNETWORK_TYPES` para `AWSIOT_NETWORK_TYPE_BLE`.

   1. Abra `demos/include/aws_clientcredential.h` e insira o URL do endpoint para `clientcredentialMQTT_BROKER_ENDPOINT`.

      Insira o nome do item para `clientcredentialIOT_THING_NAME` (por exemplo, "esp32-ble"). Os certificados não precisam ser adicionados quando você usa as credenciais do Amazon Cognito.

   1. Abra `vendors/espressif/boards/esp32/aws_demos/config_files/aws_iot_network_config.h`, altere `configSUPPORTED_NETWORKS` e `configENABLED_NETWORKS` para incluir somente `AWSIOT_NETWORK_TYPE_BLE`.

   1. Abra o arquivo `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` e insira seu certificado.

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

   A aplicação deve iniciar e imprimir a versão de demonstração:

   ```
   11 13498 [iot_thread] [INFO ][DEMO][134980] Successfully initialized the demo. Network type for the demo: 2
   12 13498 [iot_thread] [INFO ][MQTT][134980] MQTT library successfully initialized.
   13 13498 [iot_thread] OTA demo version 0.9.20
   14 13498 [iot_thread] Creating MQTT Client...
   ```

## Etapa 5: configurar uma aplicação para Android
<a name="ota-updates-esp32-ble-step5"></a>

1. Baixe o SDK Bluetooth Low Energy para Android e um aplicativo de amostra do repositório [amazon-freertos-ble-android GitHub -sdk](https://github.com/aws/amazon-freertos-ble-android-sdk).

1. Abra o arquivo `app/src/main/res/raw/awsconfiguration.json` e preencha o ID do pool, a região e AppClientSecret use as instruções no exemplo de JSON a seguir. AppClientId

   ```
   {
     "UserAgent": "MobileHub/1.0",
     "Version": "1.0",
     "CredentialsProvider": {
       "CognitoIdentity": {
         "Default": {
           "PoolId": "Cognito->Manage Identity Pools->Federated Identities->mqtt_proxy_identity_pool->Edit Identity Pool->Identity Pool ID",
           "Region": "Your region (for example us-east-1)"
         }
       }
     },
   
     "IdentityManager": {
       "Default": {}
     },
   
     "CognitoUserPool": {
       "Default": {
         "PoolId": "Cognito-> Manage User Pools -> esp32_mqtt_proxy_user_pool -> General Settings -> PoolId",
         "AppClientId": "Cognito-> Manage User Pools -> esp32_mqtt_proxy_user_pool -> General Settings -> App clients ->Show Details",
         "AppClientSecret": "Cognito-> Manage User Pools -> esp32_mqtt_proxy_user_pool -> General Settings -> App clients ->Show Details",
         "Region": "Your region (for example us-east-1)"
       }
     }
   }
   ```

1. Abra `app/src/main/java/software/amazon/freertos/DemoConstants.java` e insira o nome da política que você criou anteriormente (por exemplo,*esp32\$1mqtt\$1proxy\$1iot\$1policy*) e também a Região (por exemplo,*us-east-1*).

1. Compilar e instalar a aplicação de demonstração.

   1. No Android Studio, escolha **Compilar** e, em seguida, **aplicação Make Module**.

   1. Selecione **Executar** > **Executar aplicação**. Você pode acessar o painel da janela do Logcat no Android Studio para monitorar as mensagens de log.

   1. No dispositivo Android, crie uma conta na tela de login.

   1. Criar um usuário. Se já existe um usuário, insira as credenciais.

   1. Permita que a demonstração do Amazon FreeRTOS acesse a localização do dispositivo.

   1. Verificar dispositivos Bluetooth Low Energy.

   1. Mova o controle deslizante do dispositivo encontrado para **Ativado.**

   1. Pressione **y** no console de depuração da porta serial para o. ESP32

   1. Escolha **Emparelhar e conectar**.

1. O link **Mais...** ficará ativo depois que a conexão for estabelecida. O estado da conexão deverá mudar para "BLE\$1CONNECTED" no logcat do dispositivo Android quando a conexão for concluída:

   ```
   2019-06-06 20:11:32.160 23484-23497/software.amazon.freertos.demo I/FRD: BLE connection state changed: 0; new state: BLE_CONNECTED
   ```

1. Antes que as mensagens possam ser transmitidas, o dispositivo Amazon FreeRTOS e o dispositivo Android negociam a MTU. A seguinte saída deverá ser mostrada no logcat:

   ```
   2019-06-06 20:11:46.720 23484-23497/software.amazon.freertos.demo I/FRD: onMTUChanged : 512 status: Success
   ```

1. O dispositivo se conecta à aplicação e começa a enviar mensagens MQTT usando o proxy MQTT. Para confirmar se o dispositivo pode se comunicar, verifique se o valor dos dados característicos do MQTT\$1CONTROL mudam para 01:

   ```
   2019-06-06 20:12:28.752 23484-23496/software.amazon.freertos.demo D/FRD: <-<-<- Writing to characteristic: MQTT_CONTROL with data: 01
   2019-06-06 20:12:28.839 23484-23496/software.amazon.freertos.demo D/FRD: onCharacteristicWrite for: MQTT_CONTROL; status: Success; value: 01
   ```

1. Quando os dispositivos estiverem emparelhados, você verá um aviso no ESP32 console. Para ativar o BLE, pressione **S**. A demonstração não funcionará até que você realize essa etapa. 

   ```
   E (135538) BT_GATT: GATT_INSUF_AUTHENTICATION: MITM Required
   W (135638) BT_L2CAP: l2cble_start_conn_update, the last connection update command still pending.
   E (135908) BT_SMP: Value for numeric comparison = 391840
   15 13588 [InputTask] Numeric comparison:391840
   16 13589 [InputTask] Press 'y' to confirm
   17 14078 [InputTask] Key accepted
   W (146348) BT_SMP: FOR LE SC LTK IS USED INSTEAD OF STK
   18 16298 [iot_thread] Connecting to broker...
   19 16298 [iot_thread] [INFO ][MQTT][162980] Establishing new MQTT connection.
   20 16298 [iot_thread] [INFO ][MQTT][162980] (MQTT connection 0x3ffd5754, CONNECT operation 0x3ffd586c) Waiting for operation completion.
   21 16446 [iot_thread] [INFO ][MQTT][164450] (MQTT connection 0x3ffd5754, CONNECT operation 0x3ffd586c) Wait complete with result SUCCESS.
   22 16446 [iot_thread] [INFO ][MQTT][164460] New MQTT connection 0x3ffc0ccc established.
   23 16446 [iot_thread] Connected to broker.
   ```

## Etapa 6: executar o script de atualização OTA
<a name="ota-updates-esp32-ble-step6"></a>

1. Para instalar os pré-requisitos, execute os seguintes comandos:

   ```
   pip3 install boto3
   ```

   ```
   pip3 install pathlib
   ```

1. Incremente a versão da aplicação FreeRTOS em `demos/include/aws_application_version.h`.

1. Compile um arquivo.bin novo.

1. Baixe o script python [ start\$1ota.py](https://github.com/aws-samples/amazon-freertos-ota-scripts/blob/master/scripts/start_ota.py). Para visualizar o conteúdo da ajuda do script, execute o seguinte comando em uma janela de terminal:

   ```
   python3 start_ota.py -h
   ```

   Você deve ver algo parecido com o exemplo a seguir:

   ```
   usage: start_ota.py [-h] --profile PROFILE [--region REGION]
                       [--account ACCOUNT] [--devicetype DEVICETYPE] --name NAME
                       --role ROLE --s3bucket S3BUCKET --otasigningprofile
                       OTASIGNINGPROFILE --signingcertificateid
                       SIGNINGCERTIFICATEID [--codelocation CODELOCATION]
   Script to start OTA update
   optional arguments:
   -h, --help            show this help message and exit
   --profile PROFILE     Profile name created using aws configure
   --region REGION       Region
   --account ACCOUNT     Account ID
   --devicetype DEVICETYPE thing|group
   --name NAME           Name of thing/group
   --role ROLE           Role for OTA updates
   --s3bucket S3BUCKET   S3 bucket to store firmware updates
   --otasigningprofile OTASIGNINGPROFILE
                         Signing profile to be created or used
   --signingcertificateid SIGNINGCERTIFICATEID
                         certificate id (not arn) to be used
   --codelocation CODELOCATION
                         base folder location (can be relative)
   ```

1. Se você usou o CloudFormation modelo fornecido para criar recursos, execute o seguinte comando:

   ```
   python3 start_ota_stream.py --profile otausercf --name esp32-ble --role ota_ble_iot_role-sample --s3bucket afr-ble-ota-update-bucket-sample --otasigningprofile abcd --signingcertificateid certificateid
   ```

   Você deve ver o início da atualização no console de ESP32 depuração: 

   ```
   38 2462 [OTA Task] [prvParseJobDoc] Job was accepted. Attempting to start transfer.
   ---
   49 2867 [OTA Task] [prvIngestDataBlock] Received file block 1, size 1024
   50 2867 [OTA Task] [prvIngestDataBlock] Remaining: 1290
   51 2894 [OTA Task] [prvIngestDataBlock] Received file block 2, size 1024
   52 2894 [OTA Task] [prvIngestDataBlock] Remaining: 1289
   53 2921 [OTA Task] [prvIngestDataBlock] Received file block 3, size 1024
   54 2921 [OTA Task] [prvIngestDataBlock] Remaining: 1288
   55 2952 [OTA Task] [prvIngestDataBlock] Received file block 4, size 1024
   56 2953 [OTA Task] [prvIngestDataBlock] Remaining: 1287
   57 2959 [iot_thread] State: Active  Received: 5   Queued: 5   Processed: 5   Dropped: 0
   ```

1. Quando a atualização do OTA for concluída, o dispositivo será reiniciado conforme exigido pelo processo de atualização OTA. Em seguida, ele tenta se conectar usando o firmware atualizado. Se a atualização for bem-sucedida, o firmware atualizado será marcado como ativo e você deverá ver a versão atualizada no console:

   ```
   13 13498 [iot_thread] OTA demo version 0.9.21
   ```