

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Over-the-air memperbarui aplikasi demo
<a name="ota-demo"></a>

FreeRTOS menyertakan aplikasi demo yang menunjukkan fungsionalitas perpustakaan (OTA) over-the-air. Aplikasi demo OTA terletak di `freertos/demos/ota/ota_demo_core_mqtt/ota_demo_core_mqtt.c` atau `freertos/demos/ota/ota_demo_core_http/ota_demo_core_http.c` file.

Aplikasi demo OTA melakukan hal berikut:

1. Menginisialisasi tumpukan jaringan FreeRTOS dan kumpulan buffer MQTT.

1. Membuat tugas untuk menggunakan pustaka OTA menggunakan`vRunOTAUpdateDemo()`.

1. Membuat klien MQTT menggunakan. `_establishMqttConnection()`

1. Terhubung ke broker AWS IoT MQTT menggunakan `IotMqtt_Connect()` dan mendaftarkan panggilan balik pemutusan MQTT:. `prvNetworkDisconnectCallback`

1. Panggilan `OTA_AgentInit()` untuk membuat tugas OTA dan mendaftarkan panggilan balik yang akan digunakan saat tugas OTA selesai.

1. Menggunakan kembali koneksi MQTT dengan `xOTAConnectionCtx.pvControlClient = _mqttConnection;`

1. Jika MQTT terputus, aplikasi menangguhkan agen OTA, mencoba menyambung kembali menggunakan penundaan eksponensial dengan jitter, dan kemudian melanjutkan agen OTA.

Sebelum Anda dapat menggunakan pembaruan OTA, lengkapi semua prasyarat di [Pembaruan FreeRTOS Over-the-Air](freertos-ota-dev.md)

Setelah Anda menyelesaikan pengaturan untuk pembaruan OTA, unduh, buat, flash, dan jalankan demo FreeRTOS OTA pada platform yang mendukung fungsionalitas OTA. Instruksi demo khusus perangkat tersedia untuk perangkat berkualifikasi Freertos berikut:
+ [Texas Instrumen CC3220 SF-LAUNCHXL](download-ota-ti.md)
+ [Keingintahuan PIC32 Microchip MZEF](download-ota-mchip.md)
+ [Espressif ESP32](download-ota-esp.md)
+ [Unduh, buat, flash, dan jalankan demo FreerTOS OTA di Renesas N RX65](download-rx65n-ota.md)

Setelah Anda membangun, mem-flash, dan menjalankan aplikasi demo OTA di perangkat Anda, Anda dapat menggunakan AWS IoT konsol atau AWS CLI untuk membuat pekerjaan pembaruan OTA. Setelah Anda membuat pekerjaan pembaruan OTA, sambungkan emulator terminal untuk melihat kemajuan pembaruan OTA. Catat kesalahan apa pun yang dihasilkan selama proses berlangsung.

Pekerjaan pembaruan OTA yang berhasil menampilkan output seperti berikut ini. Beberapa baris dalam contoh ini telah dihapus dari daftar untuk singkatnya.

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

Konfigurasi demo OTA adalah opsi konfigurasi khusus demo yang disediakan di. `aws_iot_ota_update_demo.c` Konfigurasi ini berbeda dari konfigurasi pustaka OTA yang disediakan dalam file konfigurasi pustaka OTA. 

**OTA\$1DEMO\$1KEEP\$1ALIVE\$1SECONDS**  
Untuk klien MQTT, konfigurasi ini adalah interval waktu maksimum yang dapat berlalu antara menyelesaikan transmisi satu paket kontrol dan mulai mengirim paket berikutnya. Dengan tidak adanya paket kontrol, PINGREQ dikirim. Pialang harus memutuskan koneksi klien yang tidak mengirim pesan atau paket PINGREQ dalam satu setengah kali interval tetap hidup ini. Konfigurasi ini harus disesuaikan berdasarkan persyaratan aplikasi.

**OTA\$1DEMO\$1CONN\$1RETRY\$1BASE\$1INTERVAL\$1SECONDS**  
Interval dasar, dalam hitungan detik, sebelum mencoba kembali koneksi jaringan. Demo OTA akan mencoba menyambung kembali setelah interval waktu dasar ini. Interval digandakan setelah setiap upaya yang gagal. Penundaan acak, hingga maksimum penundaan dasar ini, juga ditambahkan ke interval.

**OTA\$1DEMO\$1CONN\$1RETRY\$1MAX\$1INTERVAL\$1SECONDS**  
Interval maksimum, dalam hitungan detik, sebelum mencoba kembali koneksi jaringan. Penundaan koneksi kembali digandakan pada setiap upaya yang gagal, tetapi hanya dapat mencapai nilai maksimum ini, ditambah jitter dengan interval yang sama.

# Unduh, buat, flash, dan jalankan demo FreerTOS OTA di Texas Instruments SF-LAUNCHXL CC3220
<a name="download-ota-ti"></a>

**penting**  <a name="deprecation-message"></a>
Integrasi referensi ini di-host di repositori Amazon-Freertos yang tidak digunakan lagi. Kami menyarankan Anda [mulai di sini](freertos-getting-started-modular.md) ketika Anda membuat proyek baru. Jika Anda sudah memiliki proyek FreeRTOS yang sudah ada berdasarkan repositori Amazon-Freertos yang sekarang tidak digunakan lagi, lihat. [Panduan Migrasi Repositori Github Amazon-freertos](github-repo-migration.md)<a name="download-demo"></a>

