{"id":110,"date":"2024-03-13T04:05:00","date_gmt":"2024-03-13T04:05:00","guid":{"rendered":"https:\/\/emka.web.id\/tutorial\/2024\/03\/13\/cara-membuat-ota-update-over-the-air-update-di-raspberry-pi-w\/"},"modified":"2024-03-13T04:05:00","modified_gmt":"2024-03-13T04:05:00","slug":"cara-membuat-ota-update-over-the-air-update-di-raspberry-pi-w","status":"publish","type":"post","link":"https:\/\/emka.web.id\/en\/2024\/03\/cara-membuat-ota-update-over-the-air-update-di-raspberry-pi-w.html","title":{"rendered":"Cara Membuat OTA Update (Over The Air Update) di Raspberry Pi W"},"content":{"rendered":"<\/p>\n<div style=\"clear: both;text-align: center\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgJb5oEYkA8mfTjKLChGvtwtxfdPDf5uro8JFGSVOjwVpqCTKDcDee0YcRYozmQLRbtM95LxC52RgyGtZTgu7bhtQB-3-YjLQ75iFZv8YNick0p-pT6Ku8ik0sYqw8pTCRwXqsrqK2weEXDyViJrxo9Z7QgCP4O6Q8M7HANLVLCmGz7oudTMMEwkVkxGf8\/s800\/Raspberry-Pi-with-heatsink.png\" style=\"margin-left: 1em;margin-right: 1em\"><img loading=\"lazy\" decoding=\"async\" border=\"0\" data-original-height=\"490\" data-original-width=\"800\" height=\"196\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgJb5oEYkA8mfTjKLChGvtwtxfdPDf5uro8JFGSVOjwVpqCTKDcDee0YcRYozmQLRbtM95LxC52RgyGtZTgu7bhtQB-3-YjLQ75iFZv8YNick0p-pT6Ku8ik0sYqw8pTCRwXqsrqK2weEXDyViJrxo9Z7QgCP4O6Q8M7HANLVLCmGz7oudTMMEwkVkxGf8\/s320\/Raspberry-Pi-with-heatsink.png\" width=\"320\" \/><\/a><\/div>\n<p>Pada tutorial kali ini kita akan mengimplementasikan bootloader untuk Raspberry Pi Pico W yang memungkinkan pengunggahan kode program melalui WiFi (&#8220;Over The Air&#8221;). Cara paling mudah untuk menggunakannya adalah dengan menyertakan repositori ini sebagai submodule dalam aplikasi yang ingin kita dapatkan pembaruan melalui WiFi.<span><a name=\"more\"><\/a><\/span><\/p>\n<p>Contoh proyek menggunakan picowota dapat ditemukan di <a href=\"https:\/\/github.com\/usedbytes\/picowota_blink\">https:\/\/github.com\/usedbytes\/picowota_blink<\/a><\/p>\n<p>Cara termudah untuk membangun picowota itu sendiri adalah:<span><\/span><\/p>\n<p><!--more--><\/p>\n<p><span style=\"font-family: courier\">mkdir build<\/span><\/p>\n<p><span style=\"font-family: courier\">cd build<\/span><\/p>\n<p><span style=\"font-family: courier\">export PICOWOTA_WIFI_SSID=picowota<\/span><\/p>\n<p><span style=\"font-family: courier\">export PICOWOTA_WIFI_PASS=password<\/span><\/p>\n<p><span style=\"font-family: courier\">export PICOWOTA_WIFI_AP=1<\/span><\/p>\n<p><span style=\"font-family: courier\">cmake -DPICO_BOARD=pico_w -DPICO_SDK_PATH=\/path\/ke\/pico-sdk ..\/<\/span><\/p>\n<p><span style=\"font-family: courier\">make<\/span><\/p>\n<h3 style=\"text-align: left\">Uji coba library PicoWOTA<\/h3>\n<p>Pertama, tambahkan picowota sebagai submodule ke proyek kita:<\/p>\n<p><span style=\"font-family: courier\">git submodule add https:\/\/github.com\/usedbytes\/picowota<\/span><\/p>\n<p><span style=\"font-family: courier\">git submodule update &#8211;init picowota<\/span><\/p>\n<p><span style=\"font-family: courier\">git commit -m &#8220;Tambahkan submodule picowota&#8221;<\/span><\/p>\n<p>Kemudian, modifikasi CMakeLists.txt proyek kita untuk menyertakan direktori picowota:<\/p>\n<p><span style=\"font-family: courier\">add_subdirectory(picowota)<\/span><\/p>\n<p>picowota dapat terhubung ke jaringan WiFi yang ada (secara default) atau membuat satu, dalam kedua kasus dengan SSID dan kata sandi yang diberikan.<\/p>\n<p>kita dapat menyediakan informasi berikut sebagai variabel lingkungan atau mengaturnya sebagai variabel CMake:<\/p>\n<p><span style=\"font-family: courier\">PICOWOTA_WIFI_SSID # SSID jaringan WiFi<\/span><\/p>\n<p><span style=\"font-family: courier\">PICOWOTA_WIFI_PASS # Kata sandi jaringan WiFi<\/span><\/p>\n<p><span style=\"font-family: courier\">PICOWOTA_WIFI_AP # Opsional; 0 = terhubung ke jaringan, 1 = membuatnya sendiri<\/span><\/p>\n<p>Selanjutnya, kita dapat membangun binary aplikasi mandiri (cocok untuk pembaruan melalui picowota ketika sudah ada di Pico) atau binary gabungan yang berisi bootloader dan aplikasi (cocok untuk flashing pertama kali):<\/p>\n<p><span style=\"font-family: courier\">picowota_build_stkitalone(nama_executable_kita)<\/span><\/p>\n<p><span style=\"font-family: courier\">picowota_build_combined(nama_executable_kita)<\/span><\/p>\n<h3 style=\"text-align: left\">Mengunggah Kode Melalui picowota<\/h3>\n<p>Setelah picowota bootloader terinstal di Pico kita, kita dapat menggunakan alat https:\/\/github.com\/usedbytes\/serial-flash untuk mengunggah kode ke dalamnya.<\/p>\n<p>Selama Pico berada dalam bootloader picowota (yaitu karena tidak ada kode aplikasi yang valid terunggah, atau aplikasi kita memanggil picowota_reboot(true);), kita dapat mengunggah file .elf aplikasi yang dibangun oleh picowota_build_stkitalone():<\/p>\n<p><span style=\"font-family: courier\">serial-flash tcp:192.168.1.123:4242 nama_executable_kita.elf<\/span><\/p>\n<p>Setelah mengunggah kode, jika berhasil, Pico akan melompat ke aplikasi yang baru diunggah.<\/p>\n<h3 style=\"text-align: left\">Cara Kerjanya<\/h3>\n<p>Ini berasal dari bootloader Pico non-W saya, https:\/\/github.com\/usedbytes\/rp2040-serial-bootloader, yang saya tulis dalam sebuah blog post: https:\/\/blog.usedbytes.com\/2021\/12\/pico-serial-bootloader\/<\/p>\n<p>Kode bootloader berusaha menghindari &#8220;brick&#8221; dengan menyimpan CRC dari kode aplikasi yang diunggah. Jika CRC tidak cocok, maka aplikasi tidak akan dijalankan dan Pico akan tetap berada dalam mode bootloader picowota. Ini seharusnya membuatnya cukup kuat terhadap kesalahan dalam transfer, dll.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pada tutorial kali ini kita akan mengimplementasikan bootloader untuk Raspberry Pi Pico W yang memungkinkan pengunggahan kode program melalui WiFi (&#8220;Over The Air&#8221;). Cara&#8230;<\/p>\n","protected":false},"author":27,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-110","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/posts\/110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/comments?post=110"}],"version-history":[{"count":0,"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/posts\/110\/revisions"}],"wp:attachment":[{"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/media?parent=110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/categories?post=110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/tags?post=110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}