Apa Itu MicroPython? Perintah Dasar, REPL, dan Program Pertama
Apa itu MicroPython dan apa bedanya dengan Python? REPL, machine.Pin, PWM, ADC, I2C, ticks_ms, main.py, Thonny, mpremote, mip, serta pengaturan Pico dan ESP32.
MicroPython adalah implementasi ulang bahasa Python 3 yang kecil dan cepat untuk mikrokontroler. Setelah kamu memasang MicroPython pada board seperti Raspberry Pi Pico atau ESP32, board menjalankan kode Python sendiri: kamu mengetik perintah tanpa tahap kompilasi dan langsung melihat LED menyala. Jika kamu sudah belajar Python di sekolah atau di komputer, kamu bisa memakai sintaks yang sama untuk membaca pin, menggerakkan motor, mengumpulkan data sensor, dan terhubung ke Wi-Fi.
Dalam panduan ini kamu akan mempelajari perbedaan MicroPython dengan Python biasa, REPL yang memungkinkanmu berkomunikasi langsung dengan board, serta modul yang paling sering dipakai, yaitu machine.Pin, PWM, ADC, dan I2C, disertai contoh kode. Lalu kamu akan melihat perbedaan time.sleep dan ticks_ms, file main.py dan boot.py yang dijalankan ketika board mulai menyala, upload file dengan Thonny dan mpremote, penambahan library dengan mip, serta penulisan firmware ke Pico dan ESP32. Pada bagian terakhir, kita membandingkan MicroPython dengan Arduino C++ secara berdampingan.