**Untuk mengunduh FreeRTOS dan kode demo OTA**
+ Anda dapat mengunduh kode sumber di GitHub situs di [https://github.com/FreeRTOS/FreeRTOS](https://github.com/FreeRTOS/FreeRTOS). <a name="build-demo"></a>

**Untuk membangun aplikasi demo**

1. Ikuti petunjuk [Memulai dengan FreeRTOS](freertos-getting-started.md) untuk mengimpor `aws_demos` proyek ke Code Composer Studio, konfigurasikan AWS IoT titik akhir Anda, SSID Wi-Fi dan kata sandi Anda, serta kunci pribadi dan sertifikat untuk papan Anda.

1.  Buka`freertos/vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h`, beri komentar`#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED`, dan tentukan `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` atau`CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`.

1. Bangun solusinya dan pastikan itu dibangun tanpa kesalahan.

1. Mulai emulator terminal dan gunakan pengaturan berikut untuk terhubung ke papan Anda:
   + Tingkat baud: 115200
   + Bit data: 8
   + Paritas: Tidak ada
   + Hentikan bit: 1

1. Jalankan proyek di papan Anda untuk mengonfirmasi bahwa proyek tersebut dapat terhubung ke Wi-Fi dan broker AWS IoT pesan MQTT.

Saat dijalankan, emulator terminal akan menampilkan teks seperti berikut:

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

# Unduh, buat, flash, dan jalankan demo FreerTOS OTA di Microchip Curiosity MZEF PIC32
<a name="download-ota-mchip"></a>

**penting**  <a name="deprecation-message"></a>
Integrasi referensi ini di-host di repositori Amazon-Freertos yang tidak digunakan lagi. Kami menyarankan Anda [mulai di sini](freertos-getting-started-modular.md) ketika Anda membuat proyek baru. Jika Anda sudah memiliki proyek FreeRTOS yang sudah ada berdasarkan repositori Amazon-Freertos yang sekarang tidak digunakan lagi, lihat. [Panduan Migrasi Repositori Github Amazon-freertos](github-repo-migration.md)

**catatan**  
Sesuai dengan Microchip, kami menghapus Curiosity PIC32 MZEF () DM320104 dari cabang utama repositori Freertos Reference Integration dan tidak akan lagi membawanya dalam rilis baru. Microchip telah mengeluarkan [pemberitahuan resmi](https://www.microchip.com/DevelopmentTools/ProductDetails/PartNO/DM320104) bahwa PIC32 MZEF (DM320104) tidak lagi direkomendasikan untuk desain baru. Proyek PIC32 MZEF dan kode sumber masih dapat diakses melalui tag rilis sebelumnya. Microchip merekomendasikan agar pelanggan menggunakan [papan Pengembangan Curiosity PIC32 MZ-EF-2.0 ()](https://devices.amazonaws.com/detail/a3G0h0000077I69EAE/Curiosity-PIC32MZ-EF-2-0-Development-Board) untuk desain baru. DM320209 PIC32MZv1 Platform ini masih dapat ditemukan di [v202012.00 dari repositori Integrasi Referensi](https://github.com/aws/amazon-freertos/tree/202012.00) FreeRTOS. Namun, platform ini tidak lagi didukung oleh Referensi FreeRTOS [v202107.00](https://github.com/aws/amazon-freertos/tree/202107.00).<a name="mch-dowload-demo"></a>

**Untuk mengunduh kode demo FreeRTOS OTA**
+ Anda dapat mengunduh kode sumber di GitHub situs di [https://github.com/FreeRTOS/FreeRTOS](https://github.com/FreeRTOS/FreeRTOS). <a name="mch-build-demo"></a>

**Untuk membangun aplikasi demo pembaruan OTA**

1. Ikuti petunjuk [Memulai dengan FreeRTOS](freertos-getting-started.md) untuk mengimpor `aws_demos` proyek ke MPLAB X IDE, konfigurasikan AWS IoT titik akhir Anda, SSID Wi-Fi dan kata sandi Anda, serta kunci pribadi dan sertifikat untuk papan Anda.

1. Buka `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` file, dan masukkan sertifikat Anda.

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

1. Tempel konten sertifikat penandatanganan kode Anda di sini:

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

   Ikuti format yang sama dengan `aws_clientcredential_keys.h` -- setiap baris harus diakhiri dengan karakter baris baru ('\$1n') dan diapit tanda kutip.

   Misalnya, sertifikat Anda akan terlihat mirip dengan yang berikut ini:

   ```
   "-----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. Instal [Python 3](https://www.python.org/downloads/) atau yang lebih baru.

1. Instal `pyOpenSSL` dengan menjalankan`pip install pyopenssl`.

1. Salin sertifikat penandatanganan kode Anda dalam format.pem di jalur. `demos/ota/bootloader/utility/codesigner_cert_utility/` Ganti nama file `aws_ota_codesigner_certificate.pem` sertifikat.

1.  Buka`freertos/vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h`, beri komentar`#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED`, dan tentukan `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` atau`CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`.

1. Bangun solusinya dan pastikan itu dibangun tanpa kesalahan.

1. Mulai emulator terminal dan gunakan pengaturan berikut untuk terhubung ke papan Anda:
   + Tingkat baud: 115200
   + Bit data: 8
   + Paritas: Tidak ada
   + Hentikan bit: 1

1. Cabut debugger dari papan Anda dan jalankan proyek di papan Anda untuk mengonfirmasi bahwa debugger dapat terhubung ke Wi-Fi dan broker pesan AWS IoT MQTT.

Ketika Anda menjalankan proyek, MPLAB X IDE harus membuka jendela output. Pastikan **ICD4**tab dipilih. Anda akan melihat output berikut.

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

Emulator terminal harus menampilkan teks seperti berikut:

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

Output ini menunjukkan Microchip Curiosity PIC32 MZEF dapat terhubung AWS IoT dan berlangganan topik MQTT yang diperlukan untuk pembaruan OTA. `Missing job parameter`Pesan diharapkan karena tidak ada pekerjaan pembaruan OTA yang tertunda.

# Unduh, buat, flash, dan jalankan demo FreeRTOS OTA di Espressif ESP32
<a name="download-ota-esp"></a>

**penting**  <a name="deprecation-message"></a>
Integrasi referensi ini di-host di repositori Amazon-Freertos yang tidak digunakan lagi. Kami menyarankan Anda [mulai di sini](freertos-getting-started-modular.md) ketika Anda membuat proyek baru. Jika Anda sudah memiliki proyek FreeRTOS yang sudah ada berdasarkan repositori Amazon-Freertos yang sekarang tidak digunakan lagi, lihat. [Panduan Migrasi Repositori Github Amazon-freertos](github-repo-migration.md)

1. Unduh sumber FreeRTOS dari. [GitHub](https://github.com/aws/amazon-freertos) Lihat file [README.md](https://github.com/aws/amazon-freertos/blob/main/README.md) untuk instruksi. Buat proyek di IDE Anda yang mencakup semua sumber dan pustaka yang diperlukan.

1. Ikuti petunjuk di [Memulai dengan Espressif](https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html) untuk menyiapkan toolchain berbasis GCC yang diperlukan.

1. Buka`freertos/vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h`, beri komentar`#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED`, dan tentukan `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` atau`CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`.

1. Bangun proyek demo dengan berjalan `make` di `vendors/espressif/boards/esp32/aws_demos` direktori. Anda dapat mem-flash program demo dan memverifikasi outputnya dengan menjalankan`make flash monitor`, seperti yang dijelaskan dalam [Memulai dengan Espressif](https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html).

1. Sebelum menjalankan demo Pembaruan OTA:
   + Buka`freertos/vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h`, beri komentar`#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED`, dan tentukan `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` atau`CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`.
   + Buka`vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h`, dan salin sertifikat penandatanganan kode SHA-256/ECDSA Anda di:

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

# Unduh, buat, flash, dan jalankan demo FreerTOS OTA di Renesas N RX65
<a name="download-rx65n-ota"></a>

**penting**  <a name="deprecation-message"></a>
Integrasi referensi ini di-host di repositori Amazon-Freertos yang tidak digunakan lagi. Kami menyarankan Anda [mulai di sini](freertos-getting-started-modular.md) ketika Anda membuat proyek baru. Jika Anda sudah memiliki proyek FreeRTOS yang sudah ada berdasarkan repositori Amazon-Freertos yang sekarang tidak digunakan lagi, lihat. [Panduan Migrasi Repositori Github Amazon-freertos](github-repo-migration.md)

Bab ini menunjukkan cara mengunduh, membangun, mem-flash, dan menjalankan aplikasi demo FreerTOS OTA di Renesas N. RX65

**Topics**
+ [Siapkan lingkungan operasi Anda](#download-rx65n-ota-environment)
+ [Siapkan AWS sumber daya Anda](#download-rx65n-ota-setup)
+ [Impor, konfigurasikan file header dan buat aws\$1demos dan boot\$1loader](#download-rx65n-ota-import-configure)

## Siapkan lingkungan operasi Anda
<a name="download-rx65n-ota-environment"></a>

Prosedur di bagian ini menggunakan lingkungan berikut:
+ **IDE**: 2 studio 7.8.0, dan 2 studio 2020-07
+ **Rantai Alat**: CCRX Compiler v3.0.1
+ **Perangkat target**: RSKRX65 N-2MB
+ **Debugger**: E 2, E 2 Lite emulator
+ **Perangkat lunak**: Renesas Flash Programmer, Renesas Secure Flash Programmer.exe, Tera Term

**Untuk mengatur perangkat keras Anda**

1. Hubungkan emulator E 2 Lite dan port serial USB ke papan RX65 N dan PC Anda.

1. Hubungkan sumber daya ke RX65 N.

## Siapkan AWS sumber daya Anda
<a name="download-rx65n-ota-setup"></a>

1. Untuk menjalankan demo FreeRTOS, Anda harus memiliki akun dengan pengguna IAM AWS yang memiliki izin untuk mengakses layanan. AWS IoT Jika Anda belum melakukannya, ikuti langkah-langkahnya[Menyiapkan AWS akun dan izin](freertos-prereqs.md#freertos-account-and-permissions).

1. Untuk mengatur pembaruan OTA, ikuti langkah-langkahnya[Prasyarat pembaruan OTA](ota-prereqs.md). Secara khusus, ikuti langkah-langkahnya[Prasyarat untuk pembaruan OTA menggunakan MQTT](ota-mqtt-freertos.md).

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

1. Di panel navigasi kiri, pilih **Kelola**, lalu pilih **Things** to create a thing.

   Sesuatu adalah representasi dari perangkat atau entitas logis di AWS IoT. Ini bisa berupa perangkat fisik atau sensor (misalnya, bola lampu atau sakelar di dinding). Ini juga bisa menjadi entitas logis seperti contoh aplikasi atau entitas fisik yang tidak terhubung AWS IoT, tetapi terkait dengan perangkat yang melakukannya (misalnya, mobil yang memiliki sensor mesin atau panel kontrol). AWS IoT menyediakan registri sesuatu yang membantu Anda mengelola barang-barang Anda.

   1. Pilih **Buat**, lalu pilih **Buat satu hal**.

   1. Masukkan **Nama** untuk barang Anda, lalu pilih **Berikutnya**.

   1. Pilih **Buat sertifikat**.

   1. Unduh tiga file yang dibuat dan kemudian pilih **Aktifkan**. 

   1. Pilih **Lampirkan kebijakan**.  
![\[layar konsol yang menampilkan file yang akan diunduh\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/download-these-files-rx65n.png)

   1. Pilih kebijakan yang Anda buat[Kebijakan perangkat](ota-mqtt-freertos.md#ota-mqtt-freertos-device-policy).

      Setiap perangkat yang menerima pembaruan OTA menggunakan MQTT harus terdaftar sebagai sesuatu AWS IoT dan benda tersebut harus memiliki kebijakan terlampir seperti yang terdaftar. Anda dapat menemukan informasi selengkapnya tentang item dalam `"Action"` dan `"Resource"` objek di [Tindakan Kebijakan AWS IoT Inti](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html) dan [Sumber Daya Tindakan AWS IoT Inti](https://docs.aws.amazon.com/iot/latest/developerguide/iot-action-resources.html).

**Catatan**
      + `iot:Connect`Izin memungkinkan perangkat Anda terhubung AWS IoT melalui MQTT.
      + `iot:Publish`Izin `iot:Subscribe` dan pada topik AWS IoT pekerjaan (`.../jobs/*`) memungkinkan perangkat yang terhubung untuk menerima pemberitahuan pekerjaan dan dokumen pekerjaan, dan untuk mempublikasikan status penyelesaian pelaksanaan pekerjaan.
      + `iot:Publish`Izin `iot:Subscribe` dan tentang topik aliran AWS IoT OTA (`.../streams/*`) memungkinkan perangkat yang terhubung untuk mengambil data pembaruan OTA dari. AWS IoT Izin ini diperlukan untuk melakukan pembaruan firmware melalui MQTT.
      + `iot:Receive`Izin memungkinkan AWS IoT Core untuk mempublikasikan pesan tentang topik tersebut ke perangkat yang terhubung. Izin ini diperiksa pada setiap pengiriman pesan MQTT. Anda dapat menggunakan izin ini untuk mencabut akses ke klien yang saat ini berlangganan topik.

1. Untuk membuat profil penandatanganan kode dan mendaftarkan sertifikat penandatanganan kode pada. AWS

   1. [Untuk membuat kunci dan sertifikasi, lihat bagian 7.3 “Menghasilkan ECDSA- Pasangan SHA256 Kunci dengan OpenSSL” di Kebijakan Desain Pembaruan Firmware Renesas MCU.](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)

   1. Buka [konsol AWS IoT](https://console.aws.amazon.com/iot/home). Di panel navigasi kiri, pilih **Kelola**, lalu **Pekerjaan**. Pilih **Create a job** lalu **Create OTA update Job**. 

   1. Di bawah **Pilih perangkat yang akan diperbarui** **pilih Pilih** lalu pilih hal yang Anda buat sebelumnya. Pilih **Selanjutnya**. 

   1. Pada halaman pekerjaan **Create a FreeRTOS OTA update**, lakukan hal berikut:

      1. Untuk **Pilih protokol untuk transfer gambar firmware**, pilih **MQTT**. 

      1. Untuk **Pilih dan tandatangani gambar firmware Anda**, pilih **Tanda tangani gambar firmware baru untuk saya**. 

      1. Untuk **profil penandatanganan kode**, pilih **Buat**.

      1. Di jendela **Buat profil penandatanganan kode**, masukkan **nama Profil**. Untuk **platform perangkat keras perangkat** pilih **Windows Simulator**. Untuk **sertifikat penandatanganan kode** pilih **Impor**.

      1. Telusuri untuk memilih sertifikat (`secp256r1.crt`), kunci privat sertifikat (`secp256r1.key`), dan rantai sertifikat (`ca.crt`).

      1. Masukkan **Pathname sertifikat penandatanganan kode di perangkat**. Lalu pilih **Buat**.

1. Untuk memberikan akses ke penandatanganan kode AWS IoT, ikuti langkah-langkahnya[Berikan akses ke penandatanganan kode untuk AWS IoT](code-sign-policy.md). 

Jika Tera Term tidak diinstal pada PC Anda, Anda dapat mengunduhnya [https://ttssh2.osdn.jp/index.htmldari.en](https://ttssh2.osdn.jp/index.html.en) dan mengaturnya seperti yang ditunjukkan di sini. Pastikan Anda mencolokkan port Serial USB dari perangkat Anda ke PC Anda.

![\[Jendela pengaturan port serial Tera Term\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/tera-team-rx65n.png)


## Impor, konfigurasikan file header dan buat aws\$1demos dan boot\$1loader
<a name="download-rx65n-ota-import-configure"></a>

Untuk memulai, Anda memilih versi terbaru dari paket FreerTOS, dan ini akan diunduh GitHub dari dan diimpor secara otomatis ke proyek. Dengan cara ini Anda dapat fokus pada konfigurasi FreeRTOS dan menulis kode aplikasi.

1. Luncurkan e 2 studio.

1. Pilih **File**, lalu pilih **Impor...**

1. Pilih Proyek **Renesas FreeRTOS (dengan GitHub pustaka IoT**).  
![\[jendela impor studio e-kuadrat\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/import-renesas-project-rx65n.png)

1. Pilih **Periksa versi lainnya...** untuk menampilkan kotak dialog unduhan.  
![\[jendela dialog unduhan studio e-kuadrat\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/check-more-version-rx65n.png)

1. Pilih paket terbaru.  
![\[jendela dialog unduhan modul studio e-kuadrat\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/choose-latest-version-rx65n.png)

1. Pilih **Setuju** untuk menerima perjanjian lisensi pengguna akhir.  
![\[dialog EULA studio e-kuadrat\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/eula-rx65n.png)

1. Tunggu hingga unduhan selesai.  
![\[unduh bilah kemajuan\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/downloading-rx65n.png)

1. **Pilih proyek **aws\$1demos dan **boot\$1loader****, lalu pilih Selesai untuk mengimpornya.**  
![\[jendela proyek impor\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/import-projects-rx65n.png)

1. Untuk kedua proyek, buka properti proyek. Di panel navigasi, pilih **Tool Chain Editor**.

   1. Pilih **toolchain saat ini**.

   1. Pilih **pembangun saat ini**.  
![\[jendela properti studio e-kuadrat\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/project-properties-rx65n.png)

1. Pada panel navigasi, silakan pilih **Pengaturan**. **Pilih tab **Toolchain**, lalu pilih Versi toolchain.**  
![\[Pengaturan integrasi rantai alat untuk Renesas CCRX Version v3.01.00, dengan opsi untuk mengubah rantai alat.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/project-properties-toolchain-rx65n.png)

   Pilih tab **Pengaturan Alat**, perluas **Konverter** dan kemudian pilih **Output**. Di jendela utama, pastikan **Output hex file** dipilih, dan kemudian pilih **jenis file Output**.  
![\[C/C++ Membangun jendela pengaturan konfigurasi yang menampilkan opsi kompiler dan tautan seperti file hex output, jenis file output, direktori keluaran, dan opsi pembagian file.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/project-properties-settings-rx65n.png)  
![\[Pohon pengaturan antarmuka dengan opsi untuk Analisis Tumpukan, Editor Rantai Alat, C/C++ Umum, MCU, Referensi Proyek, dll.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/project-properties-settings-2-rx65n.png)

1. Dalam proyek bootloader, buka `projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h` dan masukkan kunci publik. [Untuk informasi tentang cara membuat kunci publik, lihat [Cara menerapkan FreeRTOS OTA dengan menggunakan Amazon Web Services RX65 di](https://www.renesas.com/us/en/document/apn/rx-family-how-implement-freertos-ota-using-amazon-web-services-rx65n) N dan bagian 7.3 “Menghasilkan ECDSA SHA256 - Pasangan Kunci dengan OpenSSL” di Kebijakan Desain Pembaruan Firmware MCU Renesas.](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)  
![\[Editor kode menampilkan file header C dengan definisi untuk CODE_SIGNER_PUBLIC_KEY dan variabel kunci publik penandatangan kode yang disandikan PEM.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/open-bootloader-project-rx65n.png)

   Kemudian bangun proyek untuk dibuat`boot_loader.mot`.

1. Buka `aws_demos` proyek.

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

   1. Pada panel navigasi kiri, pilih **Pengaturan**. Catat titik akhir kustom Anda di kotak teks **titik akhir data Perangkat**.

   1. Pilih **Kelola**, lalu pilih **Things**. Catat nama AWS IoT benda papan Anda.

   1. Dalam `aws_demos` proyek, buka `demos/include/aws_clientcredential.h` dan tentukan nilai-nilai berikut.

      ```
      #define clientcredentialMQTT_BROKER_ENDPOINT[] = "Your AWS IoT endpoint";
      #define clientcredentialIOT_THING_NAME "The AWS IoT thing name of your board"
      ```  
![\[Cuplikan kode yang menunjukkan nama AWS IoT benda dan pengaturan konfigurasi titik akhir broker.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/client-credential-rx65n.png)

   1. Buka file `tools/certificate_configuration/CertificateConfigurator.html`.

   1. Impor file PEM sertifikat dan file PEM Kunci Pribadi yang Anda unduh sebelumnya.

   1. Pilih **Generate dan save aws\$1clientcredential\$1keys.h** dan ganti file ini di direktori. `demos/include/`  
![\[Alat Konfigurasi Sertifikat dengan bidang untuk menyediakan sertifikat klien dan file PEM kunci pribadi dari AWS IoT Konsol, dan tombol untuk membuat dan menyimpan file aws_clientcredential_keys.h.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/certificate-config-tool-rx65n.png)

   1. Buka `vendors/renesas/boards/rx65n-rsk/aws_demos/config_files/ota_demo_config.h` file, dan tentukan nilai-nilai ini.

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

      *your-certificate-key*Dimana nilai dari file tersebut`secp256r1.crt`. Ingatlah untuk menambahkan “\$1” setelah setiap baris dalam sertifikasi. [Untuk informasi selengkapnya tentang membuat `secp256r1.crt` file, lihat [Cara menerapkan FreerTOS OTA menggunakan Amazon Web Services RX65 di](https://www.renesas.com/us/en/document/apn/rx-family-how-implement-freertos-ota-using-amazon-web-services-rx65n) N dan bagian 7.3 “Menghasilkan ECDSA SHA256 - Pasangan Kunci dengan OpenSSL” di Kebijakan Desain Pembaruan Firmware Renesas MCU.](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)  
![\[File kode sumber yang menunjukkan kode C yang mendefinisikan string konstan sertifikat penandatangan kode yang disandikan PEM dengan data sertifikat yang disunting.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/codesigner-cert-rx65n.png)

1. **Tugas A: Instal versi awal firmware**

   1. Buka `vendors/renesas/boards/board/aws_demos/config_files/aws_demo_config.h` file, beri komentar`#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED`, dan tentukan salah satu `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` atau`CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`.

   1. Buka `demos/include/ aws_application_version.h` file, dan atur versi awal firmware ke`0.9.2`.  
![\[Cuplikan kode yang menampilkan definisi versi untuk aplikasi, termasuk makro untuk nomor versi mayor, minor, dan build.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/firmware-version-rx65n.png)

   1. Ubah pengaturan berikut di **Penampil Bagian**.  
![\[Jendela penampil bagian yang menampilkan alamat memori, nama bagian seperti SU, SI, register, dan komponen antarmuka seperti buffer jaringan, pengecualian, dan tombol tindakan.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/section-viewer-rx65n.png)

   1. Pilih **Build** untuk membuat `aws_demos.mot` file.

1. Buat file `userprog.mot` dengan Renesas Secure Flash Programmer. `userprog.mot`adalah kombinasi dari `aws_demos.mot` dan`boot_loader.mot`. Anda dapat mem-flash file ini ke RX65 N-RSK untuk menginstal firmware awal.

   1. Unduh [ https://github.com/renesas/Amazon-Freertos-Tools](https://github.com/renesas/Amazon-FreeRTOS-Tools) dan buka. `Renesas Secure Flash Programmer.exe`

   1. Pilih tab **Firm Awal** dan kemudian atur parameter berikut:
      + **Private Key Path** — Lokasi`secp256r1.privatekey`.
      + **Jalur File Boot Loader** — Lokasi `boot_loader.mot` (`projects\renesas\rx65n-rsk\e2studio\boot_loader\HardwareDebug`).
      + **File Path** — Lokasi dari `aws_demos.mot` (`projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug`).  
![\[Jendela Renesas Secure Flash Programmer dengan MCU, verifikasi firmware, nomor urut, jalur kunci AES, dan bidang jalur file.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/secure-flash-rx65n.png)

   1. Buat direktori bernama`init_firmware`, Hasilkan`userprog.mot`, dan simpan ke `init_firmware` direktori. Verifikasi bahwa hasil berhasil.

1. Flash firmware awal pada RX65 N-RSK.

   1. [Unduh versi terbaru dari Renesas Flash Programmer (Programming GUI) dari - .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. Buka `vendors\renesas\rx_mcu_boards\boards\rx65n-rsk\aws_demos\flash_project\erase_from_bank\ erase.rpj` file untuk menghapus data di bank.

   1. Pilih **Mulai** untuk menghapus bank.  
![\[Jendela Renesas Flash Programmer yang menampilkan detail proyek mikrokontroler Grup RX, jalur file, dan opsi operasi flash seperti Hapus, Program, dan Verifikasi dengan tombol Mulai dan OK.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/flash-programmer-erasing-rx65n.png)

   1. Untuk mem-flash`userprog.mot`, pilih **Browse...** dan navigasikan ke `init_firmware` direktori, pilih `userprog.mot` file dan pilih **Mulai**.  
![\[Jendela Renesas Flash Programmer yang menampilkan pengaturan operasi hapus, termasuk mikrokontroler RX Group, opsi untuk menelusuri file program, tombol Hapus dan Mulai, dan detail status pada blok yang dipilih untuk dihapus.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/flash-programmer-complete-rx65n.png)

1. Versi 0.9.2 (versi awal) dari firmware telah diinstal ke N-RSK Anda RX65. Papan RX65 N-RSK sekarang mendengarkan pembaruan OTA. Jika Anda telah membuka Tera Term di PC Anda, Anda melihat sesuatu seperti berikut ketika firmware awal berjalan.

   ```
   -------------------------------------------------
   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. **Tugas B: Perbarui versi firmware Anda**

   1. Buka `demos/include/aws_application_version.h` file dan naikkan nilai `APP_VERSION_BUILD` token ke`0.9.3`.

   1. Membangun kembali proyek.

1. Buat `userprog.rsu` file dengan Renesas Secure Flash Programmer untuk memperbarui versi firmware Anda.

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

   1. Pilih tab **Perbarui Perusahaan** dan atur parameter berikut:
      + **File Path** — Lokasi `aws_demos.mot` file (`projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug`).

   1. Membuat sebuah direktori bernama `update _firmware`. Hasilkan `userprog.rsu` dan simpan ke `update_firmware` direktori. Verifikasi bahwa hasil berhasil.  
![\[Jendela Renesas Secure Flash Programmer dengan pemilihan MCU, jenis verifikasi firmware, nomor urut, bidang kunci AES MAC, dan input jalur file untuk menghasilkan firmware yang aman.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/update-firmware-rx65n.png)

1. Unggah pembaruan firmware,`userproj.rsu`, ke dalam bucket Amazon S3 seperti yang dijelaskan dalam. [Buat bucket Amazon S3 untuk menyimpan pembaruan Anda](dg-ota-bucket.md)   
![\[Antarmuka manajemen bucket Amazon S3 dengan folder, unggahan, versi, dan opsi izin\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/upload-firmware-rx65n.png)

1. Buat pekerjaan untuk memperbarui firmware pada RX65 N-RSK.

   AWS IoT Jobs adalah layanan yang memberi tahu satu atau beberapa perangkat yang terhubung tentang [Job](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html) yang tertunda. Pekerjaan dapat digunakan untuk mengelola armada perangkat, memperbarui firmware dan sertifikat keamanan pada perangkat, atau melakukan tugas administratif seperti memulai ulang perangkat dan melakukan diagnostik.

   1. Masuk ke [konsol AWS IoT](https://console.aws.amazon.com/iotv2/) tersebut. Di panel navigasi, pilih **Kelola**, dan pilih **Pekerjaan**.

   1. Pilih **Buat pekerjaan**, lalu pilih **Buat pekerjaan Pembaruan OTA**. Pilih sesuatu, lalu pilih **Berikutnya**.

   1. Buat pekerjaan pembaruan FreeRTOS OTA sebagai berikut:
      + Pilih **MQTT**.
      + Pilih profil penandatanganan kode yang Anda buat di bagian sebelumnya.
      + Pilih gambar firmware yang Anda unggah ke bucket Amazon S3.
      + Untuk **Pathname gambar firmware pada perangkat**, masukkan**test**.
      + Pilih peran IAM yang Anda buat di bagian sebelumnya.

   1. Pilih **Berikutnya**.  
![\[Tanda gambar firmware dan pengaturan pembaruan OTA dengan opsi untuk menandatangani firmware baru, memilih firmware yang ditandatangani sebelumnya, menggunakan firmware yang ditandatangani khusus, menentukan profil penandatanganan kode, file gambar firmware, jalur di perangkat, dan peran IAM untuk pekerjaan pembaruan OTA.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/create-job-next-rx65n.png)

   1. Masukkan ID lalu pilih **Buat**.

1. Buka kembali Tera Term untuk memverifikasi bahwa firmware berhasil diperbarui ke versi demo OTA 0.9.3.  
![\[Output baris perintah menunjukkan inisialisasi dan koneksi thread ke broker.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/update-successful-rx65n.png)

1. Di AWS IoT konsol, verifikasi bahwa status pekerjaan **berhasil.**  
![\[Ikhtisar pekerjaan tes AFR OTA-demo menunjukkan 1 sumber daya berhasil.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/completed-succeeded-rx65n.png)

# Tutorial: Lakukan pembaruan OTA di Espressif menggunakan ESP32 FreeRTOS Bluetooth Low Energy
<a name="ota-updates-esp32-ble"></a>

**penting**  <a name="deprecation-message"></a>
Integrasi referensi ini di-host di repositori Amazon-Freertos yang tidak digunakan lagi. Kami menyarankan Anda [mulai di sini](freertos-getting-started-modular.md) ketika Anda membuat proyek baru. Jika Anda sudah memiliki proyek FreeRTOS yang sudah ada berdasarkan repositori Amazon-Freertos yang sekarang tidak digunakan lagi, lihat. [Panduan Migrasi Repositori Github Amazon-freertos](github-repo-migration.md)

Tutorial ini menunjukkan cara memperbarui ESP32 mikrokontroler Espressif yang terhubung ke proxy Bluetooth Low Energy MQTT di perangkat Android. Ini memperbarui perangkat menggunakan pekerjaan pembaruan AWS IoT Over-the-air (OTA). Perangkat terhubung untuk AWS IoT menggunakan kredensi Amazon Cognito yang dimasukkan di aplikasi demo Android. Operator resmi memulai pembaruan OTA dari cloud. Saat perangkat terhubung melalui aplikasi demo Android, pembaruan OTA dimulai dan firmware diperbarui di perangkat. 

Versi FreeRTOS 2019.06.00 Major dan yang lebih baru termasuk dukungan proxy Bluetooth Low Energy MQTT yang dapat digunakan untuk penyediaan Wi-Fi dan koneksi aman ke layanan. AWS IoT Dengan menggunakan fitur Bluetooth Low Energy, Anda dapat membangun perangkat berdaya rendah yang dapat dipasangkan ke perangkat seluler untuk konektivitas tanpa memerlukan Wi-Fi. Perangkat dapat berkomunikasi menggunakan MQTT dengan menghubungkan melalui Android atau iOS Bluetooth Low Energy SDKs yang menggunakan profil akses generik (GAP) dan atribut generik (GATT).

Berikut adalah langkah-langkah yang akan kami ikuti untuk memungkinkan pembaruan OTA melalui Bluetooth Low Energy:

1. **Konfigurasikan penyimpanan:** Buat bucket dan kebijakan Amazon S3 dan konfigurasikan pengguna yang dapat melakukan pembaruan.

1. **Buat sertifikat penandatanganan kode:** Buat sertifikat penandatanganan dan izinkan pengguna menandatangani pembaruan firmware.

1. **Konfigurasikan autentikasi Amazon Cognito:** Buat penyedia kredensi, kumpulan pengguna, dan akses aplikasi ke kumpulan pengguna.

1. **Konfigurasikan FreeRTOS**: Siapkan Bluetooth Low Energy, kredensi klien, dan sertifikat publik penandatanganan kode.

1. **Konfigurasikan aplikasi Android:** Siapkan penyedia kredensi, kumpulan pengguna, dan terapkan aplikasi ke perangkat Android.

1. **Jalankan skrip pembaruan OTA:** Untuk memulai pembaruan OTA, gunakan skrip pembaruan OTA.

Untuk informasi selengkapnya tentang cara kerja pembaruan, lihat[Pembaruan FreeRTOS Over-the-Air](freertos-ota-dev.md). Untuk informasi tambahan tentang cara mengatur fungsionalitas proxy Bluetooth Low Energy MQTT, lihat posting [Menggunakan Bluetooth Low Energy dengan FreeRTOS di Espressif oleh Richard Kang](https://aws.amazon.com/blogs/iot/using-bluetooth-low-energy-with-amazon-freertos-on-espressif-esp32/). ESP32

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

Untuk melakukan langkah-langkah dalam tutorial ini, Anda memerlukan sumber daya berikut:
+ Papan ESP32 pengembangan.
+ Kabel microUSB ke USB A.
+  AWS Akun (Tingkat Gratis sudah cukup).
+ Ponsel Android dengan Android v 6.0 atau yang lebih baru dan Bluetooth versi 4.2 atau yang lebih baru.

Di komputer pengembangan Anda, Anda membutuhkan:
+ Ruang disk yang cukup (\$1 500 Mb) untuk toolchain Xtensa dan kode sumber FreerTOS dan contoh.
+ Android Studio diinstal.
+ Yang [AWS CLI](https://aws.amazon.com/cli/)diinstal.
+ Python3 diinstal.
+ [Kit Pengembang AWS Perangkat Lunak (SDK) boto3 untuk Python](https://github.com/boto/boto3).

Langkah-langkah dalam tutorial ini mengasumsikan bahwa Xtensa toolchain, ESP-IDF, dan kode FreeRTOS diinstal di direktori di direktori home Anda. `/esp` Anda harus menambahkan `~/esp/xtensa-esp32-elf/bin` ke `$PATH` variabel Anda.

## Langkah 1: Konfigurasikan penyimpanan
<a name="ota-updates-esp32-ble-step1"></a>

1. [Buat bucket Amazon S3 untuk menyimpan pembaruan Anda](dg-ota-bucket.md)dengan versi diaktifkan untuk menahan gambar firmware.

1. [Buat peran layanan Pembaruan OTA](create-service-role.md)dan tambahkan kebijakan terkelola berikut ke peran:
   + AWSIotPenebangan
   + AWSIotRuleActions
   + AWSIotThingsRegistration
   + AWSFreeRTOSOTAUpdate

1. [Buat pengguna](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html) yang dapat melakukan pembaruan OTA. Pengguna ini dapat menandatangani dan menyebarkan pembaruan firmware ke perangkat IoT di akun, dan memiliki akses untuk melakukan pembaruan OTA di semua perangkat. Akses harus dibatasi untuk entitas tepercaya.

1. Ikuti langkah-langkahnya [Buat kebijakan pengguna OTA](create-ota-user-policy.md) dan lampirkan ke pengguna Anda.

## Langkah 2: Buat sertifikat penandatanganan kode
<a name="ota-updates-esp32-ble-step2"></a>

1. Buat bucket Amazon S3 dengan versi yang diaktifkan untuk menyimpan gambar firmware.

1. Buat sertifikat penandatanganan kode yang dapat digunakan untuk menandatangani firmware. Perhatikan sertifikat Amazon Resource Name (ARN) saat sertifikat diimpor.

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

   Contoh output:

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

   Anda akan menggunakan ARN nanti untuk membuat profil penandatanganan. Jika mau, Anda dapat membuat profil sekarang dengan perintah berikut:

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

   Contoh output:

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

## Langkah 3: Konfigurasi otentikasi Amazon Cognito
<a name="ota-updates-esp32-ble-step3"></a>

**Buat AWS IoT kebijakan**

1. Masuk ke [konsol AWS IoT](https://console.aws.amazon.com/iot/) tersebut.

1. **Di sudut kanan atas konsol, pilih Akun Saya.** Di bawah **Pengaturan Akun**, catat 12 digit ID akun Anda.

1. Pada panel navigasi kiri, pilih **Pengaturan**. Di **titik akhir data Perangkat**, catat nilai titik akhir. Titik akhir harus seperti`xxxxxxxxxxxxxx.iot.us-west-2.amazonaws.com`. Dalam contoh ini, AWS Region adalah “us-west-2".

1. Di panel navigasi kiri, pilih **Aman**, pilih **Kebijakan**, lalu pilih **Buat**. Jika Anda tidak memiliki kebijakan apa pun di akun Anda, Anda akan melihat pesan “Anda belum memiliki kebijakan apa pun” dan Anda dapat memilih **Buat kebijakan**.

1. Masukkan nama untuk kebijakan Anda, misalnya, “esp32\$1mqtt\$1proxy\$1iot\$1policy”.

1. Di bagian **Tambahkan pernyataan**, pilih **Mode lanjutan**. Salin dan tempel JSON berikut ke jendela editor kebijakan. Ganti `aws-account-id` dengan ID akun Anda dan `aws-region` dengan Wilayah Anda (misalnya, “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. Pilih **Buat**.

**Ciptakan AWS IoT sesuatu**

1. Masuk ke [konsol AWS IoT](https://console.aws.amazon.com/iot/) tersebut.

1. Di panel navigasi kiri, pilih **Kelola**, lalu pilih **Things**.

1. Di pojok kanan atas, pilih **Buat**. Jika Anda belum memiliki barang yang terdaftar di akun Anda, pesan “Anda belum memiliki barang” ditampilkan dan Anda dapat memilih **Daftarkan sesuatu**.

1. Pada halaman **Creating AWS IoT things**, pilih **Create a single**.

1. Pada halaman **Tambahkan perangkat Anda ke halaman registri benda**, masukkan nama untuk barang Anda (misalnya, “esp32-ble”). Hanya karakter alfanumerik, tanda hubung (-), dan garis bawah (\$1) yang diizinkan. Pilih **Berikutnya**.

1. Pada halaman **Tambahkan sertifikat untuk hal Anda**, di bawah **Lewati sertifikat dan buat sesuatu**, pilih **Buat sesuatu tanpa sertifikat**. Karena kami menggunakan aplikasi seluler proxy BLE yang menggunakan kredensi Amazon Cognito untuk otentikasi dan otorisasi, tidak diperlukan sertifikat perangkat.

**Buat Klien Aplikasi Amazon Cognito**

1. Masuk ke [konsol Amazon Cognito](https://console.aws.amazon.com/cognito/users/).

1. Di spanduk navigasi kanan atas, pilih **Buat kumpulan pengguna**.

1. Masukkan nama pool (misalnya, “esp32\$1mqtt\$1proxy\$1user\$1pool”).

1. Pilih **Tinjau default**.

1. Di **Klien Aplikasi**, pilih **Tambahkan klien aplikasi**, lalu pilih **Tambahkan klien aplikasi**. 

1. Masukkan nama klien aplikasi (misalnya “mqtt\$1app\$1client”).

1. Pastikan **Hasilkan rahasia klien** dipilih.

1. Pilih **Buat klien aplikasi**.

1. Pilih **Kembali ke perincian kolam**.

1. Pada halaman **Ulasan** kumpulan pengguna, pilih **Buat kolam**. Anda akan melihat pesan yang mengatakan “Kumpulan pengguna Anda berhasil dibuat.” Catat ID kolam.

1. Di panel navigasi, pilih **Klien aplikasi**.

1. Pilih **Tampilkan Detail**. Catat ID klien aplikasi dan rahasia klien aplikasi.

**Buat kumpulan identitas Amazon Cognito**

1. Masuk ke [konsol Amazon Cognito](https://console.aws.amazon.com/cognito/federated).

1. Pilih **Buat kolam identitas baru**.

1. Masukkan nama untuk kumpulan identitas (misalnya, “mqtt\$1proxy\$1identity\$1pool”).

1. Perluas **penyedia otentikasi**.

1. Pilih tab **Cognito**.

1. Masukkan ID kumpulan pengguna dan ID klien aplikasi yang Anda catat di langkah sebelumnya.

1. Pilih **Buat kolam**.

1. **Di halaman berikutnya, untuk membuat peran baru untuk identitas yang diautentikasi dan tidak diautentikasi, pilih Izinkan.**

1. Catat ID kumpulan identitas, yang ada dalam format`us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`. 

**Lampirkan kebijakan IAM ke identitas yang diautentikasi**

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

1. Pilih kumpulan identitas yang baru saja Anda buat (misalnya, “mqtt\$1proxy\$1identity\$1pool”).

1. Pilih **Edit kolam identitas**.

1. Catat Peran IAM yang ditetapkan ke peran yang diautentikasi (misalnya, “cognito\$1mqtt\$1proxy\$1identity\$1poolauth\$1role”).

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

1. Di panel navigasi, pilih **Peran**.

1. Cari peran yang ditetapkan (misalnya, “Cognito\$1mqtt\$1proxy\$1identity\$1poolauth\$1role”), lalu pilih.

1. Pilih **Tambahkan kebijakan sebaris**, lalu pilih **JSON**.

1. Masukkan kebijakan berikut:

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

****  

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

------

1. Pilih **Tinjau Kebijakan**.

1. Masukkan nama kebijakan (misalnya, "mqttProxyCognitoKebijakan”).

1. Pilih **Buat kebijakan**.

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

1. [Unduh versi terbaru kode Amazon FreeRTOS dari repo FreerTOS. GitHub ](https://github.com/aws/amazon-freertos)

1. Untuk mengaktifkan demo pembaruan OTA, ikuti langkah-langkahnya[Memulai dengan Espressif ESP32 - DevKit C dan ESP-WROVER-KIT](getting_started_espressif.md). 

1. Buat modifikasi tambahan ini dalam file-file berikut: 

   1. Buka `vendors/espressif/boards/esp32/aws_demos/config_files/aws_demo_config.h` dan tentukan`CONFIG_OTA_UPDATE_DEMO_ENABLED`.

   1. Buka `vendors/espressif/boards/esp32/aws_demos/common/config_files/aws_demo_config.h` dan ubah `democonfigNETWORK_TYPES` ke`AWSIOT_NETWORK_TYPE_BLE`.

   1. Buka `demos/include/aws_clientcredential.h` dan masukkan URL titik akhir Anda untuk`clientcredentialMQTT_BROKER_ENDPOINT`.

      Masukkan nama benda Anda untuk `clientcredentialIOT_THING_NAME` (misalnya, “esp32-ble”). Sertifikat tidak harus ditambahkan saat Anda menggunakan kredensi Amazon Cognito.

   1. Buka `vendors/espressif/boards/esp32/aws_demos/config_files/aws_iot_network_config.h` dan ubah `configSUPPORTED_NETWORKS` dan `configENABLED_NETWORKS` sertakan saja`AWSIOT_NETWORK_TYPE_BLE`.

   1. Buka `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` file, dan masukkan sertifikat Anda.

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

   Aplikasi harus memulai dan mencetak versi 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...
   ```

## Langkah 5: Konfigurasikan aplikasi Android
<a name="ota-updates-esp32-ble-step5"></a>

1. Unduh Android Bluetooth Low Energy SDK dan contoh aplikasi dari repo [amazon-freertos-ble-android GitHub -sdk](https://github.com/aws/amazon-freertos-ble-android-sdk).

1. Buka file `app/src/main/res/raw/awsconfiguration.json` dan isi Pool Id, Region AppClientId, dan AppClientSecret menggunakan instruksi dalam contoh JSON berikut.

   ```
   {
     "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. Buka `app/src/main/java/software/amazon/freertos/DemoConstants.java` dan masukkan nama kebijakan yang Anda buat sebelumnya (misalnya,*esp32\$1mqtt\$1proxy\$1iot\$1policy*) dan juga Wilayah (misalnya,*us-east-1*).

1. Bangun dan instal aplikasi demo.

   1. Di Android Studio, pilih **Build**, lalu **Make Module app**.

   1. Pilih **Jalankan**, lalu **Jalankan aplikasi**. Anda dapat membuka panel jendela logcat di Android Studio untuk memantau pesan log.

   1. Di perangkat Android, buat akun dari layar login.

   1. Buat pengguna. Jika pengguna sudah ada, masukkan kredensialnya.

   1. Izinkan Demo Amazon FreeRTOS mengakses lokasi perangkat.

   1. Pindai perangkat Bluetooth Low Energy.

   1. Pindahkan slider untuk perangkat yang ditemukan ke **Aktif**.

   1. Tekan **y** pada konsol debug port serial untuk file. ESP32

   1. Pilih **Pair & Connect**.

1. Semakin **banyak...** link menjadi aktif setelah koneksi dibuat. Status koneksi harus berubah menjadi “BLE\$1CONNECTED” di logcat perangkat Android saat koneksi selesai:

   ```
   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. Sebelum pesan dapat dikirim, perangkat Amazon FreeRTOS dan perangkat Android menegosiasikan MTU. Anda akan melihat output berikut di logcat:

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

1. Perangkat terhubung ke aplikasi dan mulai mengirim pesan MQTT menggunakan proxy MQTT. Untuk mengonfirmasi bahwa perangkat dapat berkomunikasi, pastikan nilai data karakteristik MQTT\$1CONTROL berubah menjadi 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. Saat perangkat dipasangkan, Anda akan melihat prompt di ESP32 konsol. Untuk mengaktifkan BLE, tekan **y**. Demo tidak akan berfungsi sampai Anda melakukan langkah ini. 

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

## Langkah 6: Jalankan skrip pembaruan OTA
<a name="ota-updates-esp32-ble-step6"></a>

1. Untuk menginstal prasyarat, jalankan perintah berikut:

   ```
   pip3 install boto3
   ```

   ```
   pip3 install pathlib
   ```

1. Tingkatkan versi aplikasi FreeRTOS di. `demos/include/aws_application_version.h`

1. Buat file.bin baru.

1. Unduh skrip python [start\$1ota.py](https://github.com/aws-samples/amazon-freertos-ota-scripts/blob/master/scripts/start_ota.py). Untuk melihat isi bantuan untuk skrip, jalankan perintah berikut di jendela terminal:

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

   Anda akan melihat sesuatu seperti berikut:

   ```
   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. Jika Anda menggunakan CloudFormation template yang disediakan untuk membuat sumber daya, jalankan perintah berikut:

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

   Anda akan melihat pembaruan dimulai di konsol 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. Ketika pembaruan OTA selesai, perangkat memulai ulang seperti yang dipersyaratkan oleh proses pembaruan OTA. Kemudian mencoba terhubung menggunakan firmware yang diperbarui. Jika pemutakhiran telah berhasil, firmware yang diperbarui ditandai sebagai aktif dan Anda akan melihat versi yang diperbarui di konsol:

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