“Apakah bisa memprogram arduino di Raspberry Pi?

Saya menemukan pertanyaan ini di salah satu grup arduino. Jawabannya? Tentu bisa. Bahkan di android pun bisa, ada aplikasi bernama ArduinoDroid yang tersedia di play store. Kembali ke bahasan awal, lalu bagaimana cara memprogram arduino di Raspberry Pi? Saya asumsikan raspberry anda pakai Linux-based OS, cara paling mudah download dan install saja ArduinoIDE versi GUI untuk Linux. Download di situs resmi Arduino. Selesai 😏

Lah kok selesai, terus artikel ini bahas apa? Well, saya akan bahas cara ribet untuk memprogram Arduino, haha. Yaitu menggunakan Arduino-CLI. Tidak hanya Arduino, saya bahas juga bagaimana untuk memprogram ESP8266. Kenapa saya bilang ribet? Karena kita akan menggunakan interface command line (CLI). Hampir seluruh proses dilakukan di Terminal. Walaupun saya menggunakan raspberry pi, tetapi seharusnya artikel ini relevan untuk laptop/komputer desktop asalkan basis OS nya Linux (Debian-based).

Sedikit gambaran tentang kelebihan Arduino-CLI yang saya rasakan, yaitu memudahkan tahap produksi massal. Di raspberry pi terdapat 4 port USB, saya pasangkan 4 mikro. Saya jalankan script untuk upload di 4 port tersebut, dan voilà~ Keempat mikro tadi sudah terupload program. Dibanding pakai versi GUI, saya perlu klik satu persatu dan itu memakan waktu 🙁

Gambar pemakaian 4port_uploader

Daftar isi:

Tahap 1 : Instalasi dan Pengaturan Awal
Tahap 2 : Memprogram Arduino
Tahap 3 : Memprogram ESP8266
Tahap 4 : Menambahkan Library
Tahap 5 : Alternatif Serial Monitor

Tahap 1 : Instalasi dan Pengaturan Awal

(Raspberry/Komputer harus terhubung internet)

Buka terminal, masuk direktori home, dan pastikan kondisi Linux terupdate.

cd ~
sudo apt update
sudo apt upgrade

Unduh installer Arduino-CLI.

curl –fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh

Supaya Arduino-CLI bisa running di direktori manapun kita berada. Kita perlu menambahkan direktori Arduino-CLI ke PATH. Buka berkas bashrc,

nano ~/.bashrc

Di bagian paling bawah (baris terakhir) tambahkan kode berikut lalu simpan (Ctrl+x –> y –> enter).

export PATH="$HOME/bin:$PATH"
Gambar export PATH

Reload pengaturan tersebut,

source ~/.bashrc

Anda bisa mencoba pindah ke direktori (folder) lain, lalu ketikkan arduino-cli version, jika muncul output berupa versi arduino-cli maka pengaturan PATH berhasil.

Buat berkas config, dan buka berkas tersebut.

arduino-cli config init
nano ~/.arduino15/arduino-cli.yaml

Di berkas config tambahkan URL untuk package esp8266, setelah ditambahkan terlihat seperti gambar berikut. Ubah enable_unsafe_install menjadi true supaya bisa menginstall library secara eksternal.
Note: Perhatikan pemakaian spasi saya! Karena berkas .yaml sensitif dengan format indentasi.

Gambar config YAML

Simpan berkas config tersebut. Selanjutnya update core package dan lihat apakah esp8266 ada.

arduino-cli core update-index
arduino-cli core search esp8266

Akan muncul output berupa ID esp8266, core tersebut perlu diinstal.

arduino-cli core install esp8266:esp8266

Untuk menginstall core mikrokontroller Arduino, tancapkan dahulu Arduino ke port USB. Gunakan perintah berikut dan akan diketahui core yang perlu diinstall.

arduino-cli board list
Gambar core arduino:avr

Saya pakai Arduino UNO dan terdeteksi core arduino:avr, maka core tersebut perlu diinstall.

arduino-cli core install arduino:avr

Arduino-CLI tidak memiliki fitur serial monitor bawaan. Sebagai alternatif serial monitor saya gunakan minicom.

sudo apt install minicom

Tahap 2 : Memprogram Arduino

(Tidak perlu terhubung internet)

Kembali ke direktori home, lalu buat folder baru untuk menyimpan kumpulan sketch kita nanti. Disini saya membuat folder dengan nama sketchbook.

cd ~
mkdir sketchbook
cd sketchbook

Untuk membuat sketch baru, gunakan syntax berikut.

arduino-cli sketch new nama_sketch

Arduino-cli otomatis membuat folder untuk sketch yang dibuat. Didalam folder sketch juga sudah ada file .ino. Kalau dibuka isinya hanya void setup dan void loop. Sebagai contoh, saya membuat program arduino untuk ON dan OFF LED BUILTIN berdasarkan input serial.

/*
 * -----------------------------------------------------------------------
 * Contoh Sketch untuk ON/OFF Arduino BUILTIN LED berdasarkan input serial
 * 
 * Ketik 1 di serial monitor, maka LED ON
 * Ketik 2 di serial monitor, maka LED OFF
 * 
 * 15 Maret 2021, Nisa I.K.
 * -----------------------------------------------------------------------
 */

