Mengenal PlatformIO

Pada kesempatan ini saya akan memuat catatan mengenai PlatformIO. Sebelumnya saya sudah membuat catatan penggunaan text editor maupun IDE seperti Energia, Codelite, Netbeans maupun Arduino IDE. Masing-masing IDE tentu memiliki keunggulan dan kekurangan dan masing-masing programer akan memilki kebutuhan dan selera yang berbeda-beda. Nah PlatformIO ini cukup unik, di satu sisi cukup lengkap dan mampu dipergunakan untuk mengerjakan kode untuk berbagai arsitektur mikrokontroler. Di sisi lain tampilannya menyerupai Sublime Text yang ringan dan sederhana.

pio001Gambar 1.

Di Gambar 1 dapat dilihat beberapa contoh default dan proyek yang dibuat manual. Yang sudah saya coba ada beberapa mikrokontroler, yang juga sudah pernah saya uji dengan IDE atau cara lain. Berikut beberapa arsitektur mikrokontroler yang sudah saya coba di PlatformIO (atau Atom);

Sebagai catatan untuk melakukan pemrograman pada STM8 (STM8S103F3); sekalipun PlatformIO tidak mendukung secara langsung toolchain STM8 tetapi editornya masih dapat dimanfaatkan dan mampu membantu keberhasilan pemrograman. Dapat dilihat pada Gambar 2.

pio002Gambar 2. [Klik gambar untuk memperbesar tampilan]

PlatformIO bukanlah text editor dalam pemahaman yang biasa dipergunakan. Pengungkapan yang lebih baik bisa diperoleh dari situs PlatformIO sendiri.

pio003Gambar 3. Apakah PlatformIO itu?

“Different microcontrollers normally have different developing tools . For instance Arduino rely on Arduino IDE. Few more advanced users set up different graphical interfaces like Eclipse for better project management. Sometimes it may be hard to keep up with different microcontrollers and tools. You probably thought that single unified development tool could be great. Well this is what PlatformIO open source ecosystem is for.

This is cross platform code builder and library manager with platforms like Arduino or MBED support. They took care of toolchains, debuggers, frameworks that work on most popular platforms like Windows, Mac and Linux. It supports more than 200 development boards along with more than 15 development platforms and 10 frameworks. So most of popular boards are covered. They’ve done hard work in organizing and managing hundreds of libraries that can be included in to your project. Also lots of examples allow you to start developing quickly. PlatformIO initially was developed with Command line philosophy. It’s been successfully used with other IDE’s like Eclipse or Visual Studio. Recently they’ve released a version with built in IDE based on Atom text editor”, – [Embedds].

 

PlatformIO dapat diintegrasikan ke dalam beberapa IDE di antaranya NetBeans, Codeblocks, dan Visual Studio. Meski begitu tampaknya yang terkenal adalah implementasinya ke dalam text editor Atom.io.

Atom is a text editor that’s modern, approachable, yet hackable to the core—a tool you can customize to do anything but also use productively without ever touching a config file.

Mungkin karena itu kadang-kadang PlatformIO dicampuradukkan dengan Atom. Keduanya jelas berbeda meski untuk banyak keperluan praktis merujuk pada hal yang sama. Perbedaan baru akan terlihat jika menemui kasus seperti contoh pada pemrograman STM8S103F3 di bagian atas tulisan ini. Untuk pemrograman contoh led berkedip itu, PlatformIO belum bisa mendukung platform maupun board sistem STM8. Karena itu yang bisa dimanfaatkan “hanya” text editor Atom saja. Tetapi dapat dilihat, dalam kondisi seperti itu pun terbukti masih bisa membantu menyelesaikan pemrograman dengan baik.

PlatformIO IDE yang dibangun berdasar text editor Atom dapat diunduh (download) di link ini. Saya sudah berhasil mencoba instalasi di sistem GNU/Linux, tetapi gagal mencoba di sistem tua saya, IBM Thinkpad T43 yang masih menggunakan Microsoft Windows XP SP3. PlatformIO mensyaratkan OS yang lebih baru dari XP.

Linux pengguna-laptop 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

 

Ada beberapa pengaturan yang perlu dilakukan agar manfaat yang bisa diberikan platform ini dapat dipergunakan secara maksimal. Salah satu pengaturan yang memerlukan perhatian adalah mengenai clang. Sekilas mengenai Clang dapat dipelajari di sini, begitu pula perbandingannya dengan GCC dapat dibaca di sini.

