Blog Archive

Arduino Indonesia. Gambar tema oleh Storman. Diberdayakan oleh Blogger.

Supported by Electronics 3 in 1

1. Jasa pencetakan PCB single layer dengan harga paling murah.

(Metode Pembuatan dengan Transfer Toner)
>PCB design sendiri (siap cetak) : Rp.150,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

(Metode Sablon Full Masking dan Silk Screen minimal pemesanan 100 Pcs)
>PCB design sendiri (siap cetak) : Rp.200,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

2. Jasa perancangan, perakitan, dan pembuatan trainer pembelajaran elektronika untuk SMK dan Mahasiswa.

3. Jasa perancangan, perakitan, dan pembuatan berbagai macam kontroller, sensor, aktuator, dan tranduser.
>Design Rangkaian / Sistem Elektronika
>Design Rangkaian / Sistem Instrumentasi
>Design Rangkaian / Sistem Kendali
>Kerjasama Riset (data atau peralatan)
>Kerjasama Produksi Produk-Produk KIT Elektronika
>Produksi Instrumentasi Elektronika

4. Jasa Pembuatan Proyek, Tugas Akhir, Tugas Laboratorium, PKM, Karya Ilmiah, SKRIPSI, dll

Like My Facebook

Popular Posts

Kamis, 18 September 2025

Library di MicroPython untuk Raspberry Pi Pico: Fungsi dan Cara Menggunakannya

Raspberry Pi Pico telah merevolusi dunia sistem tertanam (embedded system) dengan menawarkan mikrokontroler yang tangguh (powerful) dan terjangkau. Kekuatan sejatinya, selain dari hardware RP2040, terletak pada kemudahan pemrogramannya menggunakan MicroPython. Bahasa pemrograman ini menyederhanakan proses pengembangan dengan sintaksis yang ramah dan ekosistem library yang luas. Artikel ini akan membahas secara mendalam berbagai library penting dalam MicroPython untuk Raspberry Pi Pico, fungsinya, dan cara praktis dalam menggunakannya.


Memahami Ekosistem Library MicroPython

MicroPython datang dengan seperangkat library bawaan yang dikenal sebagai standard library. Library-library ini memberikan akses ke fungsi inti microcontroller dan periferalnya. Selain itu, komunitas yang luas telah mengembangkan banyak library pihak ketiga (third-party library) yang memperluas kemampuan Pico untuk berinteraksi dengan sensor, aktuator, modul, dan layanan cloud.

Library dapat dibagi menjadi beberapa kategori:

1.  Library Sistem dan MCU: Untuk mengontrol fungsi dasar microcontroller seperti GPIO, ADC, PWM, dan komunikasi (I2C, SPI, UART).

2.  Library Periferal Eksternal: Untuk mengendalikan perangkat tambahan (device) seperti sensor suhu, layar OLED, motor driver, dan lainnya.

3.  Library Jaringan dan IoT: Untuk konektivitas seperti Wi-Fi (pada Pico W) dan protokol MQTT.

4.  Library Utilitas: Untuk membantu pengembangan, seperti mengelola waktu, struktur data, dan pengukuran.

Library Bawaan Inti dan Penggunaannya

1. `machine` – Library yang Paling Penting

Library `machine` adalah jantung dari pemrograman Raspberry Pi Pico dengan MicroPython. Ini memberikan antarmuka langsung untuk mengendalikan periferal hardware pada chip RP2040.

Fungsi Utama:

- Mengontrol General Purpose Input/Output (GPIO).

- Menggunakan Analog-to-Digital Converter (ADC).

- Menghasilkan sinyal Pulse Width Modulation (PWM).

- Mengelola protokol komunikasi: I2C, SPI, UART.

- Mengatur timer dan interrupt.

Cara Menggunakan:

Mengontrol GPIO (Digital Output & Input):

 

```python

from machine import Pin

import time


# Inisialisasi LED onboard (GP25) sebagai OUTPUT

led = Pin(25, Pin.OUT)


# Inisialisasi pin GPIO 0 sebagai INPUT dengan pull-down resistor

button = Pin(0, Pin.IN, Pin.PULL_DOWN)


while True:

    if button.value() == 1: # Jika button ditekan (HIGH)

        led.value(1)        # LED menyala

    else:

        led.value(0)        # LED mati

    time.sleep(0.1)         # Delay untuk debounce

```

 

Menggunakan ADC (Membaca Sensor Analog):

Raspberry Pi Pico memiliki ADC 12-bit pada beberapa pinnya.

 

```python

from machine import Pin, ADC

import time


# Inisialisasi ADC pada pin GP26 (Channel 0)

sensor_potensiometer = ADC(Pin(26))


while True:

    # Baca nilai analog (0 - 65535, karena di-scale ke 16-bit)

    nilai_adc = sensor_potensiometer.read_u16()

    # Konversi ke voltage (3.3V reference)

    voltage = nilai_adc * (3.3 / 65535)

    print("Nilai ADC:", nilai_adc, "Voltage:", round(voltage, 2), "V")

    time.sleep(1)

```

 

