Dasar · 9 mnt baca

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.

Raspberry Pi Pico yang menjalankan MicroPython
Raspberry Pi Pico: board termudah untuk mulai memakai MicroPython. Cukup seret dan lepas file UF2.

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.

TopikPython (komputer)MicroPython (board)
Tempat menjalankannyaKomputer dengan RAM berukuran gigabyteMikrokontroler dengan RAM berukuran ratusan KB
Library standarSangat besar: datetime, threading, urllib...Sebagian kecil: time, os, json, re, struct, random, math...
Paketnumpy, pandas, dan ribuan lainnya melalui pipTidak ada numpy atau pandas; paket micropython-lib melalui mip
Akses perangkat kerasTidak ada, perlu library tambahanModul machine: Pin, PWM, ADC, I2C, SPI, UART, Timer
Bilangan floating-point64-bit (sekitar 15 digit)32-bit pada Pico dan ESP32 (sekitar 7 digit)
Waktutime.time(), datetime (fungsi waktu Python standar)time.sleep_ms(), time.ticks_ms(), machine.RTC (fungsi waktu MicroPython)
Memulai programKamu menjalankannya dari baris perintahboot.py dan main.py berjalan otomatis ketika board mulai menyala

Board yang menjalankan MicroPython

BoardFile firmwareTotal RAMCatatan
Raspberry Pi Pico (RP2040)RPI_PICO (.uf2)264 KBBoard termudah untuk memulai
Raspberry Pi Pico WRPI_PICO_W (.uf2)264 KBModul network untuk Wi-Fi; firmware Pico biasa tidak mengaktifkan Wi-Fi pada board ini
Raspberry Pi Pico 2 (RP2350)RPI_PICO2 (.uf2)520 KBLebih 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 KBBisa digunakan, tetapi memorinya terbatas; pilih ESP32 untuk proyek baru
Arduino Uno (ATmega328P)Tidak ada2 KBTidak bisa menjalankan MicroPython; diprogram dengan C++
  1. Pico: Tahan tombol BOOTSEL pada board sambil mencolokkan kabel USB, lalu lepaskan. Drive bernama RPI-RP2 muncul di komputermu (RP2350 pada Pico 2).
  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.
  3. 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.
  4. 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).
  5. Hapus isi flash terlebih dahulu: esptool.py --chip esp32 --port COM3 erase_flash. Jika board tidak mau terhubung, tahan tombol BOOT selama perintah berjalan.
  6. 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.
Penulisan firmware menghapus program dan file lama pada board, termasuk kode yang kamu upload dengan Arduino IDE. Sebaliknya, meng-upload kode dengan Arduino IDE ke board yang menjalankan MicroPython akan menghapus MicroPython; untuk kembali memakainya kamu perlu menulis firmware lagi. Jika sistem file Pico rusak atau board macet, file resmi flash_nuke.uf2 menghapus seluruh isi flash. Pin Pico dan panduan pengaturan pertama dari layar ke layar ada dalam Apa Itu Raspberry Pi Pico?.

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 perintahFungsinya
Ctrl+CMenghentikan program yang berjalan (KeyboardInterrupt) dan kembali ke REPL
Ctrl+DSoft reset; boot.py dan main.py dijalankan lagi
Ctrl+EMode tempel: tempel kode panjang tanpa merusak indentasi, jalankan dengan Ctrl+D
TabPelengkapan 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++

MicroPython
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)
C++ (Arduino IDE)
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

MicroPythonPadanan 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.

MicroPython
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 here
Buat handler interrupt tetap singkat: cukup balik nilai flag atau simpan penanda waktu, dan serahkan pekerjaan panjang ke perulangan utama. Untuk variabel yang kamu ubah dari interrupt, jangan lupa menulis global di bagian atas fungsi; jika tidak, Python membuat variabel lokal baru dengan nama yang sama di dalam fungsi dan perulangan utama tidak pernah melihat perubahannya. Penerapan konsep yang sama pada Arduino ada dalam millis vs delay.

PWM: kecerahan, servo, dan suara

MicroPython
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

MicroPython
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

MicroPython
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().