Apa itu MicroPython dan apa bedanya dengan Python?
MicroPython adalah proyek sumber terbuka yang dimulai oleh Damien George pada 2013 untuk sebuah board kecil, dan sekarang mendukung puluhan mikrokontroler. Firmware yang kamu pasang pada board berisi interpreter Python, modul inti, dan sistem file kecil. Kodemu terlebih dahulu diubah menjadi bytecode pada board, lalu interpreter menjalankan bytecode tersebut langkah demi langkah. Karena seluruh Python di komputermu tidak mungkin dimuat dalam beberapa ratus KB RAM, bahasanya tetap sama tetapi sebagian besar library diperkecil atau sama sekali tidak tersedia. Sebagai gantinya, ditambahkan sesuatu yang tidak dimiliki Python desktop: modul machine, yang memberikan akses langsung ke perangkat keras.
| Topik | Python (komputer) | MicroPython (board) |
|---|---|---|
| Tempat menjalankannya | Komputer dengan RAM berukuran gigabyte | Mikrokontroler dengan RAM berukuran ratusan KB |
| Library standar | Sangat besar: datetime, threading, urllib... | Sebagian kecil: time, os, json, re, struct, random, math... |
| Paket | numpy, pandas, dan ribuan lainnya melalui pip | Tidak ada numpy atau pandas; paket micropython-lib melalui mip |
| Akses perangkat keras | Tidak ada, perlu library tambahan | Modul machine: Pin, PWM, ADC, I2C, SPI, UART, Timer |
| Bilangan floating-point | 64-bit (sekitar 15 digit) | 32-bit pada Pico dan ESP32 (sekitar 7 digit) |
| Waktu | time.time(), datetime (fungsi waktu Python standar) | time.sleep_ms(), time.ticks_ms(), machine.RTC (fungsi waktu MicroPython) |
| Memulai program | Kamu menjalankannya dari baris perintah | boot.py dan main.py berjalan otomatis ketika board mulai menyala |
Board yang menjalankan MicroPython
| Board | File firmware | Total RAM | Catatan |
|---|---|---|---|
| Raspberry Pi Pico (RP2040) | RPI_PICO (.uf2) | 264 KB | Board termudah untuk memulai |
| Raspberry Pi Pico W | RPI_PICO_W (.uf2) | 264 KB | Modul network untuk Wi-Fi; firmware Pico biasa tidak mengaktifkan Wi-Fi pada board ini |
| Raspberry Pi Pico 2 (RP2350) | RPI_PICO2 (.uf2) | 520 KB | Lebih cepat, memori lebih besar |
| ESP32 (WROOM) | ESP32_GENERIC (.bin) | 520 KB (sebagian dipakai Wi-Fi) | Wi-Fi dan Bluetooth; memori jauh lebih besar pada model dengan PSRAM |
| ESP8266 (NodeMCU, Wemos D1 Mini) | ESP8266_GENERIC (.bin) | Sekitar 80 KB | Bisa digunakan, tetapi memorinya terbatas; pilih ESP32 untuk proyek baru |
| Arduino Uno (ATmega328P) | Tidak ada | 2 KB | Tidak bisa menjalankan MicroPython; diprogram dengan C++ |
Menulis firmware MicroPython ke Pico dan ESP32
- Pico: Tahan tombol BOOTSEL pada board sambil mencolokkan kabel USB, lalu lepaskan. Drive bernama RPI-RP2 muncul di komputermu (RP2350 pada Pico 2).
- Unduh file .uf2 yang sesuai untuk board-mu dari halaman unduhan resmi MicroPython (RPI_PICO untuk Pico, RPI_PICO_W untuk Pico W), lalu seret ke drive tersebut.
- Begitu penyalinan selesai, board memulai ulang secara otomatis dan drive menghilang; MicroPython sudah terinstal. Di Thonny, pilih MicroPython (Raspberry Pi Pico) pada Tools › Options › Interpreter.
- ESP32: Jika Python sudah terinstal di komputermu, ketik pip install esptool pada baris perintah. Colokkan board dan cari port-nya (misalnya COM3 pada Windows, /dev/ttyUSB0 pada Linux).
- Hapus isi flash terlebih dahulu: esptool.py --chip esp32 --port COM3 erase_flash. Jika board tidak mau terhubung, tahan tombol BOOT selama perintah berjalan.
- Tulis firmware: esptool.py --chip esp32 --port COM3 --baud 460800 write_flash -z 0x1000 ESP32_GENERIC-....bin. Pada ESP32-S3 dan ESP32-C3, alamatnya adalah 0x0. Opsi Install or update MicroPython (esptool) di Thonny melakukan hal yang sama melalui sebuah jendela.
REPL: berkomunikasi langsung dengan board
REPL (Read-Eval-Print Loop) adalah baris perintah yang disediakan board untukmu melalui port serial. Prompt >>> yang kamu lihat di jendela Shell pada bagian bawah Thonny berarti REPL sedang menunggu perintahmu. Ketik 1 + 1 dan board menghitung lalu mengembalikan 2; ketik from machine import Pin diikuti Pin("LED", Pin.OUT).value(1) dan LED Pico langsung menyala. Tidak ada cara yang lebih cepat daripada REPL untuk membaca nilai sensor, memeriksa apakah pengkabelan pin sudah benar, atau mempelajari cara kerja library, semuanya tanpa menunggu kompilasi dan upload.
| Pintasan atau perintah | Fungsinya |
|---|---|
| Ctrl+C | Menghentikan program yang berjalan (KeyboardInterrupt) dan kembali ke REPL |
| Ctrl+D | Soft reset; boot.py dan main.py dijalankan lagi |
| Ctrl+E | Mode tempel: tempel kode panjang tanpa merusak indentasi, jalankan dengan Ctrl+D |
| Tab | Pelengkapan otomatis; ketik machine. dan tekan Tab untuk melihat seluruh isi modul |
| help("modules") | Menampilkan daftar semua modul dalam firmware |
| import gc; gc.mem_free() | Menampilkan RAM kosong yang tersedia untuk programmu, dalam byte |
| import os; os.listdir() | Menampilkan daftar file pada board |
Program pertama dan padanannya dalam Arduino C++
1# İlk program: dahili LED'i yakıp söndür / First program: blink the onboard LED
2from machine import Pin
3import time
4
5led = Pin("LED", Pin.OUT) # Pico ve Pico W; ESP32'de Pin(2, Pin.OUT) / Pico and Pico W; Pin(2, Pin.OUT) on ESP32
6
7while True:
8 led.value(1) # yak / on
9 time.sleep(0.5) # saniye cinsinden / in seconds
10 led.value(0) # söndür / off
11 time.sleep(0.5)1// Aynı program Arduino C++ ile / The same program in Arduino C++
2void setup() {
3 pinMode(LED_BUILTIN, OUTPUT);
4}
5
6void loop() {
7 digitalWrite(LED_BUILTIN, HIGH);
8 delay(500); // milisaniye cinsinden / in milliseconds
9 digitalWrite(LED_BUILTIN, LOW);
10 delay(500);
11}Kedua program melakukan pekerjaan yang sama tetapi memiliki struktur berbeda. MicroPython tidak memiliki setup() atau loop(): file berjalan sekali dari atas ke bawah, dan kamu membuat sendiri perulangan tanpa akhir dengan while True:. Sebagai pengganti kurung kurawal dan titik koma, MicroPython memakai indentasi; setiap baris di dalam perulangan harus menjorok dengan jumlah yang sama (biasanya 4 spasi). Satuan jedanya juga berbeda: time.sleep(0.5) memakai detik, sedangkan delay(500) pada Arduino memakai milidetik. Di MicroPython kamu memakai time.sleep_ms() untuk milidetik dan time.sleep_us() untuk mikrodetik. Dasar-dasar pada sisi Arduino ada dalam dasar pemrograman Arduino.
machine.Pin: input dan output digital
| MicroPython | Padanan Arduino C++ | Deskripsi |
|---|---|---|
| led = Pin(15, Pin.OUT) | pinMode(15, OUTPUT) | Menjadikan pin sebagai output |
| led.value(1) atau led.on() | digitalWrite(15, HIGH) | Mengatur pin ke HIGH; value(0) atau off() mengaturnya ke LOW |
| buton = Pin(14, Pin.IN, Pin.PULL_UP) | pinMode(14, INPUT_PULLUP) | Input dengan resistor pull-up internal |
| buton.value() | digitalRead(14) | Mengembalikan 0 atau 1 |
| led.toggle() | digitalWrite(15, !digitalRead(15)) | Membalik status; tersedia pada Pico, gunakan value(not led.value()) pada ESP32 |
| buton.irq(trigger=Pin.IRQ_FALLING, handler=f) (pengaturan interupsi di MicroPython) | attachInterrupt(..., f, FALLING) | Memanggil fungsi f ketika status pin berubah |
time.sleep dan ticks_ms: mengukur waktu tanpa memblokir
time.sleep() membuat board sepenuhnya menunggu; selama itu tidak ada tombol yang dibaca maupun sensor yang diperiksa. Untuk menjalankan beberapa pekerjaan sekaligus, kamu memakai padanan pendekatan millis() Arduino di MicroPython: time.ticks_ms() memberikan jumlah milidetik sejak board mulai menyala, dan time.ticks_diff(new, old) menghitung selisih antara dua waktu. Penting untuk menghitung selisih dengan ticks_diff, bukan pengurangan biasa; penghitung kembali ke awal setelah mencapai nilai tertentu, dan pengurangan biasa memberikan hasil yang salah pada titik tersebut. Kode di bawah membuat LED berkedip tanpa memblokir sambil memantau tombol melalui interrupt (IRQ); setiap penekanan mengubah kecepatan kedipan.
1# delay kullanmadan iki iş: LED yanıp söner, buton kesmeyle modu değiştirir
2# Two jobs without blocking: the LED blinks, a button interrupt switches the mode
3from machine import Pin
4import time
5
6led = Pin(15, Pin.OUT) # LED + 220 Ω, GP15
7buton = Pin(14, Pin.IN, Pin.PULL_UP) # buton GP14 ile GND arasında / button between GP14 and GND
8
9hizli = False
10son_basma = 0
11son_degisim = time.ticks_ms()
12
13def buton_kesme(pin): # kesme fonksiyonu kısa olmalı / keep the handler short
14 global hizli, son_basma
15 simdi = time.ticks_ms()
16 if time.ticks_diff(simdi, son_basma) > 200: # 200 ms debounce / 200 ms debounce
17 son_basma = simdi
18 hizli = not hizli
19
20buton.irq(trigger=Pin.IRQ_FALLING, handler=buton_kesme) # basınca HIGH'dan LOW'a iner / goes HIGH to LOW when pressed
21
22while True:
23 aralik = 100 if hizli else 500
24 if time.ticks_diff(time.ticks_ms(), son_degisim) >= aralik: # taşmaya karşı güvenli / safe against wrap-around
25 son_degisim = time.ticks_ms()
26 led.value(not led.value())
27 # burada başka işler yapılabilir / other work can run herePWM: kecerahan, servo, dan suara
1# PWM: LED parlaklığı ve servo açısı / PWM: LED brightness and servo angle
2from machine import Pin, PWM
3import time
4
5led = PWM(Pin(15))
6led.freq(1000) # 1 kHz: titreme görünmez / no visible flicker
7
8for d in range(0, 65536, 2048): # duty_u16: 0 (kapalı) ... 65535 (tam) / 0 (off) ... 65535 (full)
9 led.duty_u16(d)
10 time.sleep_ms(20)
11led.duty_u16(0)
12
13servo = PWM(Pin(16))
14servo.freq(50) # servolar 50 Hz (20 ms) ister / servos expect 50 Hz (20 ms)
15
16def servo_aci(derece):
17 us = 500 + derece * 2000 // 180 # 0° = 0,5 ms, 180° = 2,5 ms; servona göre ayarla / tune for your servo
18 servo.duty_ns(us * 1000)
19
20for a in (0, 90, 180, 90):
21 servo_aci(a)
22 time.sleep(1)Objek PWM menyalakan dan mematikan pin dengan sangat cepat untuk mengatur daya rata-rata. freq() mengatur berapa kali pengulangan ini terjadi per detik, dan duty_u16() mengatur lamanya pin menyala dengan angka antara 0 dan 65535; 32768 berarti sekitar 50 persen. Skala ini memberikan langkah yang jauh lebih halus daripada rentang 0–255 pada analogWrite Arduino. Servo membutuhkan sinyal 50 Hz dan lebar pulsa antara 0,5 dan 2,5 ms; duty_ns() mengatur durasi pulsa langsung dalam nanodetik, sehingga kode servo jauh lebih sederhana. Kamu juga bisa memainkan nada dengan memberikan nilai freq() yang berbeda pada buzzer pasif. Duty cycle dan frekuensi dijelaskan secara terperinci dalam Apa Itu PWM?.
ADC: pembacaan analog
1# ADC: potansiyometre ve Pico'nun dahili sıcaklık sensörü
2# ADC: a potentiometer and the Pico's internal temperature sensor
3from machine import ADC, Pin
4import time
5
6pot = ADC(Pin(26)) # GP26 = ADC0; ESP32'de ADC(Pin(34)) / ADC(Pin(34)) on ESP32
7yonga = ADC(4) # 4. kanal: dahili sıcaklık / channel 4: internal temperature
8
9def ortalama(adc, n=16): # gürültüyü azalt / reduce noise
10 toplam = 0
11 for _ in range(n):
12 toplam += adc.read_u16()
13 return toplam // n
14
15while True:
16 ham = ortalama(pot) # 0-65535 (12 bit ölçüm 16 bite ölçeklenir) / 12-bit reading scaled to 16 bits
17 volt = ham * 3.3 / 65535
18 v_t = ortalama(yonga) * 3.3 / 65535
19 derece = 27 - (v_t - 0.706) / 0.001721 # RP2040 veri sayfasındaki formül / formula from the RP2040 datasheet
20 print("Pot: {} ({:.2f} V) Yonga / chip: {:.1f} C".format(ham, volt, derece))
21 time.sleep(1)read_u16() mengembalikan nilai antara 0 dan 65535 pada setiap board, sehingga kode yang sama berjalan pada Pico dan ESP32. ADC Pico sebenarnya 12-bit, dan pembacaannya diskalakan menjadi 16 bit. Pico memiliki tiga pin analog yang bisa diakses pengguna: GP26 (ADC0), GP27 (ADC1), dan GP28 (ADC2); kanal keempat adalah sensor suhu di dalam chip, yang mengukur suhu chip, bukan suhu ruangan. Pada ESP32 kamu memerlukan adc.atten(ADC.ATTN_11DB) untuk membaca seluruh rentang 0–3,3 V, dan pin ADC2 tidak bisa dipakai selama Wi-Fi aktif, jadi pilih pin ADC1 antara GPIO 32 dan 39. Perataan 16 sampel dalam kode mengurangi derau ADC secara nyata. Konsep seperti resolusi dan tegangan referensi dibahas dalam Apa Itu ADC?.
I2C: menghubungkan sensor dan layar
1# I2C: hattı tara ve SSD1306 OLED'e yaz / I2C: scan the bus and write to an SSD1306 OLED
2from machine import Pin, I2C
3import ssd1306 # önce: mpremote mip install ssd1306 / first: mpremote mip install ssd1306
4
5i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000) # Pico; ESP32'de I2C(0, sda=Pin(21), scl=Pin(22))
6adresler = i2c.scan()
7print("Bulunan / found:", [hex(a) for a in adresler]) # OLED genelde 0x3c / OLED is usually 0x3c
8
9if 0x3C in adresler:
10 oled = ssd1306.SSD1306_I2C(128, 64, i2c)
11 oled.fill(0)
12 oled.text("MicroPython", 0, 0)
13 oled.text("I2C: " + hex(adresler[0]), 0, 16)
14 oled.show()I2C(0, sda=..., scl=...) memulai unit I2C perangkat keras pada pin yang kamu pilih, dan scan() mengembalikan daftar alamat semua perangkat yang merespons pada bus. Jika sensor tidak bekerja, pemindaian ini adalah hal pertama yang perlu dilakukan: daftar kosong berarti masalah ada pada pengkabelan, dan alamat yang tidak sesuai perkiraan berarti kamu perlu memperbaiki alamat dalam kode. Pada Pico, pin yang bisa dipakai setiap unit I2C sudah ditentukan; misalnya pasangan GP0-GP1, GP4-GP5, atau GP8-GP9 dapat dipakai untuk I2C0, dan memilih pasangan yang salah menghasilkan ValueError. Pada ESP32, I2C bisa ditempatkan pada hampir semua pin. Detail layar ada dalam layar OLED, dan protokolnya sendiri dalam Apa Itu I2C?.
main.py dan boot.py: kode yang berjalan ketika board mulai menyala
Ketika kamu menekan Run di Thonny, kode hanya berjalan pada waktu itu tanpa disimpan pada board; kode hilang ketika kamu mencabut USB. Agar kodemu berjalan otomatis setiap kali board mulai menyala, kamu harus menyimpan file pada board dengan nama main.py. Ketika board mulai menyala, boot.py berjalan lebih dahulu, lalu main.py. boot.py dipakai untuk persiapan yang dilakukan sekali, seperti menghubungkan Wi-Fi atau mengatur jam; firmware ESP32 membuat file ini secara otomatis, sedangkan pada Pico biasanya file ini tidak ada. Program utamamu selalu berada di main.py. Kamu bisa memasukkan fungsi yang ditulis dalam file lain ke main.py dengan import, serta menyimpan hasil pembacaan ke sistem file board dengan open().
1# main.py: kart her açıldığında otomatik çalışır / runs automatically every time the board starts
2import time
3from machine import Pin
4
5time.sleep(3) # Ctrl+C ile durdurmak için güvenlik payı / a safety window for Ctrl+C
6led = Pin("LED", Pin.OUT)
7sayac = 0
8
9try:
10 while True:
11 sayac += 1
12 led.value(sayac % 2)
13 print("Calisiyor / running", sayac)
14 time.sleep(1)
15except KeyboardInterrupt: # Thonny'de Stop ya da Ctrl+C / Stop in Thonny or Ctrl+C
16 led.value(0)
17 print("Durduruldu / stopped")Upload file: Thonny dan mpremote
Jika kamu baru mulai, Thonny adalah cara termudah: tulis kodemu, pilih File › Save as, pilih Raspberry Pi Pico atau MicroPython device pada jendela yang terbuka, lalu beri nama file main.py. Buka View › Files untuk melihat file di komputer dan pada board secara berdampingan, lalu kamu bisa menyalin dari satu tempat ke tempat lain dengan klik kanan. Untuk kamu yang menyukai baris perintah dan memakai editor seperti VS Code, alat resminya adalah mpremote; instal dengan pip install mpremote dan alat ini otomatis terhubung ke board MicroPython pertama yang ditemukannya.
| Perintah mpremote | Fungsinya |
|---|---|
| mpremote | Terhubung ke board pertama yang ditemukan dan membuka REPL (keluar: Ctrl+X) |
| mpremote ls | Menampilkan daftar file pada board |
| mpremote cp main.py :main.py (perintah menyalin file ke papan) | Menyalin file dari komputer ke board; titik dua (:) menandakan board |
| mpremote run test.py (perintah menjalankan file) | Menjalankan file tanpa menyimpannya pada board dan menampilkan output-nya |
| mpremote mip install ssd1306 (perintah memasang pustaka) | Mengunduh library melalui koneksi internet komputer dan menginstalnya dalam folder /lib pada board |
| mpremote reset | Memulai ulang board |
| mpremote connect COM3 ls | Terhubung ke board pada port tertentu (seperti /dev/ttyACM0 pada macOS dan Linux) |
Menambahkan library: mip
MicroPython tidak memiliki pip; sebagai gantinya dipakai pengelola paket kecil bernama mip. Pada board yang bisa terhubung ke internet, seperti Pico W atau ESP32, kamu terlebih dahulu terhubung ke Wi-Fi, lalu mengetik import mip dan mip.install("ssd1306") di REPL; paket diunduh dari repositori resmi micropython-lib dan ditempatkan dalam folder /lib pada board. Kamu juga bisa menginstal driver dari GitHub dengan mip.install("github:user/repo"). Untuk Pico tanpa Wi-Fi, lakukan hal yang sama dari komputer dengan perintah mpremote mip install atau menu Tools › Manage packages di Thonny. Menyalin driver satu file (misalnya file .py yang ditulis untuk sebuah sensor) ke board juga bisa; selama file berada di direktori akar atau /lib, kamu bisa memuatnya dengan import. Langkah koneksi Wi-Fi ada dalam Wi-Fi Pico W.
MicroPython atau Arduino C++?
| Fitur | MicroPython | Arduino C++ |
|---|---|---|
| Bahasa | Sintaks Python 3 | C++ dan core Arduino |
| Cara menjalankannya | Interpreter pada board menjalankan bytecode | Dikompilasi menjadi kode mesin di komputer |
| Waktu mencoba perubahan | Langsung di REPL; penyimpanan memerlukan 1–2 detik | Kompilasi dan upload setiap perubahan, 10–60 detik |
| Kecepatan | Perulangan Python murni sekitar 10–100 kali lebih lambat | Kecepatan native |
| Pengaturan waktu | Garbage collector terkadang menimbulkan jeda singkat | Dapat diprediksi hingga tingkat mikrodetik |
| Sistem file | Ada: main.py, file data, dan file pengaturan | Tidak ada; perlu EEPROM atau library tambahan |
| Library | micropython-lib dan driver komunitas | Ekosistem library Arduino yang sangat luas |
| Board | Pico, ESP32, ESP8266 | Hampir semuanya, termasuk Uno, Nano, dan Mega |
| Pesan error | Pesan jelas dengan nomor baris ketika program berjalan | Error kompilasi; Serial.print untuk memantau ketika program berjalan |
| Paling cocok untuk | Belajar, percobaan cepat, Wi-Fi, dan pengolahan data | Pengaturan waktu presisi, board dengan memori kecil, banyak library siap pakai |
Dalam praktiknya, proyekmu yang menentukan pilihan. Membaca sensor dan mengirim datanya melalui Wi-Fi, menyajikan halaman web, atau mengendalikan layar membutuhkan lebih sedikit baris kode dan lebih cepat diselesaikan dengan MicroPython. Menghasilkan sinyal dengan presisi mikrodetik, memperbarui ratusan LED dengan sangat cepat, atau hanya memiliki board kecil seperti Uno membuat C++ lebih unggul. Kamu bisa mempercepat fungsi yang lambat dengan dekorator @micropython.native, dan mengurangi jeda garbage collector dengan menghindari pembuatan list dan string baru di dalam perulangan. Untuk memilih board, lihat juga Arduino vs ESP32.
Error umum dan solusinya
| Error atau gejala | Penyebab | Solusi |
|---|---|---|
| “ImportError: no module named 'ssd1306'” | Library tidak ada pada board | Instal dengan mip atau mpremote mip, atau salin file .py ke board |
| IndentationError | Indentasi tidak konsisten, spasi dan tab tercampur | Gunakan 4 spasi di seluruh file; Thonny melakukannya untukmu |
| “OSError: [Errno 5] EIO (I2C)” | Perangkat tidak merespons: pengkabelan, alamat, atau daya | Periksa alamat dengan scan(), pastikan SDA dan SCL benar |
| “ValueError: bad SCL pin” | Pin yang dipilih bukan milik unit I2C tersebut | Pilih pasangan I2C0 atau I2C1 yang benar dari pinout Pico |
| Kode berjalan di Thonny tetapi tidak setelah USB dicabut | File tidak disimpan pada board dengan nama main.py | Gunakan Save as untuk menyimpannya pada board dengan nama main.py |
| “MemoryError: memory allocation failed” | RAM penuh: list besar, string panjang, atau buffer besar | Proses data bagian demi bagian, panggil gc.collect(), gunakan bytearray |
| “Thonny: Device is busy or does not respond” | main.py berada dalam perulangan tanpa jeda, atau program lain memakai port tersebut | Stop atau Ctrl+C, tutup program lain, hapus isi flash jika perlu |
MicroPython adalah jalan terpendek ke dunia mikrokontroler jika kamu sudah mengenal Python: hasilnya langsung terlihat begitu kamu mencoba pin di REPL, dan beberapa baris kode sudah cukup untuk membaca sensor dan terhubung ke Wi-Fi. Setelah mempelajari modul inti, konsep main.py, dan pengaturan waktu tanpa memblokir dengan ticks_ms, proyekmu akan berkembang dengan cepat. Dalam aplikasi BlueGrays kamu akan menemukan proyek Raspberry Pi Pico dengan LED, lampu lalu lintas, tombol, dan PWM, lengkap dengan skema rangkaian langkah demi langkah dan kode MicroPython.
Pertanyaan umum
Apa itu MicroPython?
MicroPython adalah versi kecil bahasa Python 3 yang dibuat untuk mikrokontroler. Berkat firmware yang dipasang pada board, board seperti Raspberry Pi Pico dan ESP32 menjalankan kode Python secara langsung; modul machine memberimu akses ke pin, PWM, ADC, dan I2C.
Apakah MicroPython sama dengan Python?
Sintaksnya sama, tetapi MicroPython merupakan bagian dari Python desktop yang diperkecil. Library besar seperti numpy dan pandas tidak tersedia, library standar dikurangi, dan bilangan floating-point berukuran 32-bit pada Pico dan ESP32. Sebagai gantinya, modul machine ditambahkan untuk akses langsung ke perangkat keras.
Mana yang lebih baik, MicroPython atau Arduino?
Tergantung tujuanmu. MicroPython lebih nyaman untuk belajar, percobaan cepat, dan proyek yang mengirim data melalui Wi-Fi; Arduino C++ berjalan lebih cepat, memiliki pengaturan waktu lebih presisi, dan menawarkan jauh lebih banyak library siap pakai. Pico dan ESP32 bisa diprogram dengan kedua cara tersebut.
Apakah MicroPython berjalan pada Arduino Uno?
Tidak. Chip ATmega328P pada Arduino Uno hanya memiliki RAM 2 KB dan flash 32 KB, sehingga interpreter MicroPython tidak muat. Jika kamu ingin memakai MicroPython, pilih board yang lebih kuat seperti Raspberry Pi Pico atau ESP32.
Bagaimana cara menginstal library di MicroPython?
Pada board yang terhubung ke internet, ketik import mip dan mip.install("package_name") di REPL. Pada board tanpa Wi-Fi, lakukan hal yang sama dari komputer dengan perintah mpremote mip install package_name atau pengelola paket Thonny. Menyalin driver satu file ke board juga bisa.
Bagaimana cara menyimpan kode secara permanen pada Pico?
Di Thonny, pilih Raspberry Pi Pico dari File › Save as dan beri nama file main.py. Setiap kali board mulai menyala, boot.py berjalan lebih dahulu, lalu main.py berjalan otomatis; meskipun kamu mencabut USB dari komputer dan mencolokkannya ke sumber 5 V lain, program tetap berjalan.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
Kedip LED Bawaan Raspberry Pi Pico (Pico dan Pico W)
Proyek pembuka seri Raspberry Pi Pico! Kita mengedipkan LED hijau bawaan untuk memastikan board bekerja; percobaan "Hello World" klasik. TANPA komponen eksternal, hanya Pico dan kabel USB. Kodenya ditulis dalam MicroPython (bahasa resmi dari Raspberry Pi Foundation). Pelajari kelas machine.Pin, mode Pin.OUT, metode led.on()/off(), dan time.sleep() di Thonny IDE, dan ikuti setiap perubahan di output Serial (REPL). Juga pas untuk menguji firmware MicroPython.