pio004Gambar 4

Ada dua paket yang perlu menjadi perhatian; autocomplete-clang dan clang-format package. Jika belum terinstalasi dengan baik maka keduanya sebaiknya diinstal terlebih dahulu. Paket yang pertama (autocomplete-clang) sangat membantu proses coding , fungsi dan cara kerjanya dapat lebih mudah dipahami melalui gambar gif berikut:

autocomplete-clangGambar 5. Fasilitas autocomplete [image credit: autocomplete-clang package]

pio006Gambar 6. Melihat paket clang di Settings.

Paket yang kedua (clang-format package) juga sangat membantu pengerjaan kode program. Tetapi berdasar apa yang saya alami, paket kedua ini memerlukan usaha yang lebih agar dapat mudah dipakai. Dari situs penyimpanan kode atom-clang-format:

Format your C/C++/Obj-C/Javascript files with clang-format from inside atom. Requires clang-format to be installed and on your systems path.

More info on clang-format can be found here: http://clang.llvm.org/docs/ClangFormat.html http://clang.llvm.org/docs/ClangTools.html

Pengaturan untuk clang-format disimpan di dalam file .clang-format (tanda titik menandakan bahwa file tersebut secara default tersembunyi di file manager). Untuk dapat melihat file itu di file manager, beri perintah dengan menekan kombinasi kunci di keyboard Ctrl+H. Di sistem saya file itu terletak di:

/home/rumahku/.atom/packages/clang-format/node_modules/clang-format/.clang-format

Yang cukup membuat repot, sejauh yang saya ketahui sampai saat ini, file tersebut perlu disalin manual ke setiap direktori proyek (project).

pio007Gambar 7.

Solusinya sebenarnya cukup mudah, tetapi perlu dilakukan. Salin (copy) file .clang-format ke home directory, untuk mesin saya ini menjadi

/home/rumahku/.clang-format

Adapun isi dari file .clang-format untuk konfigurasi yang saya kehendaki adalah sebagai berikut:

---
Language: Cpp
BasedOnStyle: LLVM
BreakBeforeBraces: GNU
ColumnLimit: 100

Dengan konfigurasi ini maka setiap file sumber untuk C atau CPP (C++) akan terformat ulang setiap kali diberikan perintah menyimpan kode di file. Pengguna bisa juga memberikan perintah untuk melakukan format secara manual melalui menu atau dengan shortcut: shift-cmd-K. Adapun isi dari konfigurasi bisa disimulasikan secara online di sini; https://clangformat.com/ .

Referensi tentang clang format <<klik untuk membuka>>

 

Pada Gambar 2, terlihat untuk platform yang tidak (belum) didukung oleh PlatformIO, maka hasil kompilasinya berada di direktori yang sama dengan file sumber. Pada mode ini yang dimanfaatkan adalah text editor Atom.  Tetapi untuk platform dan framework yang sudah didukung oleh PlatformIO peletakan hasil kompilasi dan build akan berbeda.

pio008Gambar 8.

Oleh PlatformIO hasil kompilasi akan diletakkan di direktori ./pioenvs . Sekedar sebagai contoh;

/tmp/atmelavr-native-blink-116720-6546-1qphcr7/.pioenvs/native_avr/

Sekalipun proses upload biasanya dapat dilangsungkan secara otomatis dengan bantuan PlatformIO, bisa jadi ada kebutuhan untuk melakukan operasi dengan command line di Terminal;

pio009Gambar 9.

pio010Gambar 10.

Mengenai perbedaan antara file elf dengan bin dapat dibaca di sini.

Untuk plaftorm dan framework yang sudah didukung oleh PlatformIO, proses upload dapat dilakukan oleh PlatformIO. Syaratnya pengguna memberi informasi yang cukup agar perintah pengunggahan tidak salah. Konfigurasi disimpan di file platformio.io yang disimpan di masing-masing root direktori proyek, contohnya:

/home/rumahku/platformioSTM32F103/platformio.ini

Misalnya untuk STM32 (mikrokontroler STM32F103C8T6) yang telah didukung oleh PlatformIO (melalui nucleo_f103rb) isi platformio.ini adalah:

#
# PlatformIO Project Configuration File
#
# Please make sure to read documentation with examples first
# http://docs.platformio.org/en/stable/projectconf.html
#
[env:nucleo_f103rb]
platform = ststm32
framework = mbed
board = nucleo_f103rb
upload_protocol = stlink

pio011Gambar 11.

