ESP13 Shield

[ [ Links ] ]

Gambar 1. Arduino Compatible ESP-13 Wifi Shield (CAT.NO: XC4614) [Sumber]

Gambar 2. Arduino Compatible ESP-13 Wifi Shield (CAT.NO: XC4614) [Sumber]

Gambar 3. Arduino Compatible ESP-13 Wifi Shield (CAT.NO: XC4614) [Sumber]

Gambar 4. C4614 Flash reprogramming [Sumber]

  • During the programming phase, the wire on D0 is connected to GND (G) on the shield (see green wire in picture above). This tells the shield to enter programming mode next time it is reset.
  • Make sure the address at right is set to 0x00000.

[intense_video video_type=”youtube” video_url=”https://www.youtube.com/watch?v=_jM–H0f964″]

Arduino ESP8266 WiFi Shield v1.0 WangTongze

[ [ images & links ] ]

Gambar 1. Posisi  switch ON [ Klik gambar untuk memperbesar tampilan ]

Gambar 2. Posisi  switch OFF [ Klik gambar untuk memperbesar tampilan ]

[table id=2 /]

Pengaturan switch untuk tiga mode: flashing/reprogramming ESP8266, komunikasi Arduino ⇔ ESP8266 (system run), Arduino programming

1. flashing/reprogramming ESP8266

Konfigurasi untuk pemrograman modul ESP8266  dengan atau tanpa secara fisik terhubung dengan papan Arduino. Memutus jalur komunikasi serial (hardware), OFF di sw1 dan sw2. Posisi ON pada sw3 (DFU: Device Framework Upgrade) dan posisi ON pada sw4 (lampu LED indikator DFU).

[table id=3 /]

Gambar 3.

2. Arduino programming

Konfigurasi untuk pemrograman papan Arduino dengan shield ESP8266 yang masih terhubung secara fisik.

[table id=4 /]

Gambar 4.

3. komunikasi Arduino ⇔ ESP8266 (system run)

Konfigurasi untuk kondisi saat Arduino bekerja dan berkomunikasi melalui serial hardware dengan modul ESP8266.

[table id=5 /]

Gambar 5.

Gambar 6. [sumber]

 

Gambar 7.

Gambar 8.

Gambar 9. FTDI FT232RL

Gambar 10. Kondisi tegangan kerja 5 V

Gambar 11. Kondisi tegangan kerja 3.3 V

Gambar 12.

Percobaan didahului dengan mengosongkan program pada papan Arduino Uno (Gambar 12). Mengetahui kondisi ESP8266 (Gambar 13), konfigurasi switch mengikuti Gambar 3.

Kondisi peneriksaan semua switch OFF. Kadang-kadang perlu melepas lalu kemudian memasang ulang koneksi kabel USB. Kadang-kadang perlu menekan-tahan tombol reset di shield. Pada beberapa percobaan, penekanan tombol reset saat menunggu jawaban dari papan dapat menggantikan keperluan lepas-pasang koneksi kabel USB. Percobaan berhasil pada tegangan kerja 5 V maupun 3.3 V, dengan penyesuaian pengaturan kabel dari papan FTDI RS232 ke papan WiFi shield  (ESP8266).

Gambar 13.

esptool.py -p /dev/ttyUSB0 flash_id

Perintah penghapusan program di ESP8266, jika diperlukan (Gambar 14), kondisi switch mengikuti Gambar 3.

Gambar 14.

esptool.py -p /dev/ttyUSB0 erase_flash

 

Perintah pengisian firmware program di ESP8266 (Gambar 15), kondisi switch mengikuti Gambar 3.

Gambar 15.

esptool.py write_flash 0x0 ai-thinker-v1.1.1.bin

esptool.py --port /dev/ttyUSB0 write_flash -fm dio 0x00000 ai-thinker-0.9.5.2-115200.bin

Melakukan pemeriksaan kondisi firmware dengan ESPlorer (Gambar 16). Cara yang sama dapat dipakai untuk memberikan perintah AT command.

Kembalikan konfigurasi switch seperti pada Gambar 3 menjadi konfigurasi switch seperti pada Gambar 4.

Gambar 16.

Gambar 17, upload firmware dengan memanfaatkan NodeMCU PyFlasher. Konfigurasi swicth seperti pada Gambar 3.

Gambar 17.

Gambar 18 dan Gambar 19, koneksi ke ESP8266 dengan software moserial, pengaturan switch seperti pada Gambar 4.

Gambar 18.

Gambar 19.

esptool.py write_flash 0x0 ai-thinker-0.9.5.2-9600.bin

esptool.py -p /dev/ttyUSB0 flash_id

Gambar 20, modifikasi Software Serial untuk pengiriman AT command.

Gambar 20.

#include <SoftwareSerial.h>

SoftwareSerial esp8266(10,11); //RX TX

void setup()
{
  Serial.begin(9600);
  
  Serial.println("Hardware serial: aktif");
  Serial.println("");

  esp8266.begin(9600);
}


void loop()
{
  if (Serial.available() > 0)
  {

    byte b = Serial.read();
    esp8266.write(b);
  }

  if (esp8266.available() > 0)
  {
    
    byte b = esp8266.read();
    Serial.write(b);
  }
}

Gambar 21. Koneksi silang untuk SoftwareSerial Rx ⇒ Tx, Tx ⇒ Rx.

 

Mengisi ulang bootloader papan Arduino Uno

Sebelum memulai, pertanyaan yang mungkin timbul adalah mengapat kita perlu mengisi ulang/membakar (burn) bootloader untuk Arduino Uno? Sebelumnya apakah bootloader itu sendiri? Mari mulai dari istilah firmware, secara singkat firmware adalah program yang paling awal diisikan ke sebuah mikrokontroler, program ini bersifat permen (atau tepatnya semi-permanen). Sekali diisikan, program ini tidak mudah untuk diubah seperti program lain. Menurut sumber di Arduino.cc ini, “So named because you couldn’t change it once it had been programmed in the chip.”

Lebih lengkap lagi bisa dipelajari dari sumber ini:

Lalu bagaimanakah bootloader menurut Arduino sendiri ? Jawabannya bisa dibaca di sini:

What’s a bootloader?

Microcontrollers are usually programmed through a programmer unless you have a piece of firmware in your microcontroller that allows installing new firmware without the need of an external programmer. This is called a bootloader.

Not using a bootloader

If you want to use the full program space (flash) of the chip or avoid the bootloader delay, you can burn your sketches using an external programmer.

Secara sederhana bootloader Arduino memudahkan pengguna (programmer) untuk memprogram mikrokontroler di papan sistem. Pengguna tidak perlu hardware programmer lainnya, cukup menggunakan kabel USB (dahulu kabel serial) ke papan sistem Arduino. Kecuali pengguna memilih untuk memprogram tanpa bantuan bootloader.

Kembali ke pertanyaan awal, mengapa perlu mengisi ulang bootloader ? Sekenario yang bisa terjadi adalah karena adanya kerusakan pada bootloader, meskipun kemungkinannya kecil. Kemungkinan lain adalah karena mikrokontroler asli pada papan Arduino mengalami kerusakan. Jika mikrokontroler yang dipergunakan adalah versi DIP. Salah satu penjual di salah satu toko online menjual μC ATmega328P dengan harga kurang dari dua puluh ribu rupiah (di luar ongkos kirim). Bisa juga karena ingin menggunakan μC ATmega328P yang berisi bootloader Arduino di tempat lain, misalnya seperti yang ditulis di link ini dan link ini. Lalu kemungkinan ketiga adalah karena ingin/perlu mengganti bootloader dengan versi lain.

  <em>Bootloader</em> (<em>firmware</em>) untuk Arduino:    <<klik di sini untuk membuka>>
Sekarang dengan menggunakan AVRDUDE dan AVRDUDESS kita melihat kondisi awal (kosong) dari mikrokontroler ATmega328P.

Gambar 1.

Bandingkan dengan kondisi default sebagaimana yang bisa dilihat di sini:

Gambar 2.

Gambar 3.

Pada Gambar 3, untuk mengisi bootloader pilih board yang sesuai dengan papan yang hendak diisi lalu pilih item menu Burn Bootloader. Gambar 4 menunjukkan proses pengisian berlangsung lancar.

Gambar 4.

Gambar 5.

Dapat dilihat di Gambar 5 kondisi fuse bits & lock bits setelah Arduino Nano diisi dengan bootloader, bandingkan dengan kondisi yang terlihat pada Gambar 1.

Gambar 6.

Makna dari konfigurasi bits dapat dilihat pada Gambar 6. Konfigurasi seperti ini dapat dengan lebih mudah diatur dengan bantuan fasilitas yang tersedia secara online, misalnya fusecalc atau Engbedded Atmel AVR® Fuse Calculator. Meskipun fasilitas bantuan seperti ini tidak selalu dapat sepenuhnya menggantikan keperluan untuk membaca datasheet. Bahkan sering kali kita juga perlu belajar dari pemahaman dan pengalaman orang lain yang telah mencoba terlebih dahulu, jadi bukan hanya belajar kepada pegawai dari produsen saja. Sebagai contoh, untuk memahami tentang CKSEL pada Gambar 6, kita bisa membaca di halaman ini. Dalam kutipan berikut bisa diketahui konfigurasi seperti pada Gambar 6, CKSEL=1111 diartikan bahwa frekuensi dapat dipilih berdasarkan nilai crystal antara 8 MHz sampai 16 MHz.

Gambar 7. Uji coba bootloader yang baru diisikan pada Arduino Uno

Sekadar sebagai pembanding cara-cara untuk mengisi bootloader Arduino bisa dibaca di sini: Installing an Arduino Bootloader.

Berikutnya adalah percobaan untuk menggunaakan bootloader Optiboot. Saya akan mencobanya di Arduino Nano dengan ATmega328P 5 V.

Gambar 8. Kondisi awal Arduino Nano ATmega328P

Gambar 9. Lock bits berubah setelah penghapusan isi

Gambar 10. Pengaturan konfigurasi untuk pengisian bootloader

Gambar 11.

Pada Gambar 11, terlihat adanya pesan kesalahan (failed). Meskipun begitu sebenarnya proses pengisian bootloader optiboot telah berhasil. Pesan kesalahan terjadi karena pengaturan efuse (extended fuse) yang sesungghuhnya tidak benar-benar mengakibatkan kesalahan. Solusi dari permasalahan ini adalah pengaturan konfigurasi di boards.txt:

## Optiboot for ATmega328p
## ---------------------------------------------
optiboot32.menu.cpu.atmega328p=ATmega328p
optiboot32.menu.cpu.atmega328p.upload.maximum_size=32256
optiboot32.menu.cpu.atmega328p.upload.maximum_data_size=2048

optiboot32.menu.cpu.atmega328p.bootloader.high_fuses=0xDE
optiboot32.menu.cpu.atmega328p.bootloader.extended_fuses=0xFD
optiboot32.menu.cpu.atmega328p.bootloader.file=optiboot/optiboot_atmega328.hex

optiboot32.menu.cpu.atmega328p.build.mcu=atmega328p

Untuk mempelajari lebih lanjut tentang masalah ini silakan baca: <<klik di sini untuk membuka>>

Gambar 12. Pengisian bootloader dengan USBasp, AVRDUDE dan AVRDUDESS

Gambar 13.

Gambar 13 menunjukkan proses bootloader burning setelah perbaikan boards.txt, tidak ada pesan kesalahan sama sekali; bandingkan dengan Gambar 11.

Gambar 14. Pengisian program menggunakan bootloader Arduino otiboot melalui ttyUSB0

Gambar 15. Upload program Arduino melalui USB port (ttyUSB0)

Arduino M0 compatible

Papan Arduino yang bisa dikatakan paling terkenal seperti Uno, Nano dan Micro berintikan mikrokontroler 8-bit. Sedangkan papan generasi berikutnya sudah ada yang berintikan prosesor 32-bit, misalnya Arduino M0/Arduino Zero yang berintikan: Atmel’s SAMD21 MCU (ATSAMD21G18), featuring a 32-bit ARM Cortex® M0 core. Perlu diperhatikan bahwa mikrokontroler ini bekerja dengan tingkat tegangan 3.3 V, bukan 5 V. Papan inilah yang saya buatkan catatannya di halaman ini.

Karena produsen asli Arduino “pecah kongsi”, maka terdapat dua produsen yang kadang dapat membingungkan. Yang pertama adalah Arduino.cc dan yang kedua Arduino.org. Dari Arduino.org diproduksi dua papan untuk seri ini yaitu: Arduino M0 dan Arduino M0 Pro, papan varian ini juga yang memiliki beberapa papan kompatibel yang dibuat oleh pihak lain. Berikutnya Arduino.cc memproduksi papan Arduino Zero, karena M0 dan M0 Pro sudah tidak lagi dilanjutkan produksinya. Semua papan tadi memiliki dasar yang sama.

Click to enlarge image A000103-Arduino-M0-1flat.jpgGambar 1. Arduino M0 [Arduino.org]

Click to enlarge image A000111-Arduino-M0Pro-1front.jpgGambar 2. Arduino M0 Pro [Arduino.org]

Sebagai percobaan pertama, mulai dari yang paling sederhana yang secara umum biasanya kecil kemungkinan gagalnya kecil. Yang paling umum adalah contoh kode blink yang telah disediakan di Arduino IDE. Bisa dilihat di Gambar 3 saya memilih konfigurasi untuk pemrograman Arduino M0. Hasil eksekusinya dapat dilihat di Gambar 4, berupa satu LED yang berkedip secara digital.

Gambar 3.

Gambar 4.

Untuk percobaan kedua ini, masih menggunakan Arduino IDE tetapi konfigurasi untuk Arduino M0 Pro tepatnya native USB port. Hal ini karena papan yang saya pakai hanya memiliki satu port USB saja, native USB dan bukan programming port. Kode contoh yang dicoba adalah kode untuk meredupkan LED dengan metode PWM (analogWrite). Hasil uji coba pengaturan terang-redup terlihat pada Gambar 6.

Gambar 5.

Gambar 6.

Pada percobaan ketiga saya mencoba kemampuan PlatformIO yang bekerja di text editor Atom. Kode program berasal dari modifikasi kode percobaan pertama, selengkapnya sebagai berikut:

#define LED_AWAL 8
const uint8_t LED_AKHIR = 13;

uint8_t i;


void setup()
{
  for(i=LED_AWAL;i<=LED_AKHIR;i++)
  {
    pinMode(i, OUTPUT);
  }
}

void loop()
{
  for(i=LED_AWAL;i<=LED_AKHIR;i++)
  {
    digitalWrite(i,HIGH);
    delay(50);
  }
  delay(10);
  for(i=LED_AWAL;i<=LED_AKHIR;i++)
  {
    digitalWrite(i,LOW);
    delay(80);
  }
  delay(100);
}

Isi file konfigurasi platformio.ini:

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; http://docs.platformio.org/page/projectconf.html

[env:mzeroUSB]
platform = atmelsam
board = mzeroUSB
framework = arduino

Gambar 7 dan Gambar 8 menampilkan secara lengkap proses kompilasi kode dan pengunggahan (uploading) ke Arduino M0 compatible. Tampilan kerja program terlihat pada Gambar 9.

Gambar 7.

Gambar 8.

Gambar 9.

Percobaan yang terakhir saya coba menggunakan Visual Studio Code (VSCode). Pengaturan terang-redup LED menggunakan modifikasi sederhana dari contoh yang tersedia (Gambar 10).

Gambar 10.

Kode lengkap program untuk percobaan ketiga:

#define LED_BAWAH 8
const uint8_t LED_ATAS = 12;

uint8_t i;

// int led = 9;           
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by

// the setup routine runs once when you press reset:
void setup() 
{
  for(i=LED_BAWAH;i<=LED_ATAS;i++)
  {
    pinMode(i, OUTPUT);
  }
  // pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() 
{
  for(i=LED_BAWAH;i<=LED_ATAS;i++)
  {
    analogWrite(i, brightness);
  }
    // analogWrite(led, brightness);

  brightness = brightness + fadeAmount;

  if (brightness <= 40)
  {
    delay(30);
  }
  
  if (brightness >= 255)
  {
    delay(50);
  }

  if (brightness <= 0)
  {
    for(i=LED_BAWAH;i<=LED_ATAS;i++)
    {
      pinMode(i, OUTPUT);
    }
    // pinMode(led, OUTPUT);
    delay(4000);
  }
  if (brightness <= 0 || brightness >= 255) 
  {
    fadeAmount = -fadeAmount;
  }
  delay(40);
}

Cara untuk melakukan kompilasi sekaligus mengunggah kode dan program seperti pada Gambar 11. Pertama tekan kombinasi Ctrl+Shift+P lalu kemudian ketik upload (atau sebagian dari hurufnya) lalu pilih Arduino: Upload.

Gambar 11.

Gambar 12.

Proses compiling dan uploading terlihat seperti yang ada pada Gambar 12, sedang kerja papan berdasarkan program sebagaimana terlihat pada Gambar 13. Unjuk kerjanya mirip dengan percobaan kedua (Gambar 6), bedanya ada pada jumlah LED yang diatur terang-redupnya pada saat yang sama.

Gambar 13. Fader untuk lima LED [klik link ini untuk tampilan yang lebih baik]

 

Gambar 14 menunjukkan pinout untuk Arduino M0 Pro yang sama dengan Arduino M0, terkecuali adanya tambahan satu USB port yang disediakan untuk proses debugging.

http://it.emcelettronica.com/wp-content/uploads/2016/12/Arduino-M0-PRO-pinout_.jpgGambar 14. Arduino Zero pinout [sumber]

Berikut ini dambar Arduino Zero, sistem yang mirip dengan Arduino M0 Pro, kecuali adaanya beberapa pin yang ditukar posisinya

 

Gambar 15. Arduino Zero [sumber]

Terakhir, ada catatan mengenai kemungkinan kesalahan/kegagalan pengunggahan hasil kompilasi kode ke papan Arduino. Salah satu yang saya alami adalah:

 avrdude: ser_open(): can't open device "/dev/ttyACM0": Device or resource busy 

Untuk permasalahan ini, yang menjadi solusi bagi saya adalah perintah:

 sudo apt-get remove modemmanager 

Keterangan lebih lengkap dapat dibaca di tempat saya menemukan solusi yaitu pada salah satu halaman di forum ini.

Sebagai tambahan jika terjadi permasalahan seputar pemrograman sistem serupa ini di lingkungan OS GNU/Linux (seperti Fedora, Debian, Ubuntu atau Mint) maka bisa dibaca keterangan yang bagus dan sistematis di sini: Arduino IDE on Linux-based OS.

Semoga beramanfaat.

VS Code untuk Arduino

Melanjutkan catatan tentang Visual Studio Code, dalam artikel ini saya akan menunjukkan bagaimana VSCode dapat dipakai untuk mengerjakan program untuk papan Arduino (termasuk Arduino compatible). Ada beberapa metode untuk memprogram Arduino melalui vscode, kali ini saya akan menunjukkan metode ekstensi dari Microsoft (yang juga membuat VS Code).

Gambar 1. Arduino extension

Keterangan lebih lanjut, termasuk cara instalasi terdapat di halaman ini.

Prerequisites

Arduino IDE is required. Please install it from here.

  • The supported Arduino IDE versions are 1.6.x and later.
  • The Windows Store’s version of Arduino IDE is not supported because of the sandbox environment of Windows app.

Installation

Open VS Code and press F1 or Ctrl + Shift + P to open command palette, select Install Extension and type vscode-arduino.

Or launch VS Code Quick Open (Ctrl + P), paste the following command, and press enter.

ext install vscode-arduino

Commands

This extension provides several commands in the Command Palette (F1 or Ctrl+Shift+P) for working with *.ino files:

  • Arduino: Board Manager: Manage packages for boards. You can add 3rd party Arduino board by configuring Additional Board Manager URLs in board manager.
  • Arduino: Change Baud Rate: Change the baud rate of selected serial port.
  • Arduino: Change Board Type: Change board type or platform.
  • Arduino: Close Serial Monitor: Stop serial monitor and release the serial port.
  • Arduino: Examples: Show example list.
  • Arduino: Initialize:Scaffold a VS Code project with an Arduino sketch.
  • Arduino: Library Manager: Explore and manage libraries.
  • Arduino: Open Serial Monitor: Open serial monitor in the intergrated output window.
  • Arduino: Select Serial Port: Change the current serial port.
  • Arduino: Send Text to Serial Port: Send a line of text via the current serial port.
  • Arduino: Upload: Build sketch and upload to Arduino board.
  • Arduino: Verify: Build sketch.

Isi dari file settings.json untuk sistem saya sebagai berikut:

// Place your settings in this file to
// overwrite the default settings
{
    "arduino.path": "/home/sunu/arduino-1.8.3/",
    "arduino.additionalUrls": "" ,
    "arduino.autoUpdateIndexFiles": false,
    "arduino.logLevel": "info"
}

Gambar 2. Screenshot file settings.json

Gambar 3. Mencoba contoh kode dengan menekan Ctrl+Shift+P

Gambar 4. Memilih contoh kode program Arduino sederhana

Gambar 5. Kombinasi Ctrl+Shift+P memunculkan pilihan papan Arduino yang akan dipergunakan

Gambar 6. Konfigurasi port

Setelah memilih tipe papan Arduino yang akan dipergunakan (Gambar 5), berikutnya perlu diatur port yang akan dipakai untuk melakukan upload program ke papan Arduino (Gambar 6). Konfigurasi akan disimpan di file bernama arduino.json. Setelah file dibuka, langkah berikutnya adalah dengan memilih port yang sesuai. Di sistem GNU/Linux biasanya bukan bernama COM1 tetapi ttyUSB0 (kadang-kadang ttyUSB1) sebagaimana terlihat pada Gambar 6.

Gambar 7. Verify/Upload

Untuk memeriksa kode (verify) atau melakukan (upload) tekan kombinasi Ctrl+Shift+P, lalu pilih dari dropdown menu. Untuk verify bisa juga langsung dengan menggunakan shortcut Ctrl+Alt+R.

Gambar 8. Hasil verifikasi kode program

Gambar 9. Laporan pengunggahan (uploading)

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.

 

 

SimulIDE sebagai solusi untuk simulasi uC AVR (Atmega328)

Seperti yang saya ungkap pada tulisan sebelumnya, di kantor kami memiliki development board berupa DI-Super Smart AVR.16. Minimum system (atau sebutan lengkapnya Minimum System Development Board) telah dilengkapi dengan 8 buah led (PC0 sampai PC7) dan 2 buah push-button (PD2 & PD3).

Tantangannya adalah bahwa jumlah papan pengembangan sistem itu terbatas, dan tentu tidak dapat dibawa pulang dengan bebas. Apa solusinya?

Solusi yang tidak gratis adalah dengan menggunakan software simulasi yang sudah tersedia secara komersial. Misalnya Proteus dari Labcenter Electronics. Perangkat lunak ini tentu sangat bagus dan mumpuni, tetapi benarkah tidak ada perangkat lunak yang gratis yang dapat dipergunakan untuk belajar?

Salah satu yang paling gampang teringat adalah WinAvr dan AVR Studio (atau Atmel Studio), jika kita menggunakan komputer dengan sistem operasi Microsoft Windows. Di laptop tua saya sendiri yang masih menggunakan Windows XP, hanya dapat di-install AVR Studio 4. Pilihan lain yang bisa dipergunakan untuk melakukan simulasi adalah SimulIDE.

SimulIDE dapat bekerja di lingkungan OS Windows maupun GNU/Linux. Tentu saja bila dibandingkan dengan Proteus (yang berbayar) ada beberapa kekurangan dari Simulide. Tetapi kekurangan ini, meurut saya, tidak begitu menjadi masalah dan halangan berarti untuk mempergunakannya.

Salah satu kekurangan yang paling menonjol menurut saya adalah bahwa mengenai mikrokontroler yang didukung. Walaupun ada beberapa uC seperti Atmega16 dan Atmega32, hingga saat ini saya belum bisa melakukan firmware loading ke dalam uC varian tersebut. Sebagai gantinya saya mempergunakan saja Atmega328 yang juga tersedia di aplikasi itu. Untuk keperluan belajar logika dan syntax pemrograman mikrokontroler keluarga AVR hal ini tidak terlalu menjadi masalah, silakan dibuktikan sendiri.

SimulIDE_2016-03-01_13-46-03

Kekurangan lain adalah, meski tidak sering, program ini beberapa kali meminta berhenti untuk bekerja. Saya sebut tidak sering karena dalam satu jam penggunaan intensif belum tentu satu kali terjadi error seperti ini. Selebihnya dapat dipergunakan dengan aman. Mungkin karena ini masih dalam pengembangan dengan status alpha.

Dengan menggunakan simulator kita dapat lebih bebas untuk melakukan pengaturan input dan output pada sistem. Misalnya, seperti terlihat saya menggunakan Port D sebagai output utama karena pada SimulIDE port ini (bersama Port B) memiliki I/O yang terbanyak dapat dipergunakan (8 pin). Sementara Port B saya atur sebagai keluaran berupa indikator tambahan, yang visualisasinya menggunakan probe. Sedangkan Port C saya pergunakan sebagai masukan, bukan dua tetapi empat yaitu PC0, PC1, PC2, dan PC3.

2016-03-01_14-57-04

Pada gambar di atas panah dengan huruf pengenal A menunjuk pada toolbar. Di sana ada beberapa icon yang dapat dipergunakan sesuai peruntukannya masing-masing. Misalnya untuk membuat file baru, membuka file, dan meyimpan file. Kita juga dapat mengatur frekuensi kerja (frekuensi kristal) pada sistem. Di sebelah paling kanan adalah tombol On/Off.

Panah dengan huruf pengenal B menunjukkan bagaimana kita bisa mengunggah (upload) file hex ke mikrokontroler. Caranya adalah saat panah berada di atas gambar komponen mikrokontroler (dan cursor berubah menjadi gambar tangan), kita melakukan right-click sehingga pilihan load/reload firmware akan tampil seperti pada gambar di atas.

Jika kita belajar dengan cara yang sistematis, maka kita bisa belajar berbagai skenario kode pemrograman dengan lebih mudah seperti contoh di bawah ini.

2016-03-01_13-57-38

Dengan menggunakan fungsi, membagi kode program ke dalam fungsi-fungsi yang berbeda, kita bisa mencoba beberapa skenario. Hal ini selain memudahkan upaya pemahaman dalam belajar juga memudahkan pemeliharaan kode program.

Misalnya kita mulai dengan mengikuti kode LED berkedip dari sistem Arduino (blink). Kode berikut yang udah dikompilasi dan hasilnya dalam bentuk file hexadesimal dapat dicoba diunggah (uploaded) ke mikrokontroler pada SimulIDE. File hex dapat diunduh di sini.

2016-03-01_13-59-07

2016-03-01_15-24-43

Variasi kode berikutnya adalah uji geser kiri dan geser kanan dengan menggunakan bit shift. Untuk fungsi ini kode akan memanggil dua fungsi lain berdasarkan kondisi “push button”. Jika kondisi push button yang di Simulide ini diwakili oleh komponen fixed voltage, menghasilkan pembacaan logika high pada PC0 maka fungsi yang dipanggil adalah fungsi yang akan menggeser satu bit 0x01 dari LSB menuju MSB (PD0 sampai PD4) satu kali setiap waktu. Sengaja diatur demikian karena fungsi ini sekaligus dipakai untuk mempelajari  perulangan for(i=0; i<5; i++).  Sebaliknya, jika pembacaan pada PC0 menghasilkan logika 0 maka tampilan pada probe akan bergeser dari MSB menuju LSB (di simulasi ini dari kiri ke kanan). File hex yang perlu diunggah ke mikrokontroler bisa diperoleh di sini.

2016-03-01_14-00-08

Pada SimulIDE (Simulide) jika dikehendaki kita dapat menggunakan fasilitas Oscope dengan cara melakukan right-click pada probe.

SimulIDE_2016-03-01_13-55-30

Variasi berikutnya sebenarnya hampir serupa dengan contoh sebelumnya. Bedanya jika pada contoh sebelumnya hanya membaca kondisi logika dari PC0 maka pada contoh ini uC membaca daru dua pin, yaitu PC0 dan PC1. Kali ini PC0 akan berfungsi sebagai master-key, jika tidak diaktifkan (kondisi high) maka pergeseran bit yang akan diperlihatkan oleh probe tidak akan terjadi. Jika PC0 sudah diaktifkan maka pengaturan arah pergeseran ditentukan oleh tingkat logika di PC1. Sama dengan contoh sebelumnya, jika kondisinya high maka pergeseran akan berlangsung dari arah LSB menuju MSB. Jika kondisinya low maka pergeseran yang dapat dilihat dengan bantuan probe akan berlangsung dari arah MSB menuju LSB. File hex bisa diambil di sini.

2016-03-01_14-00-35

Berbagai variasi manipulasi bit dan logika serta evolusi kode dapat dicoba pada AVR dengan menggunakan SimulIDE. Kuncinya adalah ketersediaan waktu dan kesediaan untuk belajar dan bekerja keras dengan efektif dan efisien. Seperti yang konon pernah diungkapkan oleh Imam Syafi’i:

Jika kamu tidak dapat menahan lelahnya belajar, maka kamu harus sanggup menahan perihnya kebodohan.<span class="su-quote-cite">Imam Syafi'i</span>

Prinsip ini tampaknya juga berlaku di bidang engineering (termasuk engineering technology).

Sebagaimana semua sistem lain (termasuk perangkat lunak), Simulide memiliki kelebihan dan kekurangan dalam perbandingan. Sebagaian bergantung pula pada peruntukan dan penggunanya. Sebagai bonus gambar, SimulIDE juga dapat dipergunakan untuk melakukan simulasi terbatas untuk sistem Arduino Uno. Pada contoh berikut tingkat tegangan yang dikeluarkan oleh volt. Source dibaca melalui A0 melalui ADC untuk kemudian ditampilkan oleh 7 segment melalui pin digital.

SimulIDE_2016-03-01_13-53-01

 

UPDATE #001

Nah kalau sebelum ini saya menunjukkan versi SimulIDE 0.0.1, maka setelah ini saya akan menunjukkan versi SimulIDE 0.0.2. Kali ini dengan sedikit usaha (mengikuti saran dari Imam Syafi’i di bagian tulisan sebelumnya), saya mencoba mengikuti konfigurasi DI-Super Smart AVR.16 dengan menggunakan komponen mikrokontroler Atmega16. Konfigurasi ini berhasil disimulasikan setelah melakukan sedikit tinkering.

2016-03-01_18-00-31

Seperti yang telah saya tulis sebelumnya, dengan menggunakan bantuan makro, kode program dapat dengan lebih mudah dikonfigurasi ulang sesuai keperluan. Misalnya kode yang sebagian besar sama dan berbeda hanya pada bagian port saja, karena memang ditujukan ke sistem (hardware atau software simulator) yang berbeda, akan jauh lebih cepat dapat diatur ulang bila dibandingkan dengan kode yang akses spesifik port-nya tersebar di banyak tempat dalam program.

2016-03-01_19-05-42

Bersi Simulide 0.0.2 ini membawa banyak fitur tambahan, silakan dicoba.

2016-03-01_18-20-24

Demikianlah tulisan ini tunai saya selesaikan. Setahun sebelum ini saya juga sudah mempergunakan SimulIDE, mudah-mudahan dengan cara ditulis dalam bentuk seperti ini maka nantinya tidak gampang dilupakan lagi.