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:

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:

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.

 

 

Uji blinking led STM8 STM8S103F3P6

Di post sebelumnya telah memuat catatan uji coba dan setup untuk keluarga mikrokontroler produksi dari TI (Texas Instrument); MSP430, MSP432 dan Tiva C.  Pada catatan ini akan dipaparkan uji coba untuk mikrokontroler produksi dari STMicroelectronics (ST) yaitu salah satu anggota keluarga STM8, tepatnya μC STM8S103F3. Mikrokontroler STM8S103F3P6 adalah mirkokontroler 8-bit, sama dengan keluarga ATmega8535 (ATmega) dan ATtiny85 (ATtiny). Dan sama pula dengan keluarga AVR, STM8S103F3 dapat diprogram dengan software di sistem GNU/Linux seperti Ubuntu, Mint, BlankOn.

wp-1470912333051.jpegGambar 1. Uji pemrograman STM8 di GNU/Linux.

Untuk melakukan pemrograman singkat dan sederhana pada STM8 hanya diperlukan sebuah text editor seperti nano atau gedit dan terminal untuk mengunggah kode ke STM8.

ashampoo_snap10.pngGambar 2. Pemrograman pada terminal di GNU/Linux

 

Perangkat compiler yang dipergunakan untuk melakukan pemrograman pada STM8 (STM8S103F3P6) yang tersedia gratis tanpa batasan adalah SDCC. SDCC (Small Device C Compiler) dapat dipergunakan di sistem GNU/Linux maupun MS Windows. Untuk memprogram STM8 diperlukan SDCC dari versi yang sudah memiliki fasilitas untuk pemrograman STM8, misalnya di atas versi 3.5.0. Saya sendiri mempergunakan versi yang lebih baru:

$ sdcc -v
SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8 3.6.0 #9615 (Linux)
published under GNU General Public License (GPL)

 

Sebagaimana prinsip dasar saat mencoba mempelajari sesuatu yang intinya meminimalkan sedapat mungkin berbagai sumber/faltor masalah/kesalahan maka untuk menguji sistem ini pun sebaiknya mempergunakan contoh yang diperkirakan lebih dapat dipercaya akan menghasilkan pengujian yang baik. Atau setidaknya mengambil dari sumber yang sudah pernah melaporkan hasil pengujian dan melakukan modifikasi untuk memperbaiki bug atau kesalahan. Untuk uji coba ini, contoh yang dapat dipakai bersumber dari: http://technologyrealm.blogspot.co.id/2015/07/getting-started-with-stm8-development.html atau http://www.cnx-software.com/2015/04/13/how-to-program-stm8s-1-board-in-linux/. Keduanya mengacu pada sumber kode asli (stm8-examples-sdcc) yang sama yang kemudian dimodifikasi.

Dalam file contoh yang sama dapat dilihat isi dari makefile. Konfigurasi berikut adalah hasil modifikasi dari pengaturan aslinya;

Adapun isi lengkap dari file  asli  contoh terlihat di Gambar 1.

Gambar 3.

Untuk kompilasi tunggal, bisa dilakukan dengan perintah:

Berikutnya, untuk melakukan upload ke mikrokontroler STM8S103F3P6 diperlukan program stm8flash. Ada dua cara agar program ini dapat diinstalasi di komputer. Pertama dengan cara mengunduh (download) dari dengan alamat; https://github.com/vdudouyt/stm8flash/archive/master.zip. Cara lain adalah dengan mempergunakan git ($ sudo apt-get install git). Perintah yang dengan mempergunakan git adalah; git clone https://github.com/vdudouyt/stm8flash.git. Perintah lengkapnya adalah:

Perintah untuk mengunggah ke mikrokontroler dengan stm8flash dapat dilakukan dengan cara;

 

Saya mempergunakan versi papan sistem yang murah dari mikrokontroler STM8S103F3P6 sebagaimana yang telah dilaporkan di dua situs ini;

http://www.cnx-software.com/wp-content/uploads/2015/01/STM8S_Board_Schematics.png
Gambar 4. [image credit: cnx-software.com]

Papan yang saya miliki hampir serupa dengan tampilan pada Gambar 4. Tetapi posisi led untuk pengguna berbeda. Pada papan terdapat dua led, led yang berwarna biru adalah indikator catu daya dan memiliki tulisan penanda PWR. Sedangkan led yang berwarna merah dengan tulisan penanda TEST adalah led yang dapat dipergunakan oleh programer. Led merah pada papan yang saya miliki terhubung pada pin PB5 (port B5) dan bukan pada Port D atau Port E. Tampilan yang lebih tepat seperti pada Gambar 5.

Image

Gambar 5. [image credit:  forum.hobbycomponents.com]

Untuk papan yang saya miliki ada saat pertama mikrokontroler tidak berhasil diprogram. Seperti umumnya solusi permasalahan teknis seperti ini sudah pernah dikemukakan [link]. Caranya pertama adalah dengan mengunduh (download) file berikut; optdefault.bin . Jalu menjalankan perintah;

Setelah itu baru jalankan perintah;

 

Cara lain untuk melakukan pemrograman adalah dengan menggunakan make dan makefile. Tentang tutorial mengenai makefile sendiri sudah saya cantumkan daftar urutan tutorial pada bagian akhir catatan sebelumnya. Misalnya untuk contoh ini pemanggilan make dapat dilakukan sesuai tujuan. Untuk menghasilkan file intel hex, cukup dengan memanggil make dari dalam direktori file C sumber.

Untuk melakukan uploading ke mikrokontroler, bisa dilakukan dengan perintah yang sesuai isi penamaan di dalam makefile. Misalnya untuk contoh ini;

 

wp-1470913902302.jpegGambar 6.

 

Saya mempergunakan ST-Link V2 compatible dongle. Untuk keperluan ini hanya bagian satu sisi dari header yang dipergunakan. Jalur untuk sinyal RST (untuk NRST), SWIM, GND, 3.3V. Hubungan dari dongle ini ke papan mikrokontroler tidaklah lurus. Hubungan antara GND dan SWIM tidak lurus akibat letak pin yang berbeda.

wp-1470808435627.jpegGambar 7.

 

img_20160810_020354.jpgGambar 8. Hasil pengukuran pada pin PB5

img_20160810_020654.jpgGambar 9.

Dari situs STMicroelectronics terdapat beberapa dokumen yang bisa dipakai untuk sember belajar. Diantaranya saya urutkan sebagai berikut;

  • AN2752: Getting started with the STM8S and STM8A [download]
  • RM0016: STM8S series and STM8AF series 8-bit microcontrollers
    [download]
  • DS6120: STM8S103F3 datasheet [download]
  • PM0051: How to program STM8S and STM8A Flash program memory and data EEPROM
    [download]
  • PM0044: STM8 CPU programming manual [download]