Pada arsitektur STM32 jika yang dipakai adalah stlink maka perlu ditambahkan keterangan
  upload_protocol = stlink   di file platformio.ini . Diskusi mengenai kesalahan yang terjadi ada di sini dan acuan lengkap konfigurasi dapat dilihat di sini.

Gambar 12. Hasil proses uploading oleh PlatformIO

Satu hal lain yang menarik yang saya temui adalah tentang penggunaan framework mbed pada platform ststm32 (STM32). File sumber harus disimpan dengan ekstensi .cpp, jika disimpan dengan ekstensi .c maka akan manghasilkan kesalahan:

pio013Gambar 13. Kesalahan kompilasi dengan framework mbed.

Penjelasan mengenai kesalahan ini terdapat di sini:

mbed is c++-based framework. You should use *.cpp extension.

Please change file extension from *.c to .cpp.

 

pio014Gambar 14.

 

 

Pemrograman C untuk MSP430 dengan Netbeans

Ada beberapa text editor dan IDE (integrated development environment) yang bisa dipergunakan untuk melakukan pemrograman untuk mikrokontroler keluarga MSP430. Salah satu yang menarik adalah Netbeans. Sampai saat ini yang saya ketahui (AFAIK), yang menarik dari IDE Netbeans bila dibandingkan dengan Eclipse adalah bahwa adanya kemudahan pengaturan satu IDE untuk berbagai toolchain. Pada IDE Eclipse juga ada kemudahan mirip seperti ini, tetapi menurut saya sejauh ini Netbeans masih lebih mudah daripada Eclipse.

Dengan makefile yang sesuai ada beberapa sistem yang dapat diprogram dengan satu IDE Netbeans yang sama. Misalnya Avr, Arduino dan MSP430. Untuk make dan makefile pada sistem MSP430 sudah diungkap pada catatan sebelumnya.

nbeans05Gambar 1.

nbeans04Gambar 2.

nbeans06Gambar 3.

nbeans07Gambar 4.

nbeans08Gambar 5.

nbeans09Gambar 6.

nbeans10Gambar 7.

nbeans11Gambar 8.

nbeans12Gambar 9.

 

 

Uji led kedip MSP430 Launchpad MSP-EXP430G2 di GNU Linux dengan Energia [teaser]

Pada post sebelumnya saya mencatat perihal uji coba pertama dari salah satu dari seri Launchpad yang dikeluarkan oleh Texas Instruments, yaitu papan  EK-TM4C123GXL . Mikrokontroler pada papan itu berbasis pada arsitektur ARM Cortex-M4.

Untuk catatan otak atik singkat kali ini akan berisi tentang papan yang lain dari Launchpad, yaitu MSP-EXP430G2. Dalam paket terdapat dua buah mikrokontroler, yaitu MSP430G2553 dan yang lebih kecil; MSP430G2452. Uji coba dilakukan dengan IC yang telah terpasang default pada paket kiriman; MSP430G2553. Berbeda dengan mikrokontroler TM4C123GH6PM yang merupakan anggota keluarga Tiva C yang berbasis pada ARM Cortex-M4, keluarga MSP430 (termasuk  MSP430G2553) adalah μC yang menggunakan arsitektur asli dari TI, bukan dari ARM. Ini mirip dengan keluarga MCS51 (AT89S5*) dengan keluarga AVR, pada perusahaan Atmel (sebelum Atmel dibeli Microchip).

Sama seperti varian Launchpad dari keluarga Tiva C, EK-TM4C123GXL sistem MSP430 ini dapat diprogram dengan beberapa cara. Salah satu dan yang termudah adalah dengan menggunakan Energia. Pada kali ini untuk sekedar mencoba melakukan uji led berkedip, maka saya menggunakan Energia di sistem GNU/Linux

 

Catatan sistem GNU/Linux:

$ uname -a
Linux xxx 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Sebagian dari $ lsusb
Bus 003 Device 005: ID 0451:f432 Texas Instruments, Inc. eZ430 Development Tool

Sebagian dari $ dmesg
[ 5406.733241] usb 3-1: new full-speed USB device number 7 using xhci_hcd
[ 5406.940568] usb 3-1: New USB device found, idVendor=0451, idProduct=f432
[ 5406.940578] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5406.940582] usb 3-1: Product: Texas Instruments MSP-FET430UIF
[ 5406.940586] usb 3-1: Manufacturer: Texas Instruments
[ 5406.940589] usb 3-1: SerialNumber: 5BFF4D53F4193B46
[ 5406.940880] usb 3-1: ep 0x82 – rounding interval to 1024 microframes, ep desc says 2040 microframes
[ 5406.947129] cdc_acm 3-1:1.0: This device cannot do calls on its own. It is not a modem.
[ 5406.947141] cdc_acm 3-1:1.0: No union descriptor, testing for castrated device
[ 5406.947175] cdc_acm 3-1:1.0: ttyACM0: USB ACM device

 

