

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Over-the-air actualiza la aplicación de demostración
<a name="ota-demo"></a>

Freertos incluye una aplicación de demostración que demuestra la funcionalidad de la biblioteca over-the-air (OTA). La aplicación de demostración de OTA se encuentra en el archivo `freertos/demos/ota/ota_demo_core_mqtt/ota_demo_core_mqtt.c` o `freertos/demos/ota/ota_demo_core_http/ota_demo_core_http.c`.

La aplicación de demostración de OTA hace lo siguiente:

1. Inicializa la pila de red de FreeRTOS y el grupo de búfer de MQTT.

1. Crea una tarea para probar la biblioteca de OTA con `vRunOTAUpdateDemo()`.

1. Crea un cliente de MQTT mediante `_establishMqttConnection()`.

1. Se conecta al broker de AWS IoT MQTT mediante una llamada de desconexión de MQTT `IotMqtt_Connect()` y la registra:. `prvNetworkDisconnectCallback`

1. Llama a `OTA_AgentInit()` para crear la tarea de OTA y registra una devolución de llamada que se utilizará cuando se haya completado la tarea de OTA.

1. Reutiliza la conexión MQTT con `xOTAConnectionCtx.pvControlClient = _mqttConnection;`

1. Si MQTT se desconecta, la aplicación suspende el agente OTA, intenta volver a conectarse utilizando un retroceso exponencial con fluctuación y, a continuación, reanuda el agente OTA.

Antes de poder utilizar las actualizaciones OTA, complete todos los requisitos previos de [Actualizaciones gratuitas de FreRTOS Over-the-Air](freertos-ota-dev.md)

Después de completar la configuración para las actualizaciones de OTA, descargue, compile, instale y ejecute la demostración de OTA de FreeRTOS en una plataforma que admita la funcionalidad de OTA. Las instrucciones de demostración específicas de dispositivo están disponibles para los siguientes dispositivos calificados por FreeRTOS:
+ [El SF-LAUNCHXL de Texas Instruments CC3220](download-ota-ti.md)
+ [Microchip Curiosity MZEF PIC32](download-ota-mchip.md)
+ [Espressif ESP32](download-ota-esp.md)
+ [Descargue, compile, flashee y ejecute la demostración OTA de FreeRTOS en el Renesas N RX65](download-rx65n-ota.md)

Después de crear, actualizar y ejecutar la aplicación de demostración de OTA en su dispositivo, puede utilizar la AWS IoT consola o la AWS CLI para crear un trabajo de actualización de OTA. Una vez que haya creado un trabajo de actualización de OTA, conecte un emulador de terminal para ver el progreso de la actualización de OTA. Anote los errores generados durante el proceso.

Un trabajo de actualización de OTA correcto muestra una salida similar a la siguiente. Se han eliminado algunas líneas de la lista en este ejemplo para abreviar.

```
    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 configuraciones de demostración
<a name="ota-demo-specific-config"></a>

Las configuraciones de demostración de OTA son opciones de configuración específicas de la demostración que se incluyen en `aws_iot_ota_update_demo.c`. Estas configuraciones son diferentes de las configuraciones de la biblioteca OTA que se proporcionan en el archivo de configuración de la biblioteca OTA. 

**OTA\$1DEMO\$1KEEP\$1ALIVE\$1SECONDS**  
Para el cliente MQTT, esta configuración es el intervalo de tiempo máximo que puede transcurrir entre la finalización de la transmisión de un paquete de control y el inicio del envío del siguiente. En ausencia de un paquete de control, se envía un PINGREQ. El agente debe desconectar un cliente que no envíe un mensaje o un paquete PINGREQ durante una vez y media de este intervalo de mantenimiento activo. Esta configuración debe ajustarse en función de los requisitos de la aplicación.

**OTA\$1DEMO\$1CONN\$1RETRY\$1BASE\$1INTERVAL\$1SECONDS**  
El intervalo base, en segundos, que transcurre antes de volver a intentar la conexión de red. La demostración de OTA intentará volver a conectarse después de este intervalo de tiempo base. El intervalo se duplica después de cada intento fallido. También se añade al intervalo un retraso aleatorio, hasta un máximo de este retraso base.

**OTA\$1DEMO\$1CONN\$1RETRY\$1MAX\$1INTERVAL\$1SECONDS**  
El intervalo máximo, en segundos, que transcurre antes de volver a intentar la conexión de red. El retraso de reconexión se duplica en cada intento fallido, pero solo puede llegar hasta este valor máximo, más una fluctuación del mismo intervalo.

# Descargue, cree, actualice y ejecute la demostración OTA de FreeRTOS en el SF-LAUNCHXL de Texas Instruments CC3220
<a name="download-ota-ti"></a>

**importante**  <a name="deprecation-message"></a>
Esta integración de referencia está alojada en el repositorio de Amazon-FreeRTOS, que está en desuso. Recomendamos [empezar por aquí](freertos-getting-started-modular.md) al crear un nuevo proyecto. Si ya tiene un proyecto FreeRTOS existente basado en el repositorio Amazon FreeRTOS, ahora obsoleto, consulte [Guía de migración del repositorio Github de Amazon-FreeRTOS](github-repo-migration.md).<a name="download-demo"></a>

**Descarga de FreeRTOS y el código de demostración de OTA**
+ Puede descargar el código fuente en el GitHub sitio en [https://github.com/FreeRTOS/FreeRTOS](https://github.com/FreeRTOS/FreeRTOS). <a name="build-demo"></a>

**Creación de la aplicación de demostración**

1. Sigue las instrucciones [Introducción a FreeRTOS](freertos-getting-started.md) para importar el `aws_demos` proyecto a Code Composer Studio, configurar tu AWS IoT terminal, tu SSID y contraseña de Wi-Fi, y una clave privada y un certificado para tu 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` y defina `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` o `CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`.

1. Compile la solución y asegúrese de que se compila sin errores.

1. Inicie un emulador de terminal y utilice los siguientes ajustes para conectarse a la placa:
   + Velocidad en baudios: 115 200
   + Bits de datos: 8
   + Paridad: ninguna
   + Bits de parada: 1

1. Ejecute el proyecto en la placa para confirmar que puede conectarse al Wi-Fi y al agente de mensajes MQTT de AWS IoT .

Cuando se ejecuta, el emulador de terminal debe mostrar texto como el siguiente:

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