Raspberry Pi Pico: Mengendalikan LED Eksternal (Breadboard)
Langkah berikutnya setelah LED bawaan Pico: menyambungkan LED eksternal ke breadboard dan mengendalikannya lewat pin GP14. Di proyek ini, kamu belajar memakai pin GPIO serbaguna Pico mana pun sebagai output, polaritas LED (kaki panjang = anoda/+, kaki pendek = katoda/–), dan kenapa resistor pembatas arus (220Ω) diperlukan. Tanpa resistor, arus berlebih mengalir melalui LED dan LED bisa terbakar. Rangkaiannya sangat sederhana: Pico GP14 → resistor 220Ω → LED → GND.

Dua LED Bergantian Raspberry Pi Pico (Pola Kedip Bergantian)
Langkah berikutnya setelah satu LED di Pico: dua LED berkedip bergantian dengan pola flip-flop klasik. Ketika satu mati, yang lain menyala; contoh paling dasar koordinasi beberapa GPIO. Dua LED berbeda warna (merah di GP14, hijau di GP13) bertukar status setiap 500 ms, dan metode Pin.toggle() MicroPython membuat kodenya singkat. Logika yang sama menjadi dasar lampu lalu lintas, lampu polisi, dan LED berjalan. Setiap LED memakai resistor 220Ω-nya sendiri.

