

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Over-the-air aggiorna l'applicazione demo
<a name="ota-demo"></a>

FreerTOS include un'applicazione demo che dimostra la funzionalità della over-the-air libreria (OTA). L'applicazione demo OTA si trova nel file `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`

L'applicazione demo OTA esegue le seguenti operazioni:

1. Inizializza lo stack della rete FreeRTOS e il pool di buffer MQTT.

1. Crea un'attività con cui esercitare la libreria OTA`vRunOTAUpdateDemo()`.

1. Crea un client MQTT utilizzando `_establishMqttConnection()`.

1. Si connette al broker AWS IoT MQTT utilizzando `IotMqtt_Connect()` e registra un callback di disconnessione MQTT:. `prvNetworkDisconnectCallback`

1. Chiama `OTA_AgentInit()` per creare l'attività OTA e registra un callback da utilizzare quando l'attività OTA è completa.

1. Riutilizza la connessione MQTT con `xOTAConnectionCtx.pvControlClient = _mqttConnection;`

1. Se MQTT si disconnette, l'applicazione sospende l'agente OTA, tenta di riconnettersi utilizzando un ritardo esponenziale con jitter, quindi riprende l'agente OTA.

Prima di poter utilizzare gli aggiornamenti OTA, completa tutti i prerequisiti in [Aggiornamenti FreerTOS Over-the-Air](freertos-ota-dev.md)

Dopo aver completato la configurazione per gli aggiornamenti OTA, scarica, crea, esegui il flash ed esegui la demo OTA di FreerTOS su una piattaforma che supporta la funzionalità OTA. Sono disponibili istruzioni dimostrative specifiche per i seguenti dispositivi certificati FreeRTOS:
+ [Texas Instruments SF-LAUNCHXL CC3220](download-ota-ti.md)
+ [Microchip Curiosity MZEF PIC32](download-ota-mchip.md)
+ [Espressif ESP32](download-ota-esp.md)
+ [Scarica, crea, esegui il flashing ed esegui la demo OTA di FreerTOS su Renesas N RX65](download-rx65n-ota.md)

Dopo aver creato, flashato ed eseguito l'applicazione demo OTA sul dispositivo, puoi utilizzare la AWS IoT console o creare un processo di aggiornamento OTA. AWS CLI Dopo aver creato un lavoro di aggiornamento OTA, collega un emulatore di terminale per visualizzare l'avanzamento dell'aggiornamento OTA. Annota tutti gli errori generati durante il processo.

Un lavoro di aggiornamento OTA con esito positivo visualizza un output come il seguente. Alcune righe in questo esempio sono state rimosse dall'elenco per ragioni di spazio.

```
    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 configurazioni demo
<a name="ota-demo-specific-config"></a>

Le configurazioni demo OTA sono opzioni di configurazione specifiche per la demo fornite in. `aws_iot_ota_update_demo.c` Queste configurazioni sono diverse dalle configurazioni della libreria OTA fornite nel file di configurazione della libreria OTA. 

**OTA\$1DEMO\$1KEEP\$1ALIVE\$1SECONDS**  
Per il client MQTT, questa configurazione è l'intervallo di tempo massimo che può trascorrere tra la fine della trasmissione di un pacchetto di controllo e l'inizio dell'invio del successivo. In assenza di un pacchetto di controllo, viene inviato un PINGREQ. Il broker deve disconnettere un client che non invia un messaggio o un pacchetto PINGREQ entro una volta e mezza di questo intervallo di mantenimento in vita. Questa configurazione deve essere regolata in base ai requisiti dell'applicazione.

**OTA\$1DEMO\$1CONN\$1RETRY\$1BASE\$1INTERVAL\$1SECONDS**  
L'intervallo di base, in secondi, prima di riprovare la connessione di rete. La demo OTA proverà a riconnettersi dopo questo intervallo di tempo di base. L'intervallo viene raddoppiato dopo ogni tentativo fallito. All'intervallo viene inoltre aggiunto un ritardo casuale, fino a un massimo di questo ritardo di base.

**OTA\$1DEMO\$1CONN\$1RETRY\$1MAX\$1INTERVAL\$1SECONDS**  
Intervallo massimo, in secondi, prima di riprovare la connessione di rete. Il ritardo di riconnessione viene raddoppiato per ogni tentativo fallito, ma può arrivare solo fino a questo valore massimo, sommato a un jitter dello stesso intervallo.

# Scarica, crea, esegui il flashing ed esegui la demo OTA di FreerTOS su Texas Instruments SF-LAUNCHXL CC3220
<a name="download-ota-ti"></a>

**Importante**  <a name="deprecation-message"></a>
Questa integrazione di riferimento è ospitata nel repository Amazon-FreeRTOS che è obsoleto. Ti consigliamo di [iniziare da qui quando crei un nuovo progetto](freertos-getting-started-modular.md). Se disponi già di un progetto FreeRTOS esistente basato sull'ormai obsoleto repository Amazon-FreerTOS, consulta il. [Guida alla migrazione del repository Github di Amazon-FreeRTOS](github-repo-migration.md)<a name="download-demo"></a>

**Per scaricare FreerTOS e il codice demo OTA**
+ Puoi scaricare il codice sorgente dal GitHub sito [https://github.com/FreeRTOS/FreerTOS](https://github.com/FreeRTOS/FreeRTOS). <a name="build-demo"></a>

**Per creare l'applicazione demo**

1. Segui le istruzioni [Inizia con FreerTOS](freertos-getting-started.md) per importare il `aws_demos` progetto in Code Composer Studio, configurare l' AWS IoT endpoint, l'SSID e la password Wi-Fi e una chiave privata e un certificato per la scheda.

1.  Apri`freertos/vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h`, commenta e definisci `#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED` o. `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` `CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`

1. Creare la soluzione e accertarsi che venga compilata senza errori.

1. Avviare un emulatore di terminale e utilizzare le seguenti impostazioni per effettuare la connessione alla scheda:
   + Velocità in baud: 115200
   + Bit di dati: 8
   + Parità: nessuna
   + Bit di stop: 1

1. Eseguire il progetto sulla scheda per accertarsi che riesca a connettersi alla rete WiFi e al broker di messaggi MQTT AWS IoT .

Durante l'esecuzione, l'emulatore di terminale dovrebbe visualizzare testo simile al seguente:

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

# Scarica, crea, esegui il flashing ed esegui la demo OTA di FreerTOS su Microchip Curiosity MZEF PIC32
<a name="download-ota-mchip"></a>