Potensi masalah (tantangan):

Akan mungkin aplikasi Energia akan menampilkan pesan kesalahan saat akan melakukan pengiriman hasil kompilasi kode program ke papan Launchpad. Misalnya sebagai berikut:
[intense_emphasis tag=”span”]

Trying to open interface 1 on 033
rf2500: warning: can’t detach kernel driver: Operation not permitted
rf2500: can’t claim interface: Operation not permitted
rf2500: failed to open RF2500 device

[/intense_emphasis]

 

Sebagaimana yang sangat sering saya ungkapkan, selama berkenaan dengan sains dan terutama teknologi (juga kerekayasaan / engineering), banyak permasalahan yang “baru” kita temukan sudah pernah ditemukan oleh orang lain di negara-negara yang lebih maju. Perangkat keras (hardware) maupun perangkat lunak (software) yang kita pergunakan mayoritas adalah produk impor dari negara-negara tersebut. Jadi wajar jika mereka terlebih dahulu menemukan permasalahan yang baru kita temui. Sebagian permasalahan itu pun telah mereka temukan solusinya. Sedikit perkecualian, barangkali adalah yang berkenaan dengan penerapan teknologi secara lokal. Itu pun dasar solusinya bisa jadi telah tersedia. Misalnya dataran rendah maupun dataran tinggi kita memang unik, tetapi sejauh berkenaan dengan hal teknis (seperti kelembapan, suhu, tekanan udara) tidaklah begitu unik. Kita bisa belajar dari pengalaman orang lain di tempat lain yang hampir serupa.

Karenanya untuk mengatasi masalah pesan kesalahan tadi kita bisa menemukan solusinya dengan membaca dan mencoba solusi yang diajukan di sumber-sumber berikut:

 

Serupa dengan permasalahan dengan Tiva C, pada intinya permasalahan terjadi karena ada masalah akses ke jalur komunikasi. Indikasinya adalah jika saya menggunakan privilege sebagai root dengan menggunakan perintah sudo untuk menjalankan Energia, permasalahan akses tersebut tadi tidak lagi terjadi.

Di sistem GNU/Linux, terdapat apa yang dinamakan sebagai udev. Pada dasarnya udev adalah sebuah device manager pada sistem GNU/Linux yang baru. Dengan adanya udev pengguna sistem GNU/Linux (seperti Ubuntu atau Mint) dapat mempergunakan peralatan dengan menghubungkannya (mencolokkan ) dengan komputer seperti notebook atau desktop PC  walaupun sistem komputer tersebut sudah boot up. Ini sangat memudahkan karena penggguna tidak pelu melakukan restart setiap kali ingin mempergunakan peralatan yang belum terhubung pada saat boot.

Untuk dapat berfungsi baik, maka kita perlu memberikan informasi kepada udev berupa isian dalam file rules. Pengaturan rules pada udev perlu dilakukan sesuai contoh. Misalnya seperti yang dicontohkan pada page di situs Energia.nu.

  • Download the udev rules: TI udev rules
  • Open a terminal and execute the following command: sudo mv /71-ti-permissions.rules /etc/udev/rules.d/
  • If your Linux distribution supports the service command you can active the new rules with sudo service udev restart. If your Linux distribution does not support this command or if you are not able to upload to the LaunchPad with Energia, then restart your computer to activate the rules.
  • If your board is pulled in, unplug it and plug it back in. Not needed if you rebooted your computer.
Energia.nu

 

wp-1470924578281.jpeg

Pengaturan user juga perlu dilakukan agar termasuk dalam group yang berhak untuk mengakses jalur komunikasi data. Pada percobaan yang saya lakukan, perintah sudo restart udev tidak membawa pengaruh. Setelah konfigurasi pada file di /etc/udev/rules.d/, saya masih perlu melakukan restart pada sistem GNU/Linux saya. Demikianlah catatan tinkering kali ini. Di lain kesempatan saya upayakan catatan untuk compiler, juga IDE lain. Juga uji coba pada sistem Microsoft Windows.