Simulator Lampu Lalu Lintas Raspberry Pi Pico (3 LED Berurutan)
Kita menyimulasikan lampu lalu lintas sungguhan dengan LED merah, kuning, dan hijau; proyek 3 LED pertama di seri Pico! Hijau 4 detik "jalan", kuning 1,5 detik "siap", merah 3 detik "berhenti", dan merah+kuning 1 detik "bersiap" (pola Eropa). Pelajari pendefinisian fungsi (def all_off()), logika state machine, dan sinkronisasi beberapa GPIO. 3 LED di GP11 (Hijau), GP12 (Kuning), GP13 (Merah), masing-masing dengan resistor 220Ω, berdampingan di board.

LED yang Dikendalikan Tombol Raspberry Pi Pico (Tekan)
Proyek input pertama dengan Pico: membaca tombol! LED menyala selama tombol ditekan, dan mati ketika dilepas. Ini langkah besar setelah animasi LED: sinyal masuk dari dunia luar ke Pico. Pelajari Pin.IN (mode input), Pin.PULL_UP (resistor pull-up internal, standar untuk tombol), dan pembacaan button.value(). LED di GP14, tombol di GP2 (PULL_UP internal). Ditekan = LOW (0), dilepas = HIGH (1); logika terbalik ini awalnya terasa membingungkan, tetapi merupakan standar industri.

Debounce Tombol Raspberry Pi Pico: IRQ vs Polling Perangkat Lunak
Tekan tombol sekali, kode menghitung 3-4? Itu pantulan kontak: kontak logam bergetar beberapa mikrodetik! Bandingkan 2 metode di Serial: polling MENTAH (ikut menghitung pantulan) vs IRQ + debounce perangkat lunak (akurat). Pelajari pantulan kontak, debounce perangkat lunak (ticks_diff() > 50ms), interrupt Pin.irq(), pemicu IRQ_FALLING, handler ISR, serta global + keamanan ISR. LED berbalik lewat IRQ, dan Serial menampilkan kedua penghitung.

LED Fade PWM Raspberry Pi Pico (Efek Bernapas)
LED tidak lagi sekadar berkedip, ia bernapas! Dengan PWM (Pulse Width Modulation) Pico, kecerahan LED naik lalu turun perlahan, seperti lampu MacBook yang tidur. Pelajari kelas machine.PWM, duty_u16() (kecerahan 16-bit 0–65535), frekuensi PWM (freq(1000): 1000 siklus per detik, tanpa kedipan terlihat), loop range() bertahap, dan output mirip analog dari pin digital. PWM juga dipakai untuk warna RGB, motor, servo, dan buzzer.

Siklus Warna LED RGB Raspberry Pi Pico (PWM 3 Kanal)
Satu LED, jutaan warna! LED RGB berisi 3 LED: merah, hijau, dan biru. Masing-masing digerakkan dengan kanal PWM Pico sendiri: merah + hijau = kuning, hijau + biru = cyan, ketiganya = putih. LED berputar melewati 8 warna. Pelajari beberapa kanal PWM, mendefinisikan fungsi (def set_color(...)), pencampuran warna RGB (cara kerja layar), konversi 8-bit → 16-bit (x257 memetakan 0–255 ke 0–65535), dan LED katoda bersama vs anoda bersama.
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