**Importante**  <a name="deprecation-message"></a>
Questa integrazione di riferimento è ospitata nel repository Amazon-FreeRTOS che è obsoleto. Ti consigliamo di [iniziare da qui quando crei un nuovo progetto](freertos-getting-started-modular.md). Se disponi già di un progetto FreeRTOS esistente basato sull'ormai obsoleto repository Amazon-FreerTOS, consulta il. [Guida alla migrazione del repository Github di Amazon-FreeRTOS](github-repo-migration.md)

**Nota**  
In accordo con Microchip, stiamo rimuovendo Curiosity PIC32 MZEF (DM320104) dal ramo principale del repository FreerTOS Reference Integration e non lo inseriremo più nelle nuove versioni. Microchip ha emesso un [avviso ufficiale](https://www.microchip.com/DevelopmentTools/ProductDetails/PartNO/DM320104) secondo cui PIC32 MZEF (DM320104) non è più consigliato per i nuovi design. È ancora possibile accedere ai progetti PIC32 MZEF e al codice sorgente tramite i tag della versione precedente. Microchip consiglia ai clienti di utilizzare la scheda di [sviluppo Curiosity PIC32 MZ-EF-2.0](https://devices.amazonaws.com/detail/a3G0h0000077I69EAE/Curiosity-PIC32MZ-EF-2-0-Development-Board) () per nuovi progetti. DM320209 La PIC32 MZv1 piattaforma è ancora disponibile nella versione [202012.00 del repository](https://github.com/aws/amazon-freertos/tree/202012.00) FreerTOS Reference Integration. Tuttavia, la piattaforma non è più supportata dalla [v202107.00 di FreerTOS Reference](https://github.com/aws/amazon-freertos/tree/202107.00).<a name="mch-dowload-demo"></a>

**Per scaricare il codice demo di FreerTOS OTA**
+ Puoi scaricare il codice sorgente dal GitHub sito [https://github.com/FreeRTOS/FreerTOS](https://github.com/FreeRTOS/FreeRTOS). <a name="mch-build-demo"></a>

**Per creare l'applicazione demo dell'aggiornamento OTA**

1. Segui le istruzioni [Inizia con FreerTOS](freertos-getting-started.md) per importare il `aws_demos` progetto nell'IDE MPLAB X, configurare l' AWS IoT endpoint, l'SSID e la password Wi-Fi e una chiave privata e un certificato per la tua scheda.

1. Apri il `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` file e inserisci il certificato.

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

1. Incolla qui il contenuto del tuo certificato di firma del codice:

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

   Segui lo stesso formato di`aws_clientcredential_keys.h`: ogni riga deve terminare con il nuovo carattere di riga ('\$1n') ed essere racchiusa tra virgolette.

   Ad esempio, il certificato dovrebbe essere simile a quanto segue:

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

1. Installare `pyOpenSSL` eseguendo `pip install pyopenssl`.

1. Copiare il certificato di firma del codice in formato .pem nel percorso `demos/ota/bootloader/utility/codesigner_cert_utility/`. Rinominare il file del certificato `aws_ota_codesigner_certificate.pem`.

1.  Apri`freertos/vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h`, commenta e `#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED` definisci o. `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` `CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`

1. Creare la soluzione e accertarsi che venga compilata senza errori.

1. Avviare un emulatore di terminale e utilizzare le seguenti impostazioni per effettuare la connessione alla scheda:
   + Velocità in baud: 115200
   + Bit di dati: 8
   + Parità: nessuna
   + Bit di stop: 1

1. Scollega il debugger dalla scheda ed esegui il progetto sulla scheda per confermare che sia in grado di connettersi al Wi-Fi e al broker di messaggi MQTT. AWS IoT 

Quando si esegue il progetto, il modulo MPLAB X IDE dovrebbe aprire una finestra di output. Assicurati che la scheda sia selezionata. **ICD4** Vedrai il seguente output.

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

L'emulatore di terminale dovrebbe visualizzare testo simile al seguente:

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

Questo output mostra che il Microchip Curiosity PIC32 MZEF può connettersi AWS IoT e sottoscrivere gli argomenti MQTT richiesti per gli aggiornamenti OTA. Vengono sicuramente visualizzati messaggi `Missing job parameter` perché non ci sono processi di aggiornamento OTA in sospeso.

# Scarica, crea, esegui il flashing ed esegui la demo OTA di FreerTOS su Espressif ESP32
<a name="download-ota-esp"></a>

**Importante**  <a name="deprecation-message"></a>
Questa integrazione di riferimento è ospitata nel repository Amazon-FreeRTOS che è obsoleto. Ti consigliamo di [iniziare da qui quando crei un nuovo progetto](freertos-getting-started-modular.md). Se disponi già di un progetto FreeRTOS esistente basato sull'ormai obsoleto repository Amazon-FreerTOS, consulta il. [Guida alla migrazione del repository Github di Amazon-FreeRTOS](github-repo-migration.md)

1. Scarica il codice sorgente di FreerTOS da. [GitHub](https://github.com/aws/amazon-freertos) Consultare il file [README.md](https://github.com/aws/amazon-freertos/blob/main/README.md) per le istruzioni. Creare un progetto nell'IDE che includa tutti i codici sorgente e tutte le librerie richiesti.

1. Seguire le istruzioni nella pagina delle [nozioni di base su Espressif](https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html) per impostare la toolchain basata su GCC richiesta.

1. Apri`freertos/vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h`, commenta e definisci `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` o. `#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED` `CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`

1. Creare il progetto dimostrativo eseguendo `make` nella directory `vendors/espressif/boards/esp32/aws_demos`. È possibile memorizzare nella flash il programma dimostrativo e verificare l'output tramite l'esecuzione di `make flash monitor`, come descritto nella pagina delle [nozioni di base su Espressif](https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html).

1. Prima di eseguire la demo dell'aggiornamento OTA:
   + Apri`freertos/vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h`, commenta e definisci `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` o`CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`. `#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED`
   + Apri e copia `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` il certificato di firma del codice SHA-256/ECDSA in:

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

# Scarica, crea, esegui il flashing ed esegui la demo OTA di FreerTOS su Renesas N RX65
<a name="download-rx65n-ota"></a>

**Importante**  <a name="deprecation-message"></a>
Questa integrazione di riferimento è ospitata nel repository Amazon-FreeRTOS che è obsoleto. Ti consigliamo di [iniziare da qui quando crei un nuovo progetto](freertos-getting-started-modular.md). Se disponi già di un progetto FreeRTOS esistente basato sull'ormai obsoleto repository Amazon-FreerTOS, consulta il. [Guida alla migrazione del repository Github di Amazon-FreeRTOS](github-repo-migration.md)

Questo capitolo mostra come scaricare, creare, eseguire il flashing ed eseguire le applicazioni demo FreerTOS OTA su Renesas N. RX65

**Topics**
+ [Configura il tuo ambiente operativo](#download-rx65n-ota-environment)
+ [Configura le tue risorse AWS](#download-rx65n-ota-setup)
+ [Importa, configura il file di intestazione e crea aws\$1demos e boot\$1loader](#download-rx65n-ota-import-configure)

## Configura il tuo ambiente operativo
<a name="download-rx65n-ota-environment"></a>

Le procedure descritte in questa sezione utilizzano i seguenti ambienti:
+ **IDE**: 2 studio 7.8.0, e 2 studio 2020-07
+ **Catene di strumenti: CCRX Compiler v3.0.1**
+ **Dispositivi di destinazione:** RSKRX65 N-2 MB
+ **Debugger**: emulatore E 2, E 2 Lite
+ **Software**: Renesas Flash Programmatore, Renesas Secure Flash Programmer.exe, Tera Term

**Per configurare l'hardware**

1. Connect l'emulatore E 2 Lite e la porta seriale USB alla scheda RX65 N e al PC.

1. Connect la fonte di alimentazione al RX65 N.

## Configura le tue risorse AWS
<a name="download-rx65n-ota-setup"></a>

1. Per eseguire le demo di FreerTOS, è necessario disporre di AWS un account con un utente IAM autorizzato ad accedere ai servizi. AWS IoT Se non l'hai già fatto, segui i passaggi indicati. [Configurazione dell'account e delle autorizzazioni AWS](freertos-prereqs.md#freertos-account-and-permissions)

1. Per configurare gli aggiornamenti OTA, segui la procedura riportata di seguito[Prerequisiti per l'aggiornamento OTA](ota-prereqs.md). In particolare, segui i passaggi indicati in[Prerequisiti per gli aggiornamenti OTA mediante MQTT](ota-mqtt-freertos.md).

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

1. Nel riquadro di navigazione a sinistra, scegli **Gestisci**, quindi scegli **Cose** per creare un oggetto.

   Una cosa è una rappresentazione di un dispositivo o di un'entità logica in AWS IoT. Può trattarsi di un dispositivo fisico o un sensore, ad esempio una lampadina o un interruttore su un muro. Può anche essere un'entità logica come un'istanza di un'applicazione o un'entità fisica a cui non si connette AWS IoT, ma è correlata a dispositivi che lo fanno (ad esempio, un'auto dotata di sensori del motore o un pannello di controllo). AWS IoT fornisce un registro degli oggetti che ti aiuta a gestire le tue cose.

   1. Scegli **Crea**, quindi scegli **Crea una singola cosa**.

   1. Inserisci un **nome** per il tuo oggetto, quindi scegli **Avanti**.

   1. Scegli **Crea certificato**.

   1. Scarica i tre file creati, quindi scegli **Attiva**. 

   1. Scegliere **Attach a policy (Collega policy)**.  
![\[schermata della console che mostra i file da scaricare\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/download-these-files-rx65n.png)

   1. Seleziona la politica in cui hai creato[Policy dei dispositivi](ota-mqtt-freertos.md#ota-mqtt-freertos-device-policy).

      Ogni dispositivo che riceve un aggiornamento OTA tramite MQTT deve essere registrato come oggetto in AWS IoT e deve avere una politica allegata come quella elencata. Ulteriori informazioni sugli elementi degli oggetti `"Action"` e `"Resource"` sono disponibili in [Operazioni di policy AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html) e [Risorse per operazioni AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-action-resources.html).

**Note**
      + Le `iot:Connect` autorizzazioni consentono al dispositivo di connettersi tramite MQTT AWS IoT .
      + Le autorizzazioni `iot:Publish` e `iot:Subscribe` sugli argomenti dei processi AWS IoT (`.../jobs/*`) consentono al dispositivo connesso di ricevere notifiche e documenti relativi ai processi e di pubblicare lo stato di completamento dell'esecuzione di un processo.
      + Le `iot:Publish` autorizzazioni `iot:Subscribe` e sugli argomenti degli stream AWS IoT OTA (`.../streams/*`) consentono al dispositivo connesso di recuperare i dati di aggiornamento OTA da. AWS IoT Queste autorizzazioni sono necessarie per eseguire gli aggiornamenti del firmware tramite MQTT.
      + Le `iot:Receive` autorizzazioni consentono di AWS IoT Core pubblicare messaggi su tali argomenti sul dispositivo connesso. Questa autorizzazione viene controllata ad ogni recapito di un messaggio MQTT. È possibile utilizzare questa autorizzazione per revocare l'accesso ai client attualmente sottoscritti a un argomento.

1. Per creare un profilo di firma del codice e registrare un certificato di firma del codice su. AWS

   1. [Per creare le chiavi e la certificazione, vedere la sezione 7.3 «Generazione di coppie di SHA256 chiavi ECDSA con OpenSSL» nella politica di progettazione degli aggiornamenti del firmware MCU di Renesas.](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)

   1. Apri la [AWS IoT console](https://console.aws.amazon.com/iot/home). ****Nel riquadro di navigazione a sinistra, seleziona Gestisci, quindi Jobs.**** Seleziona **Crea un lavoro**, quindi **Crea processo di aggiornamento OTA**. 

   1. In **Seleziona i dispositivi da aggiornare** scegli **Seleziona**, quindi scegli l'elemento che hai creato in precedenza. Seleziona **Avanti**. 

   1. Nella pagina **Crea un processo di aggiornamento OTA FreerTOS**, procedi come segue:

      1. **Per **Seleziona il protocollo per il trasferimento delle immagini del firmware**, scegli MQTT.** 

      1. Per **Seleziona e firma l'immagine del firmware**, scegli **Firma una nuova immagine del firmware per me**. 

      1. Per il **profilo Code Signing**, scegli **Crea**.

      1. Nella finestra **Crea un profilo di firma del codice**, inserisci un **nome di profilo**. Per la **piattaforma hardware del dispositivo**, seleziona **Windows Simulator**. Per il **certificato di firma del codice**, scegli **Importa**.

      1. Sfoglia per selezionare il certificato (`secp256r1.crt`), la chiave privata del certificato (`secp256r1.key`) e la catena di certificati (`ca.crt`).

      1. Inserisci un **nome di percorso del certificato di firma del codice sul dispositivo**. Quindi, scegli **Crea**.

1. Per concedere l'accesso alla firma del codice per AWS IoT, segui i passaggi indicati in[Concedi l'accesso alla firma del codice per AWS IoT](code-sign-policy.md). 

Se non hai Tera Term installato sul tuo PC, puoi scaricarlo da [https://ttssh2.osdn.jp/index.html.en](https://ttssh2.osdn.jp/index.html.en) e configurarlo come mostrato qui. Assicurati di collegare la porta seriale USB dal dispositivo al PC.

![\[Finestra di configurazione della porta seriale Tera Term\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/tera-team-rx65n.png)


## Importa, configura il file di intestazione e crea aws\$1demos e boot\$1loader
<a name="download-rx65n-ota-import-configure"></a>

Per iniziare, selezioni l'ultima versione del pacchetto FreerTOS, che verrà scaricata GitHub e importata automaticamente nel progetto. In questo modo puoi concentrarti sulla configurazione di FreerTOS e sulla scrittura del codice dell'applicazione.

1. Avvia e 2 studio.

1. Scegli **File**, quindi seleziona **Importa**.

1. Seleziona il **progetto Renesas GitHub FreerTOS (con** librerie IoT).  
![\[finestra di importazione di e-squared studio\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/import-renesas-project-rx65n.png)

1. Scegli **Controlla altre versioni... per** mostrare la finestra di dialogo per il download.  
![\[finestra di dialogo per il download di e-squared studio\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/check-more-version-rx65n.png)

1. Seleziona il pacchetto più recente.  
![\[finestra di dialogo per il download del modulo e-squared studio\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/choose-latest-version-rx65n.png)

1. Scegli **Accetto** per accettare il contratto di licenza con l'utente finale.  
![\[finestra di dialogo EULA di e-squared studio\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/eula-rx65n.png)

1. Attendi il completamento del download.  
![\[scarica la barra di avanzamento\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/downloading-rx65n.png)

1. **Seleziona i progetti **aws\$1demos** e **boot\$1loader**, quindi scegli Fine per importarli.**  
![\[finestra di importazione dei progetti\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/import-projects-rx65n.png)

1. Per entrambi i progetti, apri le proprietà del progetto. Nel riquadro di navigazione, scegliete **Tool Chain Editor**.

   1. Scegliete la **toolchain corrente**.

   1. Scegli il **generatore Current**.  
![\[finestra delle proprietà di e-squared studio\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/project-properties-rx65n.png)

1. Nel pannello di navigazione scegli **Impostazioni**. **Scegli la scheda **Toolchain**, quindi scegli la versione della toolchain.**  
![\[Impostazioni di integrazione della toolchain per Renesas CCRX versione v3.01.00, con possibilità di modificare la toolchain.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/project-properties-toolchain-rx65n.png)

   ****Scegli la scheda **Impostazioni dello strumento**, espandi Convertitore e quindi scegli Output.**** Nella finestra principale, assicurati che il **file esadecimale di output** sia selezionato, quindi scegli il **tipo di file di output**.  
![\[La finestra delle impostazioni di configurazione di C/C++ Build mostra le opzioni del compilatore e del linker come il file esadecimale di output, il tipo di file di output, la directory di output e le opzioni di divisione dei file.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/project-properties-settings-rx65n.png)  
![\[Albero delle impostazioni dell'interfaccia con opzioni per Stack Analysis, Tool Chain Editor, C/C++ General, MCU, Project References, ecc.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/project-properties-settings-2-rx65n.png)

1. Nel progetto bootloader, `projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h` apri e inserisci la chiave pubblica. [Per informazioni su come creare una chiave pubblica, consulta [Come implementare FreerTOS OTA utilizzando Amazon Web Services RX65 su](https://www.renesas.com/us/en/document/apn/rx-family-how-implement-freertos-ota-using-amazon-web-services-rx65n) N e la sezione 7.3 «Generazione di coppie di chiavi ECDSA con OpenSSL» nella politica di progettazione dell'SHA256 aggiornamento del firmware MCU di Renesas.](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)  
![\[Editor di codice che mostra un file di intestazione C con definizione per CODE_SIGNER_PUBLIC_KEY e una variabile chiave pubblica code signer con codifica PEM.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/open-bootloader-project-rx65n.png)

   Quindi `boot_loader.mot` crea il progetto da creare.

1. Apri il `aws_demos` progetto.

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

   1. Nel riquadro di navigazione a sinistra scegliere **Impostazioni**. Prendi nota del tuo endpoint personalizzato nella casella di testo **Device data endpoint**.

   1. **Scegli **Gestisci**, quindi scegli Cose.** Prendi nota del nome dell' AWS IoT oggetto della tua bacheca.

   1. Nel `aws_demos` progetto, aprite `demos/include/aws_clientcredential.h` e specificate i seguenti valori.

      ```
      #define clientcredentialMQTT_BROKER_ENDPOINT[] = "Your AWS IoT endpoint";
      #define clientcredentialIOT_THING_NAME "The AWS IoT thing name of your board"
      ```  
![\[Frammento di codice che mostra il nome dell' AWS IoT oggetto e le impostazioni di configurazione dell'endpoint del broker.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/client-credential-rx65n.png)

   1. Apri il file `tools/certificate_configuration/CertificateConfigurator.html`.

   1. Importa il file PEM del certificato e il file PEM a chiave privata che hai scaricato in precedenza.

   1. Scegli **Genera e salva aws\$1clientcredential\$1keys.h** e sostituisci questo file nella directory. `demos/include/`  
![\[Strumento di configurazione dei certificati con campi per fornire i file PEM del certificato client e della chiave privata dalla console e un pulsante per generare e salvare il file aws_clientcredential_keys.h AWS IoT .\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/certificate-config-tool-rx65n.png)

   1. Apri il file e specifica questi valori. `vendors/renesas/boards/rx65n-rsk/aws_demos/config_files/ota_demo_config.h`

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

      *your-certificate-key*Dov'è il valore del file`secp256r1.crt`. Ricordati di aggiungere «\$1» dopo ogni riga della certificazione. [Per ulteriori informazioni sulla creazione del `secp256r1.crt` file, consulta [Come implementare FreerTOS OTA utilizzando Amazon Web Services RX65 su](https://www.renesas.com/us/en/document/apn/rx-family-how-implement-freertos-ota-using-amazon-web-services-rx65n) N e la sezione 7.3 «Generazione di coppie di chiavi ECDSA SHA256 con OpenSSL» nella politica di progettazione dell'aggiornamento del firmware MCU di Renesas.](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)  
![\[File di codice sorgente che mostra il codice C che definisce una stringa costante del certificato del firmatario del codice codificato con codifica PEM con dati del certificato redatti.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/codesigner-cert-rx65n.png)

1. **Attività A: Installare la versione iniziale del firmware**

   1. Apri il `vendors/renesas/boards/board/aws_demos/config_files/aws_demo_config.h` file, commenta e definisci `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` o`CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`. `#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED`

   1. Aprire il `demos/include/ aws_application_version.h` file e impostare la versione iniziale del firmware su`0.9.2`.  
![\[Frammento di codice che mostra le definizioni delle versioni di un'applicazione, incluse le macro per i numeri di versione principali, secondari e di build.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/firmware-version-rx65n.png)

   1. **Modificate le seguenti impostazioni nel Section Viewer.**  
![\[Finestra del visualizzatore di sezioni che mostra gli indirizzi di memoria, i nomi delle sezioni come SU, SI, i registri e i componenti dell'interfaccia come buffer di rete, eccezioni e pulsanti di azione.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/section-viewer-rx65n.png)

   1. Scegli **Build** per creare il file. `aws_demos.mot`

1. Crea il file `userprog.mot` con Renesas Secure Flash Programmer. `userprog.mot`è una combinazione di e. `aws_demos.mot` `boot_loader.mot` È possibile eseguire il flashing di questo file su RX65 N-RSK per installare il firmware iniziale.

   1. Scarica [ https://github.com/renesas/Amazon-FreeRTOS-Tools e apri](https://github.com/renesas/Amazon-FreeRTOS-Tools). `Renesas Secure Flash Programmer.exe`

   1. Scegli la scheda **Initial Firm** e imposta i seguenti parametri:
      + **Private Key Path**: la posizione di`secp256r1.privatekey`.
      + **Percorso del file del loader di avvio**: la posizione di `boot_loader.mot` (`projects\renesas\rx65n-rsk\e2studio\boot_loader\HardwareDebug`).
      + **Percorso del file**: la posizione di `aws_demos.mot` (`projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug`).  
![\[Finestra Renesas Secure Flash Programmer con MCU, verifica del firmware, numero di sequenza, percorso chiave AES e campi del percorso del file.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/secure-flash-rx65n.png)

   1. Crea una directory denominata `init_firmware` Genera `userprog.mot` e salvala nella directory. `init_firmware` Verificate che la generazione sia riuscita.

1. Esegui il flashing del firmware iniziale sull' RX65N-RSK.

   1. [Scarica l'ultima versione di Renesas Flash Programmer (Programming GUI) da - .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. Apri il `vendors\renesas\rx_mcu_boards\boards\rx65n-rsk\aws_demos\flash_project\erase_from_bank\ erase.rpj` file per cancellare i dati sulla banca.

   1. Scegli **Inizia** per cancellare la banca.  
![\[La finestra Renesas Flash Programmer mostra i dettagli del progetto del microcontrollore RX Group, il percorso del file e le opzioni di funzionamento flash come Cancella, Programma e Verifica con i pulsanti Start e OK.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/flash-programmer-erasing-rx65n.png)

   1. **Per eseguire il flash, scegli Sfoglia... `userprog.mot`** e accedi alla `init_firmware` directory, seleziona il `userprog.mot` file e scegli **Avvia**.  
![\[La finestra Renesas Flash Programmer mostra le impostazioni delle operazioni di cancellazione, tra cui il microcontrollore RX Group, l'opzione per sfogliare il file di programma, i pulsanti Erase e Start e i dettagli sullo stato dei blocchi selezionati da cancellare.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/flash-programmer-complete-rx65n.png)

1. La versione 0.9.2 (versione iniziale) del firmware è stata installata sull'N-RSK. RX65 La scheda RX65 N-RSK è ora in attesa degli aggiornamenti OTA. Se hai aperto Tera Term sul tuo PC, all'esecuzione del firmware iniziale viene visualizzato qualcosa di simile a quanto segue.

   ```
   -------------------------------------------------
   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. **Attività B: aggiorna la versione del firmware**

   1. Aprire il `demos/include/aws_application_version.h` file e incrementare il valore del `APP_VERSION_BUILD` token a`0.9.3`.

   1. Ricreare il progetto.

1. Crea il `userprog.rsu` file con Renesas Secure Flash Programmer per aggiornare la versione del firmware.

   1. Apri il file `Amazon-FreeRTOS-Tools\Renesas Secure Flash Programmer.exe`.

   1. Scegli la scheda **Update Firm** e imposta i seguenti parametri:
      + **Percorso del file**: la posizione del `aws_demos.mot` file (`projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug`).

   1. Crea una directory denominata `update _firmware`. Genera `userprog.rsu` e salvalo nella `update_firmware` directory. Verificate che la generazione sia riuscita.  
![\[Finestra Renesas Secure Flash Programmer con selezione MCU, tipo di verifica del firmware, numero di sequenza, campo chiave AES MAC e input del percorso del file per la generazione di firmware sicuro.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/update-firmware-rx65n.png)

1. Carica l'aggiornamento del firmware in un bucket Amazon S3 come descritto in. `userproj.rsu` [Crea un bucket Amazon S3 per archiviare l'aggiornamento](dg-ota-bucket.md)   
![\[Interfaccia di gestione dei bucket Amazon S3 con cartelle, caricamenti, versioni e opzioni di autorizzazione\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/upload-firmware-rx65n.png)

1. Crea un processo per aggiornare il firmware sull'N-RSK. RX65

   AWS IoT [Jobs è un servizio che notifica a uno o più dispositivi connessi un Job in sospeso.](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html) Un job può essere utilizzato per gestire una flotta di dispositivi, aggiornare il firmware e i certificati di sicurezza sui dispositivi o eseguire attività amministrative come il riavvio dei dispositivi e l'esecuzione di diagnosi.

   1. Accedi alla [console AWS IoT](https://console.aws.amazon.com/iotv2/). **Nel riquadro di navigazione, scegli **Gestisci** e scegli Lavori.**

   1. Scegli **Crea un lavoro**, quindi scegli **Crea lavoro OTA Update**. Seleziona una cosa, quindi scegli **Avanti**.

   1. Crea un processo di aggiornamento OTA FreerTOS come segue:
      + **Scegli MQTT.**
      + Seleziona il profilo di firma del codice che hai creato nella sezione precedente.
      + Seleziona l'immagine del firmware che hai caricato in un bucket Amazon S3.
      + Per il **nome del percorso dell'immagine del firmware sul dispositivo**, inserisci. **test**
      + Scegli il ruolo IAM che hai creato nella sezione precedente.

   1. Scegli **Next (Successivo)**.  
![\[Impostazioni di firma dell'immagine del firmware e aggiornamento OTA con opzioni per firmare nuovo firmware, selezionare firmware firmato in precedenza, utilizzare firmware firmato personalizzato, specificare il profilo di firma del codice, il file di immagine del firmware, il percorso sul dispositivo e il ruolo IAM per il processo di aggiornamento OTA.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/create-job-next-rx65n.png)

   1. Inserisci un ID, quindi scegli **Crea**.

1. Riapri Tera Term per verificare che il firmware sia stato aggiornato correttamente alla versione demo OTA 0.9.3.  
![\[Output della riga di comando che mostra l'inizializzazione e la connessione di un thread a un broker.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/update-successful-rx65n.png)

1. Sulla AWS IoT console, verifica che lo stato del processo sia **Riuscito**.  
![\[Panoramica del processo di test AFR OTA-Demo che mostra che 1 risorsa ha avuto successo.\]](http://docs.aws.amazon.com/it_it/freertos/latest/userguide/images/completed-succeeded-rx65n.png)

# Tutorial: esegui aggiornamenti OTA su Espressif utilizzando ESP32 FreerTOS Bluetooth Low Energy
<a name="ota-updates-esp32-ble"></a>

**Importante**  <a name="deprecation-message"></a>
Questa integrazione di riferimento è ospitata nel repository Amazon-FreeRTOS che è obsoleto. Ti consigliamo di [iniziare da qui quando crei un nuovo progetto](freertos-getting-started-modular.md). Se disponi già di un progetto FreeRTOS esistente basato sull'ormai obsoleto repository Amazon-FreerTOS, consulta il. [Guida alla migrazione del repository Github di Amazon-FreeRTOS](github-repo-migration.md)

Questo tutorial mostra come aggiornare un ESP32 microcontrollore Espressif collegato a un proxy Bluetooth Low Energy MQTT su un dispositivo Android. Aggiorna il dispositivo utilizzando i processi di aggiornamento AWS IoT Over-the-air (OTA). Il dispositivo si connette AWS IoT utilizzando le credenziali di Amazon Cognito inserite nell'app demo Android. Un operatore autorizzato avvia l'aggiornamento OTA dal cloud. Quando il dispositivo si connette tramite l'app demo Android, viene avviato l'aggiornamento OTA e il firmware viene aggiornato sul dispositivo. 

Le versioni FreerTOS 2019.06.00 Major e successive includono il supporto proxy Bluetooth Low Energy MQTT che può essere utilizzato per il provisioning Wi-Fi e le connessioni sicure ai servizi. AWS IoT Utilizzando la funzione Bluetooth Low Energy, è possibile creare dispositivi a basso consumo che possono essere associati a un dispositivo mobile per la connettività senza richiedere il Wi-Fi. I dispositivi possono comunicare tramite MQTT connettendosi tramite Bluetooth Low Energy Android o iOS SDKs che utilizzano profili di accesso generico (GAP) e attributi generici (GATT).

Ecco i passaggi che seguiremo per consentire gli aggiornamenti OTA tramite Bluetooth Low Energy:

1. **Configurazione dello storage:** crea un bucket Amazon S3 e policy e configura un utente in grado di eseguire gli aggiornamenti.

1. **Crea un certificato di firma con codice: crea un certificato** di firma e consenti all'utente di firmare gli aggiornamenti del firmware.

1. **Configura l'autenticazione Amazon Cognito:** crea un provider di credenziali, un pool di utenti e l'accesso delle applicazioni al pool di utenti.

1. **Configura FreerTOS**: configura Bluetooth Low Energy, le credenziali del client e il certificato pubblico di firma del codice.

1. **Configura un'app Android:** configura il provider di credenziali, il pool di utenti e distribuisci l'applicazione su un dispositivo Android.

1. **Esegui lo script di aggiornamento OTA:** per avviare un aggiornamento OTA, utilizza lo script di aggiornamento OTA.

Per ulteriori informazioni su come funzionano gli aggiornamenti, vedere[Aggiornamenti FreerTOS Over-the-Air](freertos-ota-dev.md). Per ulteriori informazioni su come configurare la funzionalità proxy Bluetooth Low Energy MQTT, consulta il post [Utilizzo di Bluetooth Low Energy con FreerTOS su ESP32](https://aws.amazon.com/blogs/iot/using-bluetooth-low-energy-with-amazon-freertos-on-espressif-esp32/) Espressif di Richard Kang.

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

Per eseguire i passaggi di questo tutorial, sono necessarie le seguenti risorse:
+ Una scheda di ESP32 sviluppo.
+ Un cavo da microUSB a USB A.
+ Un AWS account (il piano gratuito è sufficiente).
+ Un telefono Android con Android v 6.0 o versione successiva e Bluetooth versione 4.2 o successiva.

Sul tuo computer di sviluppo hai bisogno di:
+ Spazio su disco sufficiente (\$1500 Mb) per la toolchain Xtensa, il codice sorgente e gli esempi di FreerTOS.
+ Android Studio installato.
+ L'[AWS CLI](https://aws.amazon.com/cli/)installato.
+ Python3 installato.
+ Il [boto3 AWS Software Developer Kit (SDK) per Python](https://github.com/boto/boto3).

I passaggi di questo tutorial presuppongono che il codice Xtensa toolchain, ESP-IDF e FreerTOS siano installati nella directory della home directory. `/esp` `~/esp/xtensa-esp32-elf/bin``$PATH`È necessario aggiungere alla variabile.

## Fase 1: Configurare l'archiviazione
<a name="ota-updates-esp32-ble-step1"></a>

1. [Crea un bucket Amazon S3 per archiviare l'aggiornamento](dg-ota-bucket.md)con il controllo delle versioni abilitato per contenere le immagini del firmware.

1. [Creazione di un ruolo del servizio per gli aggiornamenti OTA](create-service-role.md)e aggiungi le seguenti politiche gestite al ruolo:
   + AWSIotRegistrazione
   + AWSIotRuleActions
   + AWSIotThingsRegistration
   + AWSFreeRTOSOTAUpdate

1. [Crea un utente](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html) in grado di eseguire gli aggiornamenti OTA. Questo utente può firmare e distribuire gli aggiornamenti del firmware sui dispositivi IoT nell'account e ha accesso agli aggiornamenti OTA su tutti i dispositivi. L'accesso deve essere limitato alle entità attendibili.

1. Segui i passaggi per [Creazione di una policy utente OTA](create-ota-user-policy.md) allegarlo al tuo utente.

## Fase 2: Creare il certificato di firma del codice
<a name="ota-updates-esp32-ble-step2"></a>

1. Crea un bucket Amazon S3 con il controllo delle versioni abilitato per contenere le immagini del firmware.

1. Crea un certificato di firma del codice che può essere utilizzato per firmare il firmware. Prendi nota del certificato Amazon Resource Name (ARN) quando il certificato viene importato.

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

   Output di esempio:

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

   In seguito utilizzerai l'ARN per creare un profilo di firma. Se lo desideri, puoi creare subito il profilo con il seguente 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
   ```

   Output di esempio:

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

## Fase 3: configurazione dell'autenticazione di Amazon Cognito
<a name="ota-updates-esp32-ble-step3"></a>

**Crea una policy AWS IoT**

1. Accedi alla [console AWS IoT](https://console.aws.amazon.com/iot/).

1. **Nell'angolo in alto a destra della console, scegli Il mio account.** In **Impostazioni account**, prendi nota dell'ID del tuo account a 12 cifre.

1. Nel riquadro di navigazione a sinistra scegliere **Impostazioni**. In **Device Data Endpoint**, prendi nota del valore dell'endpoint. L'endpoint dovrebbe essere qualcosa del genere. `xxxxxxxxxxxxxx.iot.us-west-2.amazonaws.com` In questo esempio, la AWS regione è «us-west-2".

1. **Nel riquadro di navigazione a sinistra, scegli **Sicuro**, scegli **Politiche**, quindi scegli Crea.** Se non hai alcuna politica nel tuo account, vedrai il messaggio «Non hai ancora alcuna politica» e potrai scegliere **Crea una politica**.

1. Inserisci un nome per la tua politica, ad esempio «esp32\$1mqtt\$1proxy\$1iot\$1policy».

1. Nella sezione **Add statements (Aggiungi istruzioni)**, scegliere **Advanced mode (Modalità avanzata)**. Copiare e incollare il seguente JSON nella finestra dell'editor policy. Sostituiscilo `aws-account-id` con l'ID del tuo account e `aws-region` con la tua regione (ad esempio, «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. Scegli **Create** (Crea).

**Crea qualsiasi cosa AWS IoT**

1. Accedi alla [console AWS IoT](https://console.aws.amazon.com/iot/).

1. Nel riquadro di navigazione a sinistra nel pannello di controllo scegliere **Manage (Gestisci)**, quindi **Things (Oggetti)**.

1. Nell'angolo in alto a destra, scegli **Crea**. Se non hai ancora nulla registrato nel tuo account, viene visualizzato il messaggio «Non hai ancora nulla» e puoi scegliere **Registra un oggetto**.

1. Nella pagina **Creazione di AWS IoT oggetti**, scegli **Crea una singola cosa**.

1. Nella pagina **Aggiungi il tuo dispositivo al registro** degli oggetti, inserisci un nome per il tuo oggetto (ad esempio, «esp32-ble»). Sono consentiti solo caratteri alfanumerici, trattini (-) e caratteri di sottolineatura (\$1). Scegli **Next (Successivo)**.

1. **Nella pagina **Aggiungi un certificato per il tuo oggetto**, in **Ignora certificato e crea oggetto, scegli Crea oggetto senza** certificato.** Poiché utilizziamo l'app mobile proxy BLE che utilizza una credenziale Amazon Cognito per l'autenticazione e l'autorizzazione, non è richiesto alcun certificato del dispositivo.

**Crea un client per l'app Amazon Cognito**

1. Accedi alla [console Amazon Cognito](https://console.aws.amazon.com/cognito/users/).

1. Nel banner di navigazione in alto a destra, scegli **Crea un pool di utenti**.

1. Inserisci il nome del pool (ad esempio, «esp32\$1mqtt\$1proxy\$1user\$1pool»).

1. Scegli **Review defaults (Esamina impostazioni predefinite)**.

1. **In **App Client, scegli Aggiungi app client****, quindi scegli Aggiungi** un app client.** 

1. Inserisci il nome del client dell'app (ad esempio «mqtt\$1app\$1client»).

1. Assicurati che l'opzione **Genera client secret sia selezionata**.

1. Scegli **Create app client** (Crea client dell'app).

1. Scegli **Return to pool details (Torna ai dettagli del pool)**.

1. Nella pagina di **revisione** del pool di utenti, scegli **Crea pool**. Dovresti vedere un messaggio che dice «Il tuo pool di utenti è stato creato con successo». Prendi nota dell'ID del pool.

1. Nel riquadro di navigazione, scegli **App client**.

1. Scegli **Mostra dettagli**. Prendi nota dell'ID del client dell'app e del segreto del client dell'app.

**Creazione di un pool di identità in Amazon Cognito**

1. Accedi alla [console Amazon Cognito](https://console.aws.amazon.com/cognito/federated).

1. Scegli **Create new identity pool** (Crea un nuovo pool di identità).

1. Immettete un nome per il pool di identità (ad esempio, «mqtt\$1proxy\$1identity\$1pool»).

1. **Espandi i provider di autenticazione.**

1. Scegli la scheda **Cognito**.

1. Inserisci l'ID del pool di utenti e l'ID client dell'app che hai annotato nei passaggi precedenti.

1. Seleziona **Create Pool** (Crea pool).

1. **Nella pagina successiva, per creare nuovi ruoli per identità autenticate e non autenticate, scegli Consenti.**

1. Prendi nota dell'ID del pool di identità, che è nel formato. `us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` 

**Allega una policy IAM all'identità autenticata**

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

1. Seleziona il pool di identità che hai appena creato (ad esempio, «mqtt\$1proxy\$1identity\$1pool»).

1. Scegli **Modifica pool di identità**.

1. Prendi nota del ruolo IAM assegnato al ruolo autenticato (ad esempio, «COGNITO\$1MQTT\$1PROXY\$1IDENTITY\$1POOLAUTH\$1ROLE»).

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

1. Nel pannello di navigazione, selezionare **Ruoli**.

1. Cerca il ruolo assegnato (ad esempio, «COGNITO\$1MQTT\$1Proxy\$1Identity\$1PoolAuth\$1Role»), quindi selezionalo.

1. **Scegli** Aggiungi politica in linea**,** quindi scegli JSON.

1. Immettere la seguente policy:

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

****  

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

------

1. Scegli **Esamina la policy**.

1. Inserisci il nome di una politica (ad esempio, "mqttProxyCognitoPolicy»).

1. Scegli **Crea policy**.

## Fase 4: Configurazione di Amazon FreerTOS
<a name="ota-updates-esp32-ble-step4"></a>

1. [Scarica l'ultima versione del codice Amazon FreerTOS dal repository FreerTOS. GitHub ](https://github.com/aws/amazon-freertos)

1. Per abilitare la demo di aggiornamento OTA, segui i passaggi indicati. [Guida introduttiva all'Espressif ESP32 - DevKit C e al ESP-WROVER-KIT](getting_started_espressif.md) 

1. Apporta queste modifiche aggiuntive nei seguenti file: 

   1. Apri `vendors/espressif/boards/esp32/aws_demos/config_files/aws_demo_config.h` e definisci`CONFIG_OTA_UPDATE_DEMO_ENABLED`.

   1. Apri `vendors/espressif/boards/esp32/aws_demos/common/config_files/aws_demo_config.h` e cambia `democonfigNETWORK_TYPES` in`AWSIOT_NETWORK_TYPE_BLE`.

   1. Apri `demos/include/aws_clientcredential.h` e inserisci l'URL dell'endpoint per`clientcredentialMQTT_BROKER_ENDPOINT`.

      Inserisci il nome dell'oggetto per `clientcredentialIOT_THING_NAME` (ad esempio, «esp32-ble»). Non è necessario aggiungere certificati quando utilizzi le credenziali di Amazon Cognito.

   1. Apri `vendors/espressif/boards/esp32/aws_demos/config_files/aws_iot_network_config.h` e modifica `configSUPPORTED_NETWORKS` e solo `configENABLED_NETWORKS` per includere. `AWSIOT_NETWORK_TYPE_BLE`

   1. Apri il `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` file e inserisci il certificato.

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

   L'applicazione dovrebbe avviarsi e stampare la versione demo:

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

## Passaggio 5: configura un'app per Android
<a name="ota-updates-esp32-ble-step5"></a>

1. Scarica l'SDK Bluetooth Low Energy per Android e un'app di esempio dal repository [amazon-freertos-ble-android GitHub -sdk](https://github.com/aws/amazon-freertos-ble-android-sdk).

1. Apri il file `app/src/main/res/raw/awsconfiguration.json` e inserisci l'ID del pool, la regione e AppClientSecret utilizza le istruzioni nel seguente esempio JSON. 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. Apri `app/src/main/java/software/amazon/freertos/DemoConstants.java` e inserisci il nome della policy che hai creato in precedenza (ad esempio,*esp32\$1mqtt\$1proxy\$1iot\$1policy*) e anche la regione (ad esempio,*us-east-1*).

1. Crea e installa l'app demo.

   1. In Android Studio, scegli **Build**, quindi **l'app Make Module**.

   1. Scegli **Esegui**, quindi **Esegui app**. Puoi andare al riquadro della finestra logcat in Android Studio per monitorare i messaggi di registro.

   1. Sul dispositivo Android, crea un account dalla schermata di accesso.

   1. Creare un utente. Se esiste già un utente, inserisci le credenziali.

   1. Consenti alla demo di Amazon FreerTOS di accedere alla posizione del dispositivo.

   1. Cerca dispositivi Bluetooth Low Energy.

   1. Sposta il cursore del dispositivo trovato **su** Attivato.

   1. Premi **y** sulla console di debug della porta seriale per. ESP32

   1. Scegli **Pair & Connect**.

1. **Altro...** il collegamento diventa attivo dopo aver stabilito la connessione. Lo stato della connessione dovrebbe cambiare in «BLE\$1CONNECTED» nel logcat del dispositivo Android quando la connessione è completa:

   ```
   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. Prima che i messaggi possano essere trasmessi, il dispositivo Amazon FreerTOS e il dispositivo Android negoziano l'MTU. Dovresti vedere il seguente output in logcat:

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

1. Il dispositivo si connette all'app e inizia a inviare messaggi MQTT utilizzando il proxy MQTT. Per confermare che il dispositivo è in grado di comunicare, assicuratevi che il valore dei dati caratteristici MQTT\$1CONTROL sia impostato su 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 i dispositivi sono associati, verrà visualizzato un messaggio sulla console. ESP32 **Per abilitare BLE, premi y.** La demo non funzionerà finché non eseguirai questo passaggio. 

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

## Passaggio 6: Esegui lo script di aggiornamento OTA
<a name="ota-updates-esp32-ble-step6"></a>

1. Per installare i prerequisiti, esegui i seguenti comandi:

   ```
   pip3 install boto3
   ```

   ```
   pip3 install pathlib
   ```

1. Incrementa la versione dell'applicazione FreerTOS in. `demos/include/aws_application_version.h`

1. Crea un nuovo file.bin.

1. [Scarica lo script python start\$1ota.py.](https://github.com/aws-samples/amazon-freertos-ota-scripts/blob/master/scripts/start_ota.py) Per vedere il contenuto della guida dello script, esegui il seguente comando in una finestra di terminale:

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

   Viene visualizzato quanto segue:

   ```
   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 hai utilizzato il CloudFormation modello fornito per creare risorse, esegui il comando seguente:

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

   Dovresti vedere l'avvio dell'aggiornamento nella console di ESP32 debug: 

   ```
   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. Una volta completato l'aggiornamento OTA, il dispositivo si riavvia come richiesto dal processo di aggiornamento OTA. Quindi tenta di connettersi utilizzando il firmware aggiornato. Se l'aggiornamento è riuscito, il firmware aggiornato viene contrassegnato come attivo e la versione aggiornata dovrebbe essere visualizzata nella console:

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