Setelah kemarin kita berhasil melakukan tes koneksi pada layanan AWS maka sekarang saatnya kita mencoba menghubungkan board berbasis ARM dengan Mbed OS ke Amazon Web Service. Kita pelajari dulu sekilas apa itu Mbed OS ya.
Arm Mbed OS is a free, open-source embedded operating system designed specifically for the “things” in the Internet of Things. It includes all the features you need to develop a connected product based on an Arm Cortex-M microcontroller, including security, connectivity, an RTOS, and drivers for sensors and I/O devices.
https://os.mbed.com/mbed-os/
Berdasar kutipan diatas dapat kita simpulan bahwa Mbed OS adalah suatu sistem operasi untuk embedded system berbasis ARM yang bersifat open source. Mbed OS ini sudah menyediakan berbagai library untuk kebutuhan Internet of Things termasuk dalam hal koneksi, keamanan, driver dan support untuk kebutuhan sistem real time. Dengan menggunakan mbed OS kita tidak perlu repot repot lagi membikin segala sesuatu dari awal (reinvent the wheel) karena mbed sudah menyediakan berbagai macam library yang tinggal kita gunakan hanya dengan sedikit modifikasi. Kelebihan lain dari mbed OS adalah kita dapat dengan mudah berganti platform misal dari STM ke NXP dsb dengan minimum effort karena library yang ada dapat digunakan lintas platform sehingga kita hanya perlu fokus pada ide baru yang akan kita aplikasikan yang pada akhirnya dapat memangkas waktu pengembangan secara keseluruhan. Hingga saat ini lebih dari 150 development board dan ratusan module yang mendukung mbed OS ini.
Untuk dapat menggunakan mbed OS terdapat 3 pilihan, pilihan pertama yaitu menggunakan online IDE, yang kedua menggunakan mbed cli dan yang ketiga adalah menggunakan mbed studio. Disini kita akan menggunakan mbed studio yang dapat digunakan secara gratis dan dapat di download pada website mbed. Ukurannya cukup besar akan tetapi menurut saya jauh lebih menyenangkan dibanding menggunakan kedua pilihan lainnya. Apabila teman teman telah menginstall mbed studio, teman teman dapat menambahkan project baru dengan File->New Program, disini teman teman dapat memilih beberapa contoh program yang telah tersedia seperti blinky led dsb. Atau teman teman dapat mengimport project orang lain di web maupun project yang telah ada di komputer melalui File->Import Program. Untuk latihan kali ini teman teman dapat membuka link berikut, link tersebut merupakan contoh koneksi antara mbed OS dengan AWS yang ditulis oleh Osamu Koizumi. Pada halaman tersebut di pojok kanan atas terdapat pilihan untuk mengimport source code tersebut ke dalam mbed studio, mbed compiler atau import menggunakan mbed cli. Karena kita menggunakan mbed studio maka pilih saja mbed studio dan tunggu hingga proses download selesai. Project ini menyatakan bahwa sang penulis menggunakan FRDM-K64F (K64F) yang mana saya tidak memiliki board tersebut, development board yang saya miliki adalah NUCLEO-F429ZI yang memiliki port ethernet sehingga tidak diperlukan modul tambahan lainnya seperti wifi untuk mencobanya. Saat kita menghubungkan NUCLEO-F429ZI yang memiliki build in ST-LINK maka secara otomatis mbed dapat mengenali paltform target yang ada (bisa ditest dengan mengunakan mbed cli command mbed detect). Agar code tersebut dapat berjalan pada NUCLEO-F429ZI maka kita perlu menambahkan parameter berikut pada mbed_app.json
Setup untuk AWS dapat dilihat pada tulisan sebelumnya dengan judul TES KONEKSI AWS. Hanya saja perlu ditambahkan Things dan menghubungkan Things tersebut dengan policy yang telah kita miliki. Setelah menghubungkan Things dan policy maka kita perlu mengaktifkannya dan mendownload security certificate yang kita perlukan untuk mengisi parameter dalam file MQTT_server_setting.h. Kita perlu menghubungkan NUCLEO board dengan internet menggunakan kabel ethernet ke access point/router/hub yang teman teman miliki di rumah. Kita juga memerlukan kabel micro usb untuk menghubungkan nucleo board dengan komputer.
Terdapat file MQTT_server_setting.h dimana kita harus mengisi beberapa parameter yang berhubungan dengan AWS dan kunci keamanannya seperti tampak pada gambar di bawah ini
MQTT_SERVER_HOST_NAME kita isi dengan endpoint AWS server yang kita pilih, MQTT_CLIENT_ID, USERNAME dan PASSWORD dapat kosongkan saja sementara MQTT_TOPIC_PUB dan MQTT_TOPIC_SUB kita isi dengan nama publish dan subscribe topic yang kita inginkan. Selain iitu kita juga perlu untuk memasukkan Amazon Root CA 1 cert pada SSL_CA_PEM, dan memasukkan Client Certificate pada SSL_CLIENT_CERT_PEM serta Client Private Key pada SSL_CLIENT_PRIVATE_KEY_PEM.
Pilih NUCLEO-F429ZI pada pilihan target dan tekan tombol build dan RUN untuk memflash file bin ke dalam development board kita melalui ST-LINK. Di bawah ini adalah screenshoot ketika board kita berhasil mempublish message dengan topik AWSNucleoPUB dan menerima message (subscribe) dengan topic AWSNucleoSUB.
Pada AWS dashboard, kita pilih IoT core -> test, maka akan terbuka halaman dimana kita dapat melakukan client test baik untuk publish dan subscribe. Pada halaman tersebut kita perlu untuk memasukkan topic yang sama dengan yang kita gunakan pada board nucleo (AWSNucleoPUB dan AWSNucleoSUB). Hubungkan micro usb antara nucleo dan komputer, kemudian buka serial console (kali ini saya gunakan tera term), kemudian pilih com port yang sesuai (umumnya otomatis terdeteksi di tera term, akan tetapi bila bingung com port mana yg aktif dapat melihat windows device manager), masukkan setting serial yg sesuai (baudrate 115200 dll), tekan tombol reset pada nucleo maka akan muncul tampilan seperti di bawah ini. Apabila tidak ada kesalahan dalam memasukkan setup seperti security certificate maka “client connected” dan “client has subscribed a topic …” akan tampil di layar console teman teman. Tekan tombol biru (user button) untuk mengirim / publish message ke AWS maka secara otomatis pada halaman AWS akan muncul message yang dikirim oleh nucleo F4 (teman teman dapat memodifikasi message yang dikirim pada source code yg ada).
Garis biru menunjukkan bahwa message yang dikirim oleh nucleo F4 berhasil diterima dengan bail oleh AWS IoT console dan begitu pula sebaliknya, AWS console dapat mengirim message pada NUCLEO F4 (garis merah).