MicroPython adalah implementasi ulang dari bahasa pemrograman Python yang ditargetkan untuk mikrokontroler dan sistem tertanam seperti ESP32 atau ESP8266. Pemrograman dalam MicroPython sangat mirip dengan pemrograman di Python: semua fitur bahasa Python juga ada di MicroPython, kecuali beberapa pengecualian. Karena mikrokontroler dan sistem tertanam jauh lebih terbatas daripada komputer kita, MicroPython tidak menyertakan library standar penuh secara default.
Jika Anda sudah tahu cara memprogram di Python, memprogram di MicroPython adalah hal yang sama. Anda hanya perlu ingat bahwa MicroPython digunakan untuk perangkat terbatas (constrained). Jadi, Anda harus menjaga kode Anda sesederhana mungkin. Pada artikel ini, Arduino Indonesia akan membahas tentang dasar-dasar sintaks bahasa pemrograman Python yang juga berlaku untuk MicroPython, seperti:
- Operator matematika
- Operator relasional
- Tipe data
- Fungsi print()
- Pernyataan kondisional
- Perulangan while dan for
- Fungsi buatan pengguna
- Kelas dan objek
- Modul
Operator Matematika
Micropython dapat melakukan operasi matematika. Tabel berikut menunjukkan operator matematika yang didukung:
Di Shell, coba beberapa operasi untuk melihat cara kerjanya. Contoh:
>>> 2+2*9-3
17
>>> 28594/2312
12.36765
>>> 214522236/7.5
2.860297e+07
>>> 23//2
11
>>> 25%3
1
Anda dapat melakukan operasi matematika lain jika Anda mengimpor modul math, seperti akar kuadrat, fungsi trigonometri, logaritma, eksponensial, dan sebagainya.
Operator Relasional
Anda dapat membuat perbandingan menggunakan operator relasional. Ini membandingkan nilai di kedua sisi dan menunjukkan hubungan di antara mereka.
Coba beberapa perbandingan dan uji hasilnya:
>>> 2 == 3
False
>>> 4 == 4
True
>>> 3 > 2
True
>>> 489808234 != 2223
True
>>> 4.5 >= 4.5
True
Menetapkan Nilai ke Variabel
Di Python, Anda tidak perlu mendeklarasikan tipe setiap variabel. Jika Anda terbiasa memprogram papan Anda menggunakan Arduino IDE, Anda tahu bahwa Anda perlu mendeklarasikan tipe variabel saat membuat variabel baru. Tidak ada hal seperti itu di Python.
Variabel hanyalah penampung penyimpanan untuk nilai: angka atau teks. Untuk menetapkan nilai ke variabel, Anda menggunakan tanda sama dengan (=), dengan nama variabel di kiri dan nilai di kanan.
Misalnya, untuk membuat variabel untuk menyimpan nomor GPIO tempat LED terhubung, Anda cukup mengetikkan berikut:
led_pin = 23
Di Arduino IDE, Anda akan memiliki sesuatu seperti:
const int led_pin = 23;
Seperti yang Anda lihat, Python jauh lebih sederhana daripada pemrograman dalam C (di Arduino IDE).
Catatan: Nama yang Anda berikan untuk variabel tidak boleh memiliki spasi dan bersifat case-sensitive, jadi led_pin berbeda dengan LED_PIN atau Led_Pin.
Tipe Data<
Variabel dapat menyimpan beberapa jenis nilai, bukan hanya bilangan bulat. Di sinilah tipe data berperan. Tipe data adalah klasifikasi nilai yang menunjukkan operasi apa yang dapat dilakukan dengan nilai tersebut dan bagaimana nilai tersebut harus disimpan.
Tabel berikut menunjukkan tipe data yang paling sering kami gunakan dalam proyek kami.
Mari kita buat variabel dengan tipe data yang berbeda:
>>> a = 6
>>> b = 95.32
>>> c = 'Hello World!'
>>> d = True
- Nilai pertama yang ditetapkan ke a adalah integer, yaitu bilangan bulat.
- Variabel b berisi nilai float, yaitu angka dengan desimal.
- Nilai ketiga, 'Hello World!', adalah string, yaitu rangkaian karakter. Sebuah string harus ditempatkan di dalam tanda kutip tunggal ('Hello World!') atau ganda ("Hello World!").
- Terakhir, d adalah Boolean, yaitu tipe yang hanya dapat bernilai True atau False.
Ada fungsi untuk memeriksa tipe data suatu variabel, yaitu fungsi type(). Fungsi ini menerima argumen berupa variabel yang ingin Anda periksa tipenya.
type(variable)
Misalnya, setelah mendeklarasikan variabel a, b, c, dan d pada contoh sebelumnya, Anda dapat memeriksa tipe datanya. Contoh, jika Anda mengetik:
>>> type(a)
Ini akan mengembalikan:
<class 'int'>
Ini menunjukkan bahwa a adalah int (integer). Cobalah dengan variabel lain dan Anda akan mendapatkan:
>>> type(b)
<class 'float'>
>>> type(c)
<class 'str'>
>>> type(d)
<class 'bool'>
Fungsi print()
Fungsi print() mencetak pesan di antara tanda kurung ke dalam Shell. Ini sangat berguna dalam proyek kami untuk mendebug kode dan melacak apa yang sedang terjadi. Contoh:
>>> print('LED is on')
LED is on
Komentar
Komentar dalam Python dimulai dengan karakter hash (#) dan berlanjut hingga akhir baris. Komentar berguna untuk menambahkan "catatan" dalam program Anda atau untuk memberi tahu siapa pun yang membaca program tentang apa yang dilakukan skrip. Ini tidak menambahkan fungsionalitas apa pun ke program Anda. Contoh:
# This is just a comment
Karena dalam MicroPython kami bekerja dalam kondisi terbatas (constrained), ada kalanya Anda harus menghindari menambahkan komentar untuk menghemat ruang di memori ESP.
Pernyataan Kondisional
Untuk menulis program yang berguna, Anda mungkin perlu melakukan tindakan berbeda tergantung pada apakah suatu kondisi bernilai True atau False. Kami berbicara tentang pernyataan kondisional. Mereka memiliki struktur berikut:
if <expr1>:
<statement1>
elif <expr2>:
<statement2>
elif <expr3>:
<statement3>
(...)
else:
<statementn>
<expr> adalah ekspresi Boolean dan dapat bernilai True atau False. Jika bernilai True, <statement> tepat setelahnya akan dieksekusi. <statement> harus di-indentasi (diberi spasi/ tab) agar Python tahu pernyataan mana yang termasuk dalam setiap ekspresi.
Pernyataan elif adalah kependekan dari else if dan hanya dijalankan jika kondisi if pertama tidak benar (False).
Pernyataan else hanya dijalankan jika tidak ada ekspresi lain yang benar (True).
Tidak ada batasan jumlah pernyataan elif dalam sebuah program. Juga tidak wajib untuk menyertakan klausa else, tetapi jika ada, itu harus berada di akhir.
Di Arduino IDE, kami menggunakan kurung kurawal {} untuk mendefinisikan blok kode. Dengan MicroPython, kami menggunakan indentasi. Selain itu, Anda perlu menggunakan titik dua : setelah setiap ekspresi. Berbeda dengan Arduino IDE, ekspresi tidak perlu berada di dalam tanda kurung.
Penting: Indentasi standar Python adalah 4 spasi. Dalam MicroPython, indentasi sebaiknya hanya 2 spasi agar lebih banyak kode dapat dimasukkan ke dalam memori mikrokontroler.
Perulangan While dan For
Perulangan memungkinkan Anda mengeksekusi blok kode beberapa kali selama suatu kondisi terpenuhi. Ada dua jenis perulangan, yaitu while dan for. Misalnya, Anda dapat mencetak semua angka dari 1 hingga 10 dengan perulangan while:
number = 1
while number <= 10:
print(number)
number = number + 1
Kode yang termasuk dalam perulangan while, yang ditunjukkan oleh indentasi, dieksekusi selama nilai dalam variabel number kurang dari atau sama dengan (<=) 10. Di setiap perulangan, angka saat ini dicetak dan kemudian ditambah 1.
Anda juga dapat mencetak angka dari 1 hingga 10 menggunakan perulangan for, seperti ini:
number = 1
for number in range(1, 11):
print(number)
Perulangan for dieksekusi selama nilai dalam variabel number berada dalam rentang 1 hingga 11 (11 tidak termasuk). Fungsi range() secara otomatis menetapkan nilai berikutnya ke variabel number, hingga satu di bawah angka akhir yang Anda tentukan.
Anda harus menggunakan perulangan for ketika Anda ingin mengulang blok kode sejumlah kali tertentu. Gunakan perulangan while ketika Anda ingin mengulang kode hingga suatu kondisi tidak lagi terpenuhi. Dalam beberapa situasi, Anda dapat menggunakan salah satunya, namun seringkali satu lebih cocok daripada yang lain.
Mirip dengan pernyataan kondisional, ekspresi Boolean for dan while harus memiliki titik dua : tepat setelahnya, dan ekspresi yang akan dieksekusi harus diindentasi.
Fungsi yang Didefinisikan Pengguna
Untuk mendefinisikan fungsi baru, Anda menggunakan kata def diikuti dengan nama yang ingin Anda berikan pada fungsi dan sepasang tanda kurung (dan argumen di dalamnya, jika diperlukan). Setelah tanda kurung, Anda menambahkan titik dua : dan kemudian memberi tahu fungsi instruksi apa yang harus dilakukan. Pernyataan harus diindentasi dengan 2 spasi (dalam MicroPython). Contoh:
def my_function(<arg1>, <arg2>, ...):
<statement>
(...)
return
Misalnya, fungsi yang mengonversi suhu dalam Celsius ke Fahrenheit bisa seperti berikut:
def celsius_to_fahrenheit(temp_celsius):
temp_fahrenheit = temp_celsius * (9/5) + 32
return temp_fahrenheit
Fungsi celsius_to_fahrenheit() menerima argumen suhu dalam Celsius (temp_celsius). Kemudian, ia melakukan perhitungan untuk mengonversi suhu. Terakhir, ia mengembalikan suhu dalam Fahrenheit (temp_fahrenheit).
Catatan: Fungsi tidak harus mengembalikan sesuatu. Mereka bisa hanya melakukan beberapa pekerjaan tanpa perlu mengembalikan apa pun.
Kelas dan Objek
Python adalah bahasa Pemrograman Berorientasi Objek (OOP). Ada dua konsep penting yang perlu Anda pahami tentang OOP, yaitu kelas dan objek.
Sebuah kelas adalah cetak biru (blueprint) untuk objek. Ia mendefinisikan serangkaian atribut (data dan fungsi) yang menjadi ciri suatu objek. Fungsi di dalam sebuah kelas disebut metode. Kelas didefinisikan dengan kata kunci class diikuti dengan nama kelas. Contoh:
class MyClass:
(...)
Catatan: Secara konvensi, nama kelas dalam Python seharusnya menggunakan CapWords (huruf kapital di setiap kata). Namun, Anda dapat memberikan nama apa pun yang Anda inginkan.
Sebuah objek adalah instance dari sebuah kelas. Ia hanyalah kumpulan data dan metode dalam satu entitas. Melalui objek, Anda dapat menggunakan semua fungsionalitas kelasnya. Bingung? Mari kita lihat contoh sederhana.
Jika kita ingin mendefinisikan beberapa orang dalam program Python dengan atribut yang sama, kita dapat menganggap istilah orang sebagai sebuah kelas. Kita mungkin ingin mendefinisikan seseorang menggunakan atribut seperti nama, usia, negara, dll.
Jadi, kita dapat membuat kelas bernama Person. Kelas kami akan memiliki atribut seperti nama, usia, dan negara. Anda dapat menambahkan atribut sebanyak yang Anda inginkan. Kami juga akan membuat fungsi (metode) yang mencetak deskripsi orang berdasarkan atributnya:
class Person:
name = ""
age = 0
country = ""
def description(self):
print("%s is %d years old and he is from %s." %(self.name, self.age, self.country))
Seperti yang Anda lihat, kami mendefinisikan kelas baru dengan menggunakan kata kunci class, diikuti dengan nama yang ingin kami berikan pada kelas.
Di dalam kelas Person, kami mendefinisikan beberapa variabel untuk menampung nilai. Secara default, name dan country adalah string kosong, dan age adalah 0. Kemudian, kami juga mendefinisikan sebuah fungsi (metode) yang mencetak semua nilai variabel ke dalam Shell.
Semua fungsi di dalam sebuah kelas harus memiliki parameter self sebagai argumen dan argumen lain, jika diperlukan.
Parameter self mengacu pada objek itu sendiri. Ini digunakan untuk mengakses variabel yang termasuk dalam kelas. Misalnya, untuk mengakses variabel name di dalam kelas, kita harus menggunakan self.name.
Sekarang setelah kami membuat kelas, kami dapat membuat objek Person sebanyak yang kami inginkan dengan menggunakan kelas tersebut. Objek Person akan memiliki nama, usia, dan negara. Kami juga akan dapat mencetak deskripsinya menggunakan metode description().
Misalnya, untuk membuat objek Person baru bernama person1:
>>> person1 = Person()
Atur Properti Objek
Untuk mengatur nama, usia, dan negara dari objek person1. Anda dapat melakukannya sebagai berikut:
>>> person1.name = "Elga"
>>> person1.age = 30
>>> person1.country = "Indonesia"
Memanggil metods
Nanti dalam kode Anda, Anda dapat menggunakan metode description() yang telah dibuat pada objek Person apa pun. Untuk memanggil metode description() pada objek person1:
>>> person1.description()
Ini akan mencetak hasil berikut:
Elga is 30 years old and he is from Indonesia
Anda sekarang seharusnya memahami bahwa Anda dapat membuat sebanyak mungkin objek menggunakan kelas yang sama dan Anda dapat menggunakan metode yang tersedia dengan semua objek dari kelas tersebut.
Metode Konstruktor
Alih-alih harus mendefinisikan kelas, lalu mengatur properti objek, yang dapat memakan waktu, Anda dapat menggunakan metode konstruktor di dalam kelas Anda.
Metode konstruktor digunakan untuk menginisialisasi data segera setelah objek dari suatu kelas diinstansiasi. Metode konstruktor juga dikenal sebagai metode __init__. Menggunakan metode __init__, kelas Person() akan terlihat seperti berikut:
class Person():
def __init__(self, name, age, country):
self.name = name
self.age = age
self.country = country
def description(self):
print("%s is %d years old and he is from %s." %(self.name, self.age, self.country))
Kemudian, untuk menginstansiasi objek Person dengan atribut yang telah kami definisikan sebelumnya, kita hanya perlu melakukan hal berikut:
>>> person1 = Person("Elga", 30, "Indonesia")
Jika Anda memanggil `description()` pada objek `person1`, Anda akan mendapatkan hasil yang sama:
>>> person1.description()
Elga berusia 30 tahun dan berasal dari Indonesia.
Modul
Sebuah modul adalah file yang berisi sekumpulan kelas dan fungsi yang dapat Anda gunakan dalam kode Anda – Anda juga dapat menyebutnya library. Untuk mengakses kelas dan fungsi di dalam kode tersebut, Anda hanya perlu mengimpor modul itu ke dalam kode Anda.
Anda dapat membuat modul Anda sendiri, atau menggunakan modul yang sudah dibuat dari library standar Python. Dalam hal MicroPython, ia hanya dilengkapi dengan sebagian kecil dari library standar Python, tetapi ia memang memiliki sekumpulan modul untuk mengontrol GPIO, membuat koneksi jaringan, dan banyak lagi.
Mengimpor modul/library semudah menggunakan:
import module_name
Misalnya, untuk mengimpor library machine yang berisi kelas-kelas untuk mengontrol GPIO, ketikkan berikut:
import machine
Dalam kebanyakan program, Anda tidak memerlukan semua kelas dari satu modul. Anda mungkin hanya ingin mengimpor satu kelas saja. Misalnya, untuk mengimpor hanya kelas Pin dari modul machine:
from machine import Pin
Baca juga: Panduan Lengkap MicroPython ESP32 & ESP8266 - LED RGB Addressable WS2812B (NeoPixel)
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino



0 on: "Panduan Lengkap Dasar Pemrograman MicroPython pada ESP32 dan ESP8266 "