# Descarga, compila, actualiza y ejecuta la demostración OTA de FreeRTOS en el Microchip Curiosity MZEF PIC32
<a name="download-ota-mchip"></a>

**importante**  <a name="deprecation-message"></a>
Esta integración de referencia está alojada en el repositorio de Amazon-FreeRTOS, que está en desuso. Recomendamos [empezar por aquí](freertos-getting-started-modular.md) al crear un nuevo proyecto. Si ya tiene un proyecto FreeRTOS existente basado en el repositorio Amazon FreeRTOS, ahora obsoleto, consulte [Guía de migración del repositorio Github de Amazon-FreeRTOS](github-repo-migration.md).

**nota**  
De acuerdo con Microchip, eliminaremos el Curiosity PIC32 MZEF (DM320104) de la rama principal del repositorio de integración de referencias de FreeRTOS y ya no lo incluiremos en las nuevas versiones. Microchip ha publicado un [aviso oficial en el que indica](https://www.microchip.com/DevelopmentTools/ProductDetails/PartNO/DM320104) que el PIC32 MZEF (DM320104) ya no se recomienda para los nuevos diseños. Aún se puede acceder a los proyectos y al código fuente de PIC32 MZEF a través de las etiquetas de las versiones anteriores. Microchip recomienda a los clientes que utilicen la [placa de desarrollo Curiosity PIC32 MZ-EF-2.0](https://devices.amazonaws.com/detail/a3G0h0000077I69EAE/Curiosity-PIC32MZ-EF-2-0-Development-Board) () para los nuevos diseños. DM320209 La PIC32 MZv1 plataforma todavía se encuentra en la versión [202012.00 del repositorio de integración de referencias de](https://github.com/aws/amazon-freertos/tree/202012.00) FreeRTOS. Sin embargo, la plataforma ya no es compatible con la versión [202107.00](https://github.com/aws/amazon-freertos/tree/202107.00) de la referencia de FreeRTOS.<a name="mch-dowload-demo"></a>

**Descarga del código de demostración de OTA de FreeRTOS**
+ Puede descargar el código fuente en el GitHub sitio en [https://github.com/FreeRTOS/FreeRTOS](https://github.com/FreeRTOS/FreeRTOS). <a name="mch-build-demo"></a>

**Creación de la aplicación de demostración de actualización OTA**

1. Sigue las instrucciones que se indican [Introducción a FreeRTOS](freertos-getting-started.md) para importar el `aws_demos` proyecto al IDE de MPLAB X, configurar tu AWS IoT terminal, tu SSID y contraseña de Wi-Fi, y una clave privada y un certificado para tu placa.

1. Abra el archivo `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` e introduzca su certificado.

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

1. Pegue el contenido de su certificado de firma de código aquí:

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

   Siguiendo el mismo formato que `aws_clientcredential_keys.h` --, cada línea debe acabar con el carácter de línea nueva ('\$1n') y estar entrecomillado.

   Por ejemplo, el certificado debe tener un aspecto similar al siguiente:

   ```
   "-----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 [Python 3](https://www.python.org/downloads/) o superior.

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

1. Copie el certificado de firma de código en formato .pem en la ruta `demos/ota/bootloader/utility/codesigner_cert_utility/`. Cambie el nombre del archivo del certificado a `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` y defina `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` o `CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`.

1. Compile la solución y asegúrese de que se compila sin errores.

1. Inicie un emulador de terminal y utilice los siguientes ajustes para conectarse a la placa:
   + Velocidad en baudios: 115 200
   + Bits de datos: 8
   + Paridad: ninguna
   + Bits de parada: 1

1. Desconecta el depurador de tu placa y ejecuta el proyecto en tu placa para confirmar que se puede conectar a una red Wi-Fi y al intermediario de mensajes MQTT. AWS IoT 

Cuando ejecuta el proyecto, MPLAB X IDE debe abrir una ventana de salida. Asegúrese de que la **ICD4**pestaña esté seleccionada. Debería ver la siguiente salida.

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

El emulador de terminal debe mostrar texto como el siguiente:

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

Este resultado muestra que el Microchip Curiosity PIC32 MZEF puede conectarse a los temas de MQTT necesarios para las actualizaciones de OTA AWS IoT y suscribirse a ellos. Se esperan mensajes `Missing job parameter` porque no hay trabajos de actualización OTA pendientes.

# Descarga, compila, actualiza y ejecuta la demostración OTA de FreeRTOS en el Espressif ESP32
<a name="download-ota-esp"></a>

**importante**  <a name="deprecation-message"></a>
Esta integración de referencia está alojada en el repositorio de Amazon-FreeRTOS, que está en desuso. Recomendamos [empezar por aquí](freertos-getting-started-modular.md) al crear un nuevo proyecto. Si ya tiene un proyecto FreeRTOS existente basado en el repositorio Amazon FreeRTOS, ahora obsoleto, consulte [Guía de migración del repositorio Github de Amazon-FreeRTOS](github-repo-migration.md).

1. Descargue la fuente de FreeRTOS de. [GitHub](https://github.com/aws/amazon-freertos) Consulte el archivo [README.md](https://github.com/aws/amazon-freertos/blob/main/README.md) para obtener instrucciones. Cree un proyecto en su IDE que incluya todos los orígenes y bibliotecas necesarios.

1. Siga las instrucciones de [Introducción a Espressif](https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html) para configurar la cadena de herramientas basadas en GCC necesarias.

1. Abra `freertos/vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h`, comente `#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED` y defina `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` o `CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`.

1. Compile el proyecto de demostración ejecutando `make` en el directorio `vendors/espressif/boards/esp32/aws_demos`. Puede instalar el programa de demostración y verificar su salida ejecutando `make flash monitor`, tal y como se describe en [Introducción a Espressif](https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html).

1. Antes de ejecutar la demostración de actualización OTA:
   + Abra `freertos/vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h`, comente `#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED` y defina `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` o `CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`.
   + Abra `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` y copie el certificado de firma de código SHA-256/ECDSA en:

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

# Descargue, compile, flashee y ejecute la demostración OTA de FreeRTOS en el Renesas N RX65
<a name="download-rx65n-ota"></a>

**importante**  <a name="deprecation-message"></a>
Esta integración de referencia está alojada en el repositorio de Amazon-FreeRTOS, que está en desuso. Recomendamos [empezar por aquí](freertos-getting-started-modular.md) al crear un nuevo proyecto. Si ya tiene un proyecto FreeRTOS existente basado en el repositorio Amazon FreeRTOS, ahora obsoleto, consulte [Guía de migración del repositorio Github de Amazon-FreeRTOS](github-repo-migration.md).

Este capítulo le muestra cómo descargar, compilar, flashear y ejecutar las aplicaciones de demostración de FreeRTOS OTA en el Renesas N. RX65

**Topics**
+ [Configuración del entorno operativo](#download-rx65n-ota-environment)
+ [Configura tus AWS recursos](#download-rx65n-ota-setup)
+ [Importación, configuración del archivo de encabezado y creación de aws\$1demos y boot\$1loader](#download-rx65n-ota-import-configure)

## Configuración del entorno operativo
<a name="download-rx65n-ota-environment"></a>

Para los procedimientos de esta sección se requieren los siguientes entornos:
+ **IDE**: e2 studio 7.8.0, e2 studio 2020-07
+ **Cadenas de herramientas**: CCRX Compiler v3.0.1
+ **Dispositivos de destino**: N-2MB RSKRX65
+ **Depuradores**: emulador E2, E2 Lite
+ **Software**: Renesas Flash Programmer, Renesas Secure Flash Programmer.exe, Tera Term

**Configuración del hardware**

1. Conecte el emulador E 2 Lite y el puerto serie USB a la placa RX65 N y al PC.

1. Conecte la fuente de alimentación a la RX65 N.

## Configura tus AWS recursos
<a name="download-rx65n-ota-setup"></a>

1. Para ejecutar las demostraciones de FreeRTOS, debe tener una AWS cuenta con un usuario de IAM que tenga permiso para acceder a los servicios. AWS IoT Si aún no lo ha hecho, siga los pasos que se indican en [Configurar tu AWS cuenta y tus permisos](freertos-prereqs.md#freertos-account-and-permissions).

1. Para configurar las actualizaciones de OTA, siga los pasos que se indican en [Requisitos previos de actualización OTA](ota-prereqs.md). En concreto, siga los pasos que se indican en [Requisitos previos para las actualizaciones de OTA mediante MQTT](ota-mqtt-freertos.md).

1. Abra la [consola de AWS IoT](https://console.aws.amazon.com/iot/home).

1. En el panel de navegación izquierdo, elija **Administrar** y, a continuación, **Objetos**.

   Un objeto es una representación de un dispositivo o de una entidad lógica de AWS IoT. Puede ser un dispositivo físico o un sensor (por ejemplo, una bombilla o un interruptor en la pared). También puede ser una entidad lógica, como una instancia de una aplicación o entidad física, que no se conecta AWS IoT, pero que está relacionada con los dispositivos que sí lo hacen (por ejemplo, un automóvil con sensores de motor o un panel de control). AWS IoT proporciona un registro de cosas que le ayuda a administrarlas.

   1. Elija **Crear** y después **Crear un solo objeto**.

   1. Introduzca un **Nombre** para el objeto y, a continuación, seleccione **Siguiente**.

   1. Elija **Create certificate**.

   1. Descargue los tres archivos que se crean y, a continuación, seleccione **Activar**. 

   1. Elija **Attach a policy (Asociar una política)**.  
![\[pantalla de consola que muestra los archivos que se van a descargar\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/download-these-files-rx65n.png)

   1. Seleccione la política que creó en [Política de dispositivos](ota-mqtt-freertos.md#ota-mqtt-freertos-device-policy).

      Cada dispositivo que reciba una actualización OTA mediante MQTT debe estar registrado AWS IoT y tener una política adjunta como la que aparece en la lista. Puede encontrar más información acerca de los elementos de los objetos `"Resource"` y `"Action"` en las [Acciones de la política principal de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html) y en los [recursos de acciones principales de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-action-resources.html).

**Notas**
      + Los `iot:Connect` permisos permiten que el dispositivo se conecte a AWS IoT través de MQTT.
      + Los permisos `iot:Subscribe` y `iot:Publish` en los temas de trabajos de AWS IoT (`.../jobs/*`) permiten que el dispositivo conectado reciba notificaciones de trabajo y documentos de trabajo, y publique el estado de finalización de una ejecución de trabajo.
      + Los `iot:Publish` permisos `iot:Subscribe` y relacionados con los temas de las transmisiones AWS IoT OTA (`.../streams/*`) permiten al dispositivo conectado obtener datos de actualización de OTA. AWS IoT Estos permisos son necesarios para realizar actualizaciones de firmware sobre MQTT.
      + Los `iot:Receive` permisos permiten AWS IoT Core publicar mensajes sobre esos temas en el dispositivo conectado. Este permiso se verifica en cada entrega de un mensaje MQTT. Puede utilizar este permiso para revocar el acceso a los clientes que están actualmente suscritos a un tema.

1. Para crear un perfil de firma de código y registrar un certificado de firma de código en él. AWS

   1. Para crear las claves y la certificación, consulte la sección 7.3 «Generación de pares de SHA256 claves ECDSA con OpenSSL» en la Política de diseño de actualización del firmware de la MCU de [Renesas](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy).

   1. Abra la [consola de AWS IoT](https://console.aws.amazon.com/iot/home). En el panel de navegación izquierdo, elija **Administrar** y, a continuación, **Trabajos**. Seleccione **Crear un trabajo** y, a continuación, **Crear trabajo de actualiz. de OTA**. 

   1. En **Seleccionar dispositivos para actualizar**, elija **Seleccionar** y, a continuación, elija el objeto que creó anteriormente. Seleccione **Siguiente**. 

   1. En la página **Crear un trabajo de actualización OTA de FreeRTOS**, realice lo siguiente:

      1. En **Seleccionar el protocolo para la transferencia de imágenes de firmware**, elija **MQTT**. 

      1. En **Seleccionar y firmar la imagen de firmware**, elija **Firmar una nueva imagen de firmware por mí**. 

      1. En **Perfil de firma de código**, elija **Crear**.

      1. En la ventana **Crear un perfil de firma de código**, introduzca un **Nombre de perfil**. En **Plataforma de hardware de dispositivos**, seleccione **Simulador de Windows**. En **Certificado de firma de código**, elija **Importar**.

      1. Busque para seleccionar el certificado (`secp256r1.crt`), la clave privada del certificado (`secp256r1.key`) y la cadena de certificados (`ca.crt`).

      1. Introduzca el **Nombre de ruta del certificado de firma de código en el dispositivo**. A continuación, seleccione **Crear**.

1. Para conceder acceso a la firma de código, siga los pasos que se indican a continuación AWS IoT. [Conceda acceso a la firma de código para AWS IoT](code-sign-policy.md) 

Si no tienes Tera Term instalado en tu PC, puedes descargarlo desde [https://ttssh2.osdn.jp/index.html.en](https://ttssh2.osdn.jp/index.html.en) y configurarlo como se muestra aquí. Asegúrese de conectar el puerto serie USB del dispositivo al PC.

![\[Ventana de configuración del puerto serie Tera Term\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/tera-team-rx65n.png)


## Importación, configuración del archivo de encabezado y creación de aws\$1demos y boot\$1loader
<a name="download-rx65n-ota-import-configure"></a>

Para empezar, selecciona la última versión del paquete FreeRTOS, que se descargará GitHub e importará automáticamente al proyecto. De esta forma, puede centrarse en la configuración de FreeRTOS y en escribir el código de la aplicación.

1. Inicie e2 studio.

1. Elija **Archivo** y, a continuación, **Importar**.

1. Seleccione el **proyecto Renesas GitHub FreeRTOS (con bibliotecas de IoT)**.  
![\[Ventana de importación de e-squared studio\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/import-renesas-project-rx65n.png)

1. Seleccione **Buscar más versiones…** para mostrar el cuadro de diálogo de descarga.  
![\[Ventana de cuadro de diálogo de descarga de e-squared studio\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/check-more-version-rx65n.png)

1. Seleccione el paquete más reciente.  
![\[Ventana de cuadro de diálogo de descarga del módulo e-squared studio\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/choose-latest-version-rx65n.png)

1. Elija **Acepto** para aceptar el acuerdo de licencia de usuario final.  
![\[Cuadro de diálogo de EULA de e-squared studio\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/eula-rx65n.png)

1. Espere a que finalice la descarga.  
![\[Barra de progreso de descarga\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/downloading-rx65n.png)

1. Seleccione los proyectos **aws\$1demos** y **boot\$1loader** y, a continuación, seleccione **Finalizar** para importarlos.  
![\[Ventana de importación de proyectos\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/import-projects-rx65n.png)

1. Para ambos proyectos, abra las propiedades del proyecto. En el panel de navegación, elija **Editor de cadena de herramientas**.

   1. Elija la **Cadena de herramientas actual**.

   1. Elija el **Creador actual**.  
![\[Ventana de propiedades de e-squared studio\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/project-properties-rx65n.png)

1. En el panel de navegación, seleccione **Configuración**. Seleccione la pestaña **Cadena de herramientas** y, a continuación, elija la **Versión** de la cadena de herramientas.  
![\[Configuración de integración de la cadena de herramientas para la versión 3.01.00 del CCRX de Renesas, con la opción de cambiar la cadena de herramientas.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/project-properties-toolchain-rx65n.png)

   Seleccione la pestaña **Configuración de la herramienta**, expanda **Convertidor** y, a continuación, seleccione **Salida**. En la ventana principal, asegúrese de seleccionar **Archivo hexadecimal de salida** y, a continuación, elija el **Tipo de archivo de salida**.  
![\[Ventana de ajustes de configuración de C/C++ Build que muestra las opciones del compilador y el enlazador, como el archivo hexadecimal de salida, el tipo de archivo de salida, el directorio de salida y las opciones de división de archivos.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/project-properties-settings-rx65n.png)  
![\[Árbol de configuración de la interfaz con opciones para Stack Analysis, Tool Chain Editor, C/C++ General, MCU, referencias de proyectos, etc.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/project-properties-settings-2-rx65n.png)

1. En el proyecto del cargador de arranque, abra `projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h` e introduzca la clave pública. [Para obtener información sobre cómo crear una clave pública, consulte [Cómo implementar FreeRTOS OTA mediante Amazon Web Services en RX65 N](https://www.renesas.com/us/en/document/apn/rx-family-how-implement-freertos-ota-using-amazon-web-services-rx65n) y la sección 7.3 «Generación de SHA256 pares de claves ECDSA con OpenSSL» en la Política de diseño de actualizaciones de firmware del MCU de Renesa.](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)  
![\[Editor de código que muestra un archivo de cabecera en C con la definición de CODE_SIGNER_PUBLIC_KEY y una variable de clave pública de firma de código codificada en PEM.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/open-bootloader-project-rx65n.png)

   Para crear el proyecto para crear `boot_loader.mot`.

1. Abra el proyecto `aws_demos`.

   1. Abra la [consola de AWS IoT](https://console.aws.amazon.com/iot/home).

   1. En el panel de navegación izquierdo, elija **Configuración**. Anote su punto de conexión personalizado en el cuadro de texto **Punto de enlace de datos de dispositivo**.

   1. Seleccione **Administrar** y **Objetos**. Anote el nombre de la placa. AWS IoT 

   1. En el proyecto `aws_demos`, abra `demos/include/aws_clientcredential.h` y especifique los siguientes valores.

      ```
      #define clientcredentialMQTT_BROKER_ENDPOINT[] = "Your AWS IoT endpoint";
      #define clientcredentialIOT_THING_NAME "The AWS IoT thing name of your board"
      ```  
![\[Fragmento de código que muestra el nombre de la AWS IoT cosa y los ajustes de configuración del punto final del broker.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/client-credential-rx65n.png)

   1. Abra el archivo `tools/certificate_configuration/CertificateConfigurator.html`.

   1. Importe el archivo PEM del certificado y el archivo PEM de clave privada que descargó anteriormente.

   1. Elija **Generar y guardar aws\$1clientcredential\$1keys.h** y guarde el archivo en el directorio `demos/include/`.  
![\[Herramienta de configuración de certificados con campos para proporcionar los archivos PEM de certificados de cliente y clave privada desde la AWS IoT consola, y un botón para generar y guardar el archivo aws_clientcredential_keys.h.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/certificate-config-tool-rx65n.png)

   1. Abra el archivo `vendors/renesas/boards/rx65n-rsk/aws_demos/config_files/ota_demo_config.h` y especifique estos valores.

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

      Dónde `secp256r1.crt` está el valor del archivo. *your-certificate-key* Recuerde añadir “\$1” después de cada línea de la certificación. [Para obtener más información sobre la creación del `secp256r1.crt` archivo, consulte [Cómo implementar FreeRTOS OTA mediante Amazon Web Services en RX65 N](https://www.renesas.com/us/en/document/apn/rx-family-how-implement-freertos-ota-using-amazon-web-services-rx65n) y la sección 7.3 «Generación de SHA256 pares de claves ECDSA con OpenSSL» en la Política de diseño de actualizaciones de firmware del MCU de Renesas.](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)  
![\[Archivo de código fuente que muestra el código C que define una cadena constante de certificado de firma de código codificada en PEM con datos de certificado redactados.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/codesigner-cert-rx65n.png)

1. **Tarea A: Instalar la versión inicial del firmware**

   1. Abra el archivo `vendors/renesas/boards/board/aws_demos/config_files/aws_demo_config.h`, comente `#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED` y defina `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` o `CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`.

   1. Abra el archivo `demos/include/ aws_application_version.h` y configure la versión inicial del firmware en `0.9.2`.  
![\[Fragmento de código que muestra las definiciones de versión de una aplicación, incluidas las macros de los números de versión principales, secundarios y de compilación.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/firmware-version-rx65n.png)

   1. Cambie los siguientes ajustes en **Visor de sección**.  
![\[Ventana del visor de secciones que muestra las direcciones de memoria, los nombres de las secciones como SU, SI, los registros y los componentes de la interfaz, como los búferes de red, las excepciones y los botones de acción.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/section-viewer-rx65n.png)

   1. Seleccione **Crear** para crear el archivo `aws_demos.mot`.

1. Cree el archivo `userprog.mot` con el programador Secure Flash de Renesas. `userprog.mot` es una combinación de `aws_demos.mot` y `boot_loader.mot`. Puede instalar este archivo en el N-RSK para instalar el firmware inicial RX65.

   1. Descarga [ https://github.com/renesas/Amazon-FreerTOS-Tools](https://github.com/renesas/Amazon-FreeRTOS-Tools) y abre. `Renesas Secure Flash Programmer.exe`

   1. Seleccione la pestaña **Firma inicial** y, a continuación, defina los siguientes parámetros:
      + **Ruta de clave privada**: la ubicación de `secp256r1.privatekey`.
      + **Ruta del archivo del cargador de arranque**: la ubicación de `boot_loader.mot` (`projects\renesas\rx65n-rsk\e2studio\boot_loader\HardwareDebug`).
      + **Ruta del archivo**: la ubicación de `aws_demos.mot` (`projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug`).  
![\[Ventana Renesas Secure Flash Programmer con campos de MCU, verificación del firmware, número de secuencia, ruta clave AES y ruta de archivo.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/secure-flash-rx65n.png)

   1. Cree un directorio denominado `init_firmware`, genere `userprog.mot` y guárdelo en el directorio `init_firmware`. Compruebe que se haya generado correctamente.

1. Instale el firmware inicial en el N-RSK. RX65

   1. [Descargue la última versión del programador Flash de Renesas (GUI de programación) desde - .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 el archivo `vendors\renesas\rx_mcu_boards\boards\rx65n-rsk\aws_demos\flash_project\erase_from_bank\ erase.rpj` para borrar los datos del banco.

   1. Seleccione **Empezar** para borrar el banco.  
![\[La ventana del programador Flash de Renesas muestra los detalles del proyecto del microcontrolador del Grupo RX, la ruta del archivo y las opciones de operación del flash, como borrar, programar y verificar con los botones Inicio y Aceptar.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/flash-programmer-erasing-rx65n.png)

   1. Para instalar `userprog.mot`, seleccione **Buscar…**, acceda al directorio `init_firmware`, seleccione el archivo `userprog.mot` y elija **Iniciar**.  
![\[La ventana del programador Flash de Renesas muestra la configuración de la operación de borrado, incluido el microcontrolador RX Group, la opción de buscar el archivo del programa, los botones de borrado e inicio y los detalles de estado de los bloques seleccionados para borrar.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/flash-programmer-complete-rx65n.png)

1. La versión 0.9.2 (versión inicial) del firmware se instaló en su N-RSK. RX65 La placa RX65 N-RSK está ahora a la espera de las actualizaciones de OTA. Si ha abierto Tera Term en su PC, verá algo parecido a lo siguiente cuando se ejecute el firmware inicial.

   ```
   -------------------------------------------------
   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. **Tarea B: actualizar la versión del firmware**

   1. Abra el archivo `demos/include/aws_application_version.h` y aumente el valor del token `APP_VERSION_BUILD` a `0.9.3`.

   1. Vuelva a compilar el proyecto.

1. Cree el archivo `userprog.rsu` con el programador Secure Flash de Renesas para actualizar la versión de su firmware.

   1. Abra el archivo `Amazon-FreeRTOS-Tools\Renesas Secure Flash Programmer.exe`.

   1. Seleccione la pestaña **Actualice el firmware** y, a continuación, defina los siguientes parámetros:
      + **Ruta del archivo**: la ubicación del archivo `aws_demos.mot` (`projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug`).

   1. Cree un directorio llamado `update _firmware`. Genere `userprog.rsu` y guárdela en el directorio `update_firmware`. Compruebe que se haya generado correctamente.  
![\[Ventana Renesas Secure Flash Programmer con selección de MCU, tipo de verificación del firmware, número de secuencia, campo clave AES MAC e introducción de ruta de archivo para generar un firmware seguro.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/update-firmware-rx65n.png)

1. Cargue la actualización del firmware, `userproj.rsu`, en un bucket de Amazon S3 tal y como se describe en[Creación de un bucket de Amazon S3 para almacenar la actualización](dg-ota-bucket.md).   
![\[Interfaz de administración de buckets de Amazon S3 con opciones de carpetas, cargas, versiones y permisos\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/upload-firmware-rx65n.png)

1. Cree una tarea para actualizar el firmware en el RX65 N-RSK.

   AWS IoT Jobs es un servicio que notifica a uno o más dispositivos conectados una [tarea](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html) pendiente. Puede usar un trabajo para administrar una flota de dispositivos, actualizar el firmware y los certificados de seguridad de sus dispositivos o realizar tareas administrativas, como reiniciar los dispositivos y realizar diagnósticos.

   1. Inicie sesión en la [consola de AWS IoT](https://console.aws.amazon.com/iotv2/). En el panel de navegación, elija **Administrar** y, a continuación, **Trabajos**.

   1. Elija **Crear** y, a continuación, elija **Crear trabajo de actualización OTA**. Seleccione un objeto y, a continuación, elija **Siguiente**.

   1. Cree un trabajo de actualización OTA de FreeRTOS de la siguiente manera:
      + Elija **MQTT**.
      + Seleccione el perfil de firma de código que ha creado en la sección anterior.
      + Seleccione la imagen de firmware que ha cargado en un bucket de Amazon S3.
      + En **Nombre de la ruta de la imagen de firmware en el dispositivo**, introduzca **test**.
      + Elija el rol de IAM que ha creado en la sección anterior.

   1. Elija **Siguiente**.  
![\[Configuración de firma de imagen de firmware y actualización OTA con opciones para firmar el nuevo firmware, seleccionar el firmware previamente firmado, usar el firmware firmado personalizado, especificar el perfil de firma de código, el archivo de imagen del firmware, la ruta del dispositivo y la función de IAM para el trabajo de actualización de OTA.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/create-job-next-rx65n.png)

   1. Introduzca el ID y, a continuación, elija **Crear**.

1. Vuelva a abrir Tera Term para comprobar que el firmware se actualizó correctamente a la versión de demostración 0.9.3 de OTA.  
![\[El resultado de la línea de comandos muestra la inicialización y la conexión de un hilo a un intermediario.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/update-successful-rx65n.png)

1. En la AWS IoT consola, compruebe que el estado del trabajo es Correcto**.**  
![\[Descripción general del trabajo de prueba AFR OTA Demo que muestra que 1 recurso se ha realizado correctamente.\]](http://docs.aws.amazon.com/es_es/freertos/latest/userguide/images/completed-succeeded-rx65n.png)

# Tutorial: Realice actualizaciones OTA en Espressif utilizando ESP32 FreeRTOS Bluetooth Low Energy
<a name="ota-updates-esp32-ble"></a>

**importante**  <a name="deprecation-message"></a>
Esta integración de referencia está alojada en el repositorio de Amazon-FreeRTOS, que está en desuso. Recomendamos [empezar por aquí](freertos-getting-started-modular.md) al crear un nuevo proyecto. Si ya tiene un proyecto FreeRTOS existente basado en el repositorio Amazon FreeRTOS, ahora obsoleto, consulte [Guía de migración del repositorio Github de Amazon-FreeRTOS](github-repo-migration.md).

Este tutorial le muestra cómo actualizar un ESP32 microcontrolador Espressif que está conectado a un proxy Bluetooth de bajo consumo de energía MQTT en un dispositivo Android. Actualiza el dispositivo mediante tareas de actualización AWS IoT Over-the-air (OTA). El dispositivo se conecta AWS IoT mediante las credenciales de Amazon Cognito introducidas en la aplicación de demostración de Android. Un operador autorizado inicia la actualización OTA desde la nube. Cuando el dispositivo se conecta a través de la aplicación de demostración de Android, se inicia la actualización OTA y se actualiza el firmware del dispositivo. 

Las versiones 2019.06.00 Major y posteriores de FreeRTOS incluyen compatibilidad con proxy MQTT Bluetooth de bajo consumo que se puede utilizar para el aprovisionamiento de Wi-Fi y las conexiones seguras a los servicios. AWS IoT Al usar la característica Bluetooth de bajo consumo, puede crear dispositivos de bajo consumo que se pueden emparejar a un dispositivo móvil para tener conectividad sin necesidad de Wi-Fi. Los dispositivos pueden comunicarse mediante MQTT conectándose a través de Bluetooth Low Energy de Android o iOS SDKs que utilizan perfiles de perfil de acceso genérico (GAP) y atributos genéricos (GATT).

Estos son los pasos que seguiremos para permitir las actualizaciones OTA a través de Bluetooth de bajo consumo:

1. **Configurar el almacenamiento:** cree un bucket y políticas de Amazon S3 y configure un usuario que pueda realizar actualizaciones.

1. **Crear un certificado de firma de código:** cree un certificado de firma y permita al usuario firmar las actualizaciones del firmware.

1. **Configurar la autenticación de Amazon Cognito:** cree un proveedor de credenciales, un grupo de usuarios y un acceso de aplicaciones al grupo de usuarios.

1. **Configurar FreeRTOS:** configure Bluetooth de bajo consumo, las credenciales del cliente y el certificado público de firma de código.

1. **Configurar una aplicación para Android:** configure el proveedor de credenciales, el grupo de usuarios e implemente la aplicación en un dispositivo Android.

1. **Ejecutar el script de actualización OTA:** para iniciar una actualización OTA, utilice el script de actualización OTA.

Para obtener más información sobre cómo funcionan las actualizaciones, consulte [Actualizaciones gratuitas de FreRTOS Over-the-Air](freertos-ota-dev.md). Para obtener información adicional sobre cómo configurar la funcionalidad de proxy MQTT de Bluetooth de bajo consumo, consulte la publicación [Uso de Bluetooth de bajo consumo con Freertos en ESP32](https://aws.amazon.com/blogs/iot/using-bluetooth-low-energy-with-amazon-freertos-on-espressif-esp32/) Espressif de Richard Kang.

## Requisitos previos
<a name="ota-updates-esp32-ble-prereq"></a>

Para realizar los pasos de este tutorial necesitará los siguientes recursos:
+ Una placa de desarrollo. ESP32 
+ Un cable microUSB a USB A.
+ Una AWS cuenta (el nivel gratuito es suficiente).
+ Un teléfono Android con Android v 6.0 o posterior y Bluetooth versión 4.2 o posterior.

En su equipo de desarrollo necesita:
+ Espacio en disco suficiente (\$1500 Mb) para la cadena de herramientas de Xtensa y el código fuente y ejemplos de FreeRTOS.
+ Android Studio instalado.
+ La [AWS CLI](https://aws.amazon.com/cli/) instalada.
+ Python3 instalado.
+ El [kit de desarrollo de AWS software (SDK) boto3 para Python](https://github.com/boto/boto3).

En los pasos de este tutorial se supone que la cadena de herramientas de Xtensa, el código ESP-IDF y el código FreeRTOS están instalados en el directorio `/esp` de su directorio principal. Debe añadir `~/esp/xtensa-esp32-elf/bin` a la variable `$PATH`. 

## Paso 1: Configurar almacenamiento
<a name="ota-updates-esp32-ble-step1"></a>

1. [Creación de un bucket de Amazon S3 para almacenar la actualización](dg-ota-bucket.md) con el control de versiones activado para almacenar las imágenes del firmware.

1. [Crear un rol de servicio de actualizaciones OTA](create-service-role.md) y añada las siguientes políticas administradas al rol:
   + AWSIotRegistro
   + AWSIotRuleActions
   + AWSIotThingsRegistration
   + AWSFreeRTOSOTAUpdate

1. [Cree un usuario](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html) que pueda realizar actualizaciones OTA. Este usuario puede firmar e implementar actualizaciones de firmware en los dispositivos de IoT de la cuenta y tiene acceso para realizar actualizaciones OTA en todos los dispositivos. El acceso debe estar limitado a entidades de confianza.

1. Siga los pasos para [Crear una política de usuario de OTA](create-ota-user-policy.md) y asóciela a su usuario.

## Paso 2: Crear el certificado de firma de código
<a name="ota-updates-esp32-ble-step2"></a>

1. Cree un bucket de Amazon S3 con el control de versiones habilitado para almacenar las imágenes del firmware.

1. Cree un certificado de firma de código que pueda usarse para firmar el firmware. Anote el Nombre de recurso de Amazon (ARN) del certificado cuando se importe.

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

   Ejemplo de código de salida:

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

   Utilizará el ARN más adelante para crear un perfil de firma. Si lo desea, puede crear el perfil ahora con el siguiente 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
   ```

   Ejemplo de código de salida:

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

## Paso 3: Configuración de autenticación de Amazon Cognito
<a name="ota-updates-esp32-ble-step3"></a>

**Crea una AWS IoT política**

1. Inicie sesión en la [consola de AWS IoT](https://console.aws.amazon.com/iot/).

1. En la esquina superior derecha de la consola, elija **Mi cuenta**. En **Configuración de la cuenta**, anote el ID de 12 dígitos de la cuenta.

1. En el panel de navegación izquierdo, elija **Configuración**. En **Punto de enlace de datos de dispositivo**, anote el valor del punto de conexión. El punto de conexión debería ser similar a `xxxxxxxxxxxxxx.iot.us-west-2.amazonaws.com`. En este ejemplo, la región de AWS es “us-west-2”.

1. En el panel de navegación izquierdo, elija **Seguridad**, **Políticas** y, a continuación, **Crear**. Si no tiene ninguna política en su cuenta, verá el mensaje “Aún no tiene ninguna política” y podrá elegir **Crear una política**.

1. Introduzca un nombre para la política, por ejemplo, “esp32\$1mqtt\$1proxy\$1iot\$1policy”.

1. En la sección **Añadir declaraciones**, elija **Modo avanzado**. Copie y pegue la siguiente política JSON en la ventana del editor de políticas. Sustituya `aws-account-id` por su ID de cuenta de `aws-region` y por su región (por ejemplo, “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. Seleccione **Crear**.

**Crea cualquier AWS IoT cosa**

1. Inicie sesión en la [consola de AWS IoT](https://console.aws.amazon.com/iot/).

1. En el panel de navegación de la izquierda, elija **Manage (Administrar)** y, a continuación, **Things (Objetos)**.

1. En la esquina superior derecha, elija **Crear**. Si no tiene ningún objeto registrado en su cuenta, aparecerá el mensaje “Aún no tiene ningún objeto” y podrá seleccionar **Registrar un objeto**.

1. En la página **Crear AWS IoT cosas**, selecciona **Crear una sola cosa**.

1. En la página **Añadir su dispositivo al registro de objetos**, escriba un nombre para el objeto (por ejemplo, “esp32-ble”). Se permiten caracteres alfanuméricos, guiones (-) y guiones bajos (\$1). Elija **Siguiente**.

1. En la página **Añadir un certificado para el objeto**, en **Omitir certificado y crear objeto**, elija **Crear un objeto sin certificado**. Como utilizamos la aplicación móvil proxy BLE que utiliza una credencial de Amazon Cognito para la autenticación y la autorización, no se requiere ningún certificado de dispositivo.

**Creación de un cliente de aplicación de Amazon Cognito**

1. Inicie sesión en la [consola de Amazon Cognito](https://console.aws.amazon.com/cognito/users/).

1. En el banner de navegación de la parte superior derecha, seleccione **Crear un grupo de usuarios**.

1. Introduzca el nombre del grupo (por ejemplo, “esp32\$1mqtt\$1proxy\$1user\$1pool”).

1. Elija **Revisar los valores predeterminados**.

1. En **Clientes de aplicación**, elija **Agregar cliente de aplicación** y, a continuación, elija **Agregar un cliente de aplicación**. 

1. Introduzca un nombre de cliente de aplicación (por ejemplo, “mqtt\$1app\$1client”).

1. Asegúrese de que esté seleccionada la opción **Generar secreto de cliente**.

1. Elija **Create app client** (Crear cliente de aplicación).

1. Elija **Return to pool details** (Volver a los detalles del grupo).

1. En la página **Revisar** del grupo de usuarios, elija **Crear grupo**. Debería ver un mensaje que indica: “El grupo de usuarios se ha creado correctamente”. Anote el ID del grupo.

1. En el panel de navegación, elija **Clientes de aplicación**.

1. Elija **Mostrar detalles**. Anote el ID y el secreto del cliente de aplicación.

**Creación de un grupo de identidades en Amazon Cognito**

1. Inicie sesión en la [consola de Amazon Cognito](https://console.aws.amazon.com/cognito/federated).

1. Elija **Crear nuevo grupo de identidades**.

1. Introduzca un nombre para el grupo de identidades (por ejemplo, “mqtt\$1proxy\$1identity\$1pool”).

1. Amplíe **Proveedores de autenticación**.

1. Seleccione la pestaña **Cognito**.

1. Introduzca el ID del grupo de usuarios y el ID de cliente de la aplicación que anotó en los pasos anteriores.

1. Elija **Crear grupo**.

1. En la página siguiente, para crear roles nuevos para las identidades autenticadas y no autenticadas, elija **Permitir**.

1. Anote el ID del grupo de identidades, que tiene el formato `us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`. 

**Asociación de una política de IAM a la identidad autenticada**

1. Abra la [consola de Amazon Cognito](https://console.aws.amazon.com/cognito/federated).

1. Seleccione el grupo de identidades que acaba de crear (por ejemplo, “mqtt\$1proxy\$1identity\$1pool”).

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

1. Anote el rol de IAM asignado al rol autenticado (por ejemplo, “Cognito\$1mqtt\$1proxy\$1identity\$1poolAuth\$1Role”).

1. Abra la [consola de IAM](https://console.aws.amazon.com/iam/home).

1. Seleccione **Roles** en el panel de navegación.

1. Busque el rol asignado (por ejemplo, “Cognito\$1mqtt\$1proxy\$1identity\$1poolAuth\$1Role”) y selecciónelo.

1. Elija **Añadir política en línea** y, a continuación, seleccione la pestaña **JSON**.

1. Escriba la siguiente política:

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

****  

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

------

1. Elija **Revisar la política**.

1. Introduce el nombre de una política (por ejemplo, «mqttProxyCognitoPolítica»).

1. Elija **Crear política**.

## Paso 4: Configurar Amazon FreeRTOS
<a name="ota-updates-esp32-ble-step4"></a>

1. [Descargue la última versión del código de Amazon FreeRTOS del repositorio de FreeRTOS. GitHub ](https://github.com/aws/amazon-freertos)

1. Para activar la demostración de la actualización OTA, siga los pasos que se indican en [Cómo empezar con el Espressif ESP32 - DevKit C y el ESP-WROVER-KIT](getting_started_espressif.md). 

1. Realice estas modificaciones adicionales en los siguientes archivos: 

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

   1. Abra `vendors/espressif/boards/esp32/aws_demos/common/config_files/aws_demo_config.h` y cambie `democonfigNETWORK_TYPES` a `AWSIOT_NETWORK_TYPE_BLE`.

   1. Abra `demos/include/aws_clientcredential.h` e introduzca la URL de su punto de conexión para `clientcredentialMQTT_BROKER_ENDPOINT`.

      Introduzca el nombre del objeto para `clientcredentialIOT_THING_NAME` (por ejemplo, “esp32-ble”). No es necesario añadir certificados cuando se utilizan las credenciales de Amazon Cognito.

   1. Abra `vendors/espressif/boards/esp32/aws_demos/config_files/aws_iot_network_config.h` y cambie `configSUPPORTED_NETWORKS` y `configENABLED_NETWORKS` para que solo incluya `AWSIOT_NETWORK_TYPE_BLE`.

   1. Abra el archivo `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` e introduzca su certificado.

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

   La aplicación debería iniciarse e imprimir la versión de demostración:

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

## Paso 5: Configurar una aplicación para Android
<a name="ota-updates-esp32-ble-step5"></a>

1. [Descargue el SDK Bluetooth Low Energy para Android y una aplicación de muestra del amazon-freertos-ble-android repositorio -sdk.](https://github.com/aws/amazon-freertos-ble-android-sdk) GitHub 

1. Abre el archivo `app/src/main/res/raw/awsconfiguration.json` e introduce el ID del grupo AppClientId, la región y sigue las AppClientSecret instrucciones del siguiente ejemplo de JSON.

   ```
   {
     "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 introduzca el nombre de la política que creó anteriormente (por ejemplo,*esp32\$1mqtt\$1proxy\$1iot\$1policy*) y también la región (por ejemplo,*us-east-1*).

1. Cree e instale la aplicación de demostración.

   1. En Android Studio, seleccione **Crear** y, luego, **Crear aplicación de módulo**.

   1. Elija **Ejecutar** y, a continuación, **Ejecutar aplicación**. Puede ir al panel de la ventana de logcat en Android Studio para monitorear los mensajes de registro.

   1. En el dispositivo Android, crea una cuenta desde la pantalla de inicio de sesión.

   1. Crear un usuario. Si ya existe un usuario, introduzca las credenciales.

   1. Permita que la demostración de Amazon FreeRTOS acceda a la ubicación del dispositivo.

   1. Busque dispositivos Bluetooth de bajo consumo.

   1. Mueva el control deslizante del dispositivo que se encuentra a **Activado**.

   1. Pulse **y** en la consola de depuración del ESP32 puerto serie para.

   1. Elija **Emparejar y conectar**.

1. El enlace **Más…** se activa una vez establecida la conexión. El estado de la conexión debería cambiar a “BLE\$1CONNECTED” en el logcat del dispositivo Android cuando se complete la conexión:

   ```
   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 de poder transmitir los mensajes, el dispositivo Amazon FreeRTOS y el dispositivo Android negocian la MTU. Debería ver la siguiente salida en logcat:

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

1. El dispositivo se conecta a la aplicación y comienza a enviar mensajes MQTT mediante el proxy MQTT. Para confirmar que el dispositivo puede comunicarse, asegúrese de que el valor de los datos de característica de MQTT\$1CONTROL cambie a 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. Cuando los dispositivos estén emparejados, aparecerá un mensaje en la ESP32 consola. Para activar BLE, pulse **y**. La demostración no funcionará hasta que realice este paso. 

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

## Paso 6: Ejecutar el script de actualización OTA
<a name="ota-updates-esp32-ble-step6"></a>

1. Para instalar los requisitos previos, ejecute los siguientes comandos:

   ```
   pip3 install boto3
   ```

   ```
   pip3 install pathlib
   ```

1. Aumente la versión de la aplicación FreeRTOS en `demos/include/aws_application_version.h`.

1. Cree un nuevo archivo .bin.

1. Descargue el script de python [ start\$1ota.py](https://github.com/aws-samples/amazon-freertos-ota-scripts/blob/master/scripts/start_ota.py). Para ver el contenido de ayuda del script, ejecute el siguiente comando en una ventana del terminal:

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

   Debería ver algo parecido a lo siguiente:

   ```
   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. Si usó la CloudFormation plantilla proporcionada para crear recursos, ejecute el siguiente 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
   ```

   Deberías ver el inicio de la actualización en la consola de ESP32 depuración: 

   ```
   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. Cuando finalice la actualización OTA, el dispositivo se reiniciará según lo requiera el proceso de actualización OTA. A continuación, intenta conectarse mediante el firmware actualizado. Si la actualización se ha realizado correctamente, el firmware actualizado se marca como activo y debería ver la versión actualizada en la consola:

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