void setup() {
  Serial.begin(9600);
  delay(3000);
  Serial.println("Program started");
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  if(Serial.available() > 0) {
    int inputState = Serial.read();
    if (inputState=='1') {
      Serial.println("Hello my name is HIGH");
      digitalWrite(LED_BUILTIN, HIGH);
    }else if (inputState=='2') {
      Serial.println("Bye HIGH");
      digitalWrite(LED_BUILTIN, LOW);
    }
  }
}

Compile Program

Untuk melakukan compile, diperlukan informasi FQBN (Fully Qualified Board Name). Gunakan perintah berikut untuk melihat list board yg terinstall.

arduino-cli board listall
Gambar board listall

Disini saya menggunakan Arduino UNO, diketahui FQBN nya arduino:avr:uno

Compile program dengan syntax berikut.

arduino-cli compile --fqbn isi:dengan:fqbn isi_nama_sketch

Proses compile membutuhkan waktu, tergantung spek komputer yang dipakai. Anda bisa menambahkan flag -v diakhir syntax jika ingin melihat proses compile.

arduino-cli compile --fqbn isi:dengan:fqbn isi_nama_sketch -v
Gambar compile arduino

Note: setiap melakukan perubahan pada program, maka program perlu dicompile lagi sebelum upload. Arduino-CLI tidak memiliki fitur auto-compile saat upload.

Upload Program

Tancapkan arduino ke port USB. Untuk upload program diperlukan informasi port arduino.

arduino-cli board list
Gambar board list

Milik saya terbaca di port /dev/ttyACM0
Upload menggunakan syntax berikut.

arduino-cli upload –p port --fqbn isi:dengan:fqbn isi_nama_sketch -v
Gambar upload arduino

Tahap 3 : Memprogram ESP8266

(Tidak perlu terhubung internet)

Kembali ke folder sketchbook.

cd ~/sketchbook

Buat sketch baru, dengan cara sama seperti di tahap 2. Sebagai contoh, saya membuat program ESP8266 untuk ON dan OFF LED BUILTIN berdasarkan input serial dan status HTTP GET.

/*
 * -----------------------------------------------------------------------
 * Contoh Sketch untuk ON/OFF ESP8266 BUILTIN LED berdasarkan input serial
 * 
 * Ketik 1 di serial monitor, jika web mersepon OK maka LED ON
 * Ketik 2 di serial monitor, maka LED OFF
 * 
 * 15 Maret 2021, Nisa I.K.
 * -----------------------------------------------------------------------
 */
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

//Wi-Fi credential
const char* ssid = "SSID"; //hotspot name
const char* pass = "PASSWORD";

void activateWiFi() {
  Serial.print("Connecting to "); Serial.println(ssid);
  WiFi.begin(ssid, pass);
  while(WiFi.status() != WL_CONNECTED)  {
    delay(1000); Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: "); Serial.println(WiFi.localIP());
}

void basicGET() {
  HTTPClient http;
  http.begin("http://httpstat.us/200"); int httpCode = http.GET();
  if (httpCode == 200) {
      Serial.println("Yeay http code is 200, time to turn on the LEDDDD");
      digitalWrite(2, LOW);
      } else {
        Serial.println("Sorry, not 200");
      }
   http.end();
}

void setup() {
  Serial.begin(115200);
  delay(3000);
  Serial.println("Program started");
  pinMode(2, OUTPUT);
  activateWiFi();
}

void loop() {
  if(Serial.available() > 0) {
    int inputState = Serial.read();
    if (inputState=='1') {
      //GET website and turn on
      basicGET();
    }else if (inputState=='2') {
      //turn off
      Serial.println("Bye, i'm off");
      digitalWrite(2, HIGH);
    }
  }
}

Compile Program

Ketahui FQBN dari board esp8266. Milik saya Nodemcu 1.0 ESP-12E, diketahui FQBN nya esp8266:esp8266:nodemcuv2

arduino-cli board listall
Gambar board list esp8266

Syntax untuk melakukan compile sama saja seperti di tahap 2. Sesuaikan saja FQBN dan nama sketchnya.

arduino-cli compile --fqbn esp8266:esp8266:nodemcuv2 esp8266LED.ino
Gambar compile esp8266

Tunggu saja sampai muncul output. Proses compile membutuhkan waktu, tergantung spek komputer yang dipakai. Anda bisa menambahkan flag -v diakhir syntax jika ingin melihat proses compile.

arduino-cli compile --fqbn isi:dengan:fqbn isi_nama_sketch -v

Note: setiap melakukan perubahan pada program, maka program perlu dicompile lagi sebelum upload. Arduino-CLI tidak memiliki fitur auto-compile saat upload.

Upload Program

Tancapkan ESP8266 ke port USB. Untuk upload program diperlukan informasi port ESP8266. Untuk melihat port ESP8266 gunakan perintah,

dmesg | grep tty
Gambar dmesg grep tty

Saya mengidentifikasi board NodeMCU Amica karena terlihat memakai driver USB cp210x terbaca di ttyUSB0. Board NodeMCU Lolin terbaca di ttyUSB1 memakai driver USB ch341. Di Linux tidak perlu install driver, karena driver tersebut sudah terdaftar di kernel. Untuk memastikan anda bisa menggunakan perintah,

find /lib/modules | grep cp210
find /lib/modules | grep ch34
Gambar usb driver

Syntax untuk melakukan upload sama saja seperti di tahap 2. Sesuaikan saja FQBN dan nama sketchnya.

arduino-cli upload –p port --fqbn isi:dengan:fqbn isi_nama_sketch -v

Disini saya melakukan upload program ke board NodeMCU Amica yang terbaca di ttyUSB0 maka port nya /dev/ttyUSB0. Misalkan terbaca di ttyUSB1 maka port nya /dev/ttyUSB1.

arduino-cli upload –p /dev/ttyUSB0 --fqbn esp8266:esp8266:nodemcuv2 esp8266LED.ino -v
Gambar upload esp8266

Tahap 4 : Menambahkan Library

(Raspberry/komputer perlu terhubung internet)

Untuk menambahkan library ke Arduino-CLI konsep nya hampir sama seperti saat menggunakan ArduinoIDE versi GUI. Dengan cara install dari daftar library atau menambahkan library berupa .zip atau bisa juga dari github.

Gambar include library GUI

Install dari Library Manager Arduino

Cari library yang diinginkan dengan syntax berikut. Sesuaikan nama library dengan kebutuhan anda.

arduino-cli lib search nama_library

Misalkan saya mencari library pubsubclient.

Gambar PubSubClient LibMan

Saya menemukan library yang ingin di install. Nama yang tertera PubSubClient. Untuk install library gunakan syntax berikut. Sesuaikan nama library dengan nama yang tertera. Perhatikan penulisan huruf kapital, spasi, dan karakter.

arduino-cli lib install nama_library
Gambar install library PubSubClient

Install dari GitHub

Misalkan saya ingin menginstall library RFID berikut dari GitHub. Ketahui link git. Yang saya beri kotak orange adalah link git.

Gambar link library git

Gunakan syntax berikut untuk install dari github. Ganti LINK_LIBRARY_GIT dengan link library yang ingin anda install.

arduino-cli lib install --git-url LINK_LIBRARY_GIT
Gambar install library rfid

Install dari Berkas .zip

Gunakan syntax berikut untuk menginstall library dalam bentuk .zip

arduino-cli lib install --zip-path /path/NAMA_LIBRARY.zip

Sesuaikan path dengan direktori library .zip disimpan. Disini saya install library dengan nama berkas TinyGPS.zip yang berada di direktori /home/pi/library/

Gambar install library TinyGPS

Cek Daftar Library

Lihat library yang terinstall dengan syntax berikut,

arduino-cli lib list -all
Gambar list library

Kita bisa melihat jika library PubSubClient, rfid, dan TinyGPS berhasil terinstall.

Tahap 5 : Alternatif Serial Monitor

Arduino-CLI tidak memiliki fitur layaknya serial monitor di ArduinoIDE versi GUI. Untuk sekadar melihat output serial, cukup menggunakan cat port saja. Contoh,

cat /dev/ttyACM0

Kekurangan dari cara diatas yaitu hanya bisa membaca output saja. Oleh karena itu saya menggunakan minicom supaya bisa melakukan komunikasi dua arah. Buat file settingan minicom baru dengan cara:

sudo minicom -s
  • Pilih serial port setup
  • Ketik A sesuaikan port -> ENTER
  • Ketik E ganti baud rate -> ENTER
  • Ketik F ubah hardware flow control menjadi no -> ENTER -> ESC
  • Pilih Save setup as, beri nama settingan anda -> ENTER -> ESC
  • Exit from Minicom

Saya membuat dua file setting, untuk arduino dengan baud rate 9600 dan esp8266 di baud rate 115200. Konfigurasi yang digunakan sesuai dengan yang tadi, jadi jika ada perubahan port device (/dev/tty…) atau perubahan baud rate bisa disesuaikan kembali.

Gambar setting minicom Arduino
Setting Minicom Board Arduino
Gambar setting minicom ESP8266
Setting Minicom Board ESP8266

Selanjutnya kita bisa menggunakan minicom dengan cara berikut. Sesuaikan file_setting dengan nama file settingan yang anda simpan tadi.

minicom "file_setting"

Akan muncul jendela minicom. Supaya bisa melihat input yang kita tulis, kita perlu aktifkan fitur LOCAL ECHO dengan menekan CTRL + a –> e –> ENTER

Selesai. Minicom sudah bisa digunakan seperti serial monitor ArduinoIDE versi GUI. Untuk keluar dari minicom CTRL + a –> x –> Yes(enter)

Percobaan Minicom Arduino (Video)

Video Percobaan Minicom Arduino

Percobaan Minicom ESP8266 (Video)

Video Percobaan Minicom ESP8266

Selesai, selamat mencoba.


Thanks for reading,
-Nisa