MicroPython
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")
Jika main.py berisi perulangan tanpa akhir yang berjalan terus tanpa jeda sama sekali, Thonny mungkin gagal terhubung ke board dan menampilkan Device is busy or does not respond. Pertama, tekan tombol Stop di Thonny beberapa kali atau coba Ctrl+C di Shell. Jika gagal, kamu perlu menyalakan Pico dengan BOOTSEL dan menghapus isinya memakai flash_nuke.uf2, atau menghapus flash dan menulis ulang firmware pada ESP32. Jeda awal 3 detik dalam kode memberimu waktu untuk menghentikan program sebelum mengalami kondisi tersebut.

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 mpremoteFungsinya
mpremoteTerhubung ke board pertama yang ditemukan dan membuka REPL (keluar: Ctrl+X)
mpremote lsMenampilkan 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 resetMemulai ulang board
mpremote connect COM3 lsTerhubung 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++?

FiturMicroPythonArduino C++
BahasaSintaks Python 3C++ dan core Arduino
Cara menjalankannyaInterpreter pada board menjalankan bytecodeDikompilasi menjadi kode mesin di komputer
Waktu mencoba perubahanLangsung di REPL; penyimpanan memerlukan 1–2 detikKompilasi dan upload setiap perubahan, 10–60 detik
KecepatanPerulangan Python murni sekitar 10–100 kali lebih lambatKecepatan native
Pengaturan waktuGarbage collector terkadang menimbulkan jeda singkatDapat diprediksi hingga tingkat mikrodetik
Sistem fileAda: main.py, file data, dan file pengaturanTidak ada; perlu EEPROM atau library tambahan
Librarymicropython-lib dan driver komunitasEkosistem library Arduino yang sangat luas
BoardPico, ESP32, ESP8266Hampir semuanya, termasuk Uno, Nano, dan Mega
Pesan errorPesan jelas dengan nomor baris ketika program berjalanError kompilasi; Serial.print untuk memantau ketika program berjalan
Paling cocok untukBelajar, percobaan cepat, Wi-Fi, dan pengolahan dataPengaturan 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 gejalaPenyebabSolusi
“ImportError: no module named 'ssd1306'”Library tidak ada pada boardInstal dengan mip atau mpremote mip, atau salin file .py ke board
IndentationErrorIndentasi tidak konsisten, spasi dan tab tercampurGunakan 4 spasi di seluruh file; Thonny melakukannya untukmu
“OSError: [Errno 5] EIO (I2C)”Perangkat tidak merespons: pengkabelan, alamat, atau dayaPeriksa alamat dengan scan(), pastikan SDA dan SCL benar
“ValueError: bad SCL pin”Pin yang dipilih bukan milik unit I2C tersebutPilih pasangan I2C0 atau I2C1 yang benar dari pinout Pico
Kode berjalan di Thonny tetapi tidak setelah USB dicabutFile tidak disimpan pada board dengan nama main.pyGunakan Save as untuk menyimpannya pada board dengan nama main.py
“MemoryError: memory allocation failed”RAM penuh: list besar, string panjang, atau buffer besarProses 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 tersebutStop 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.

Lihat semua proyek
Kedip LED Bawaan Raspberry Pi Pico (Pico dan Pico W)
#147Pemula

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.

5.0(1)
10
Raspberry Pi Pico: Mengendalikan LED Eksternal (Breadboard)
#148Pemula

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.

4.5(2)
7
Dua LED Bergantian Raspberry Pi Pico (Pola Kedip Bergantian)
#149Pemula

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.

5.0(2)
19
Simulator Lampu Lalu Lintas Raspberry Pi Pico (3 LED Berurutan)
#150Pemula

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.

4.0(1)
12
LED yang Dikendalikan Tombol Raspberry Pi Pico (Tekan)
#155Pemula
Premium

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.

0.0(0)
11
Debounce Tombol Raspberry Pi Pico: IRQ vs Polling Perangkat Lunak
#159Menengah
Premium

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.

0.0(0)
12
LED Fade PWM Raspberry Pi Pico (Efek Bernapas)
#160Pemula

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.

0.0(0)
4
Siklus Warna LED RGB Raspberry Pi Pico (PWM 3 Kanal)
#161Pemula

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.

0.0(0)
6