Catatan: Meskipun nilai terbaca 0–65535, resolusi asli ADC Pico adalah 12-bit (0–4095). MicroPython mengkonversinya ke skala 16-bit untuk konsistensi. Misalnya, nilai 2048 (dari ADC 12-bit) akan dipetakan menjadi sekitar 32768 dalam skala 16-bit.

Menghasilkan PWM (Mengontrol Kecerahan LED atau Motor DC):

 

```python

from machine import Pin, PWM

import time


# Inisialisasi PWM pada pin GP15

pwm_led = PWM(Pin(15))


# Set frekuensi PWM (contoh: 1000Hz)

pwm_led.freq(1000)


# Fungsi untuk mengubah kecerahan (duty cycle dari 0 hingga 65535)

def fade_led():

    for duty in range(0, 65535, 1000):

        pwm_led.duty_u16(duty)

        time.sleep(0.05)

    for duty in range(65535, 0, -1000):

        pwm_led.duty_u16(duty)

        time.sleep(0.05)


while True:

    fade_led()

```

 

Mengimplementasikan I2C untuk Berkomunikasi dengan Sensor:

 

```python

from machine import Pin, I2C

import time


# Inisialisasi I2C dengan pin SCL=GP5, SDA=GP4

i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=400000)


# Scan perangkat yang terhubung ke bus I2C

devices = i2c.scan()

print("Alamat I2C yang terdeteksi:", [hex(addr) for addr in devices])


# Asumsikan kita memiliki sensor dengan alamat 0x68

sensor_addr = 0x68

# Register yang akan dibaca (contoh: register WHO_AM_I)

reg_to_read = 0x00


# Kirim alamat register yang ingin dibaca

i2c.writeto(sensor_addr, bytes([reg_to_read]))

# Baca 1 byte dari register tersebut

data = i2c.readfrom(sensor_addr, 1)

print("Data dari register", hex(reg_to_read), ":", data)

```

 

Catatan: Metode pembacaan register bisa berbeda tergantung sensor. Beberapa sensor butuh fungsi writeto_then_readfrom() atau pustaka khusus.

2. `time` – Mengelola Waktu

Library `time` essential untuk menangani delay dan penjadwalan tugas.

Fungsi Utama:

- `sleep(seconds)`: Menjeda eksekusi program.

- `sleep_ms(ms)`: Menjeda dalam milidetik.

- `ticks_ms()`: Mengembalikan waktu dalam milidetik sejak titik acuan. Fungsi ini berguna untuk membuat delay non-blocking, sehingga program lain tetap bisa berjalan.

Cara Menggunakan:

 

```python

import time


# Delay tradisional

print("Mulai")

time.sleep(2)       # Delay 2 detik

print("Selesai setelah 2 detik")


# Non-blocking delay menggunakan ticks

waktu_terakhir = time.ticks_ms()

interval = 1000  # 1000 ms = 1 detik


while True:

    if time.ticks_diff(time.ticks_ms(), waktu_terakhir) >= interval:

        waktu_terakhir = time.ticks_ms()

        print("Pesan ini dicetak setiap 1 detik tanpa blocking loop utama")

    # Kode lain dapat dijalankan di sini

```


3. `utime` – Fungsi Waktu yang Lebih Lengkap

Pada board terbaru, time adalah alias dari utime. Namun, jika Anda menemukan kode lama yang menggunakan utime, fungsinya sama dengan time.

Library Pihak Ketiga yang Populer

Untuk menggunakan library pihak ketiga, Anda perlu menyalin file `.py` ke sistem file Raspberry Pi Pico. Ini dapat dilakukan melalui Thonny (drag and drop) atau tool seperti `rshell` dan `mpremote`.

1. `ssd1306.py` – Driver untuk Layar OLED

Library ini memungkinkan Pico mengontrol layar OLED monokrom 128x64 atau 128x32 yang menggunakan chip SSD1306 via I2C. ssd1306.py harus disalin dulu ke Pico karena tidak termasuk dalam firmware bawaan.

Cara Menggunakan:

 

```python

from machine import Pin, SoftI2C

import ssd1306

import time


# Inisialisasi I2C (SoftI2C bisa digunakan pada pin mana pun)

i2c = SoftI2C(scl=Pin(5), sda=Pin(4))


# Inisialisasi display OLED

oled = ssd1306.SSD1306_I2C(128, 64, i2c)


# Bersihkan display

oled.fill(0)

oled.show()


# Tulis teks pada koordinat (x, y)

oled.text("Hello, Pico!", 0, 0)

oled.text("MicroPython", 0, 16)

oled.text("OLED Test", 0, 32)

oled.show()


# Gambar garis

oled.line(0, 50, 128, 50, 1)

oled.show()

time.sleep(2)


# Animasi sederhana

for i in range(0, 128, 5):

    oled.fill(0)

    oled.rect(i, 20, 10, 10, 1)

    oled.show()

    time.sleep(0.1)

```

 

2. `dht.py` – Driver untuk Sensor Suhu dan Kelembaban DHT11/DHT22

Library ini menyederhanakan pembacaan data dari sensor DHT yang populer.

Cara Menggunakan:

 

```python

import dht

from machine import Pin

import time


# Inisialisasi sensor DHT11 pada pin GP15

sensor = dht.DHT11(Pin(15))

# Untuk DHT22, gunakan: sensor = dht.DHT22(Pin(15))


while True:

    try:

        # Lakukan pembacaan sensor

        sensor.measure()

        # Ambil nilai suhu dan kelembaban

        temp = sensor.temperature()

        hum = sensor.humidity()

        # Cetak hasil

        print(f"Suhu: {temp}°C, Kelembaban: {hum}%")

    except OSError as e:

        print("Gagal membaca sensor:", e)

    time.sleep(2)  # DHT11 membutuhkan waktu sekitar 2 detik antara pembacaan

```

 

3. `neopixel.py` – Mengontrol LED Neopixel/RGB WS2812

Library bawaan `neopixel` memudahkan kontrol atas rangkaian LED addressable yang canggih. Pin GP0 default bukan pilihan ideal karena dekat dengan pin debugging, lebih aman gunakan pin lain (misal GP2).

Cara Menggunakan:

 

```python

from machine import Pin

import neopixel

import time


# Jumlah LED dalam strip

jumlah_led = 8

# Inisialisasi NeoPixel pada pin GP2

np = neopixel.NeoPixel(Pin(2), jumlah_led)


# Fungsi untuk mengisi semua LED dengan warna (R, G, B)

def isi_warna(r, g, b):

    for i in range(jumlah_led):

        np[i] = (r, g, b)

    np.write()  # Kirim data ke LED


# Fungsi untuk efek rainbow

def rainbow_effect(wait):

    for j in range(256): # Siklus warna

        for i in range(jumlah_led):

            # Rumus untuk menghasilkan warna rainbow

            warna = (wheel((i * 256 // jumlah_led + j) & 255))

            np[i] = warna

        np.write()

        time.sleep_ms(wait)


def wheel(pos):

    # Input nilai 0-255 untuk mendapatkan warna rainbow

    if pos < 85:

        return (pos * 3, 255 - pos * 3, 0)

    elif pos < 170:

        pos -= 85

        return (255 - pos * 3, 0, pos * 3)

    else:

        pos -= 170

        return (0, pos * 3, 255 - pos * 3)


# Main loop

while True:

    isi_warna(255, 0, 0)   # Merah

    time.sleep(1)

    isi_warna(0, 255, 0)   # Hijau

    time.sleep(1)

    isi_warna(0, 0, 255)   # Biru

    time.sleep(1)

    rainbow_effect(20)      # Jalankan efek rainbow

```

 

Tips dan Praktik Terbaik dalam Menggunakan Library

1.  Periksa Dokumentasi Resmi: Selalu merujuk pada dokumentasi resmi Raspberry Pi Pico dan MicroPython untuk mengetahui detail fungsi dan pinout yang benar.

2.  Manajemen Memori: MicroPython berjalan pada lingkungan dengan memori terbatas. Hindari impor library yang tidak perlu di dalam loop dan hapus variabel atau objek yang sudah tidak digunakan dengan `del`.

3.  Error Handling: Selalu gunakan `try-except` blok ketika berkomunikasi dengan periferal eksternal (seperti sensor I2C) untuk mencegah program berhenti karena kesalahan.

4.  Optimisasi Kode: Untuk aplikasi yang membutuhkan respons cepat, pertimbangkan untuk menggunakan interrupt dari library `machine` daripada mengecek status pin secara terus-menerus (`polling`).

5. Gunakan Versi Firmware Terbaru: Pastikan Anda selalu menggunakan firmware MicroPython terbaru agar kompatibilitas library tetap terjamin dan bug diperbaiki.

 

Dengan memanfaatkan kekuatan library di MicroPython, dari yang bawaan seperti `machine` hingga pihak ketiga seperti `ssd1306`, para pengembang dapat dengan cepat membangun prototipe dan proyek yang kompleks dengan Raspberry Pi Pico. Pemahaman tentang fungsi dan cara penggunaan setiap library adalah kunci untuk membuka seluruh potensi dari microcontroller yang luar biasa ini.




0 on: "Library di MicroPython untuk Raspberry Pi Pico: Fungsi dan Cara Menggunakannya"