MicroPython Nedir? Temel Komutlar, REPL ve İlk Programlar
MicroPython nedir, Python'dan farkı ne? REPL, machine.Pin, PWM, ADC, I2C, ticks_ms, main.py, Thonny ve mpremote, mip ile kütüphane, Pico ve ESP32 kurulumu.
MicroPython, Python 3 dilinin mikrodenetleyiciler için yeniden yazılmış, küçük ve hızlı bir sürümüdür. Raspberry Pi Pico ya da ESP32 gibi bir karta MicroPython yüklediğinde kart, Python kodunu doğrudan kendi içinde çalıştırır: derleme beklemeden bir komut yazar, LED'in anında yandığını görürsün. Python'u okulda ya da bilgisayarda öğrendiysen aynı sözdizimiyle pin okuyabilir, motor sürebilir, sensörlerden veri alabilir ve Wi-Fi'ye bağlanabilirsin.
Bu rehberde MicroPython'un normal Python'dan farklarını, kartla anında konuşmanı sağlayan REPL'i ve en çok kullanacağın modülleri, yani machine.Pin, PWM, ADC ve I2C'yi örnek kodlarla öğreneceksin. Ardından time.sleep ile ticks_ms arasındaki farkı, açılışta çalışan main.py ve boot.py dosyalarını, Thonny ve mpremote ile dosya yüklemeyi, mip ile kütüphane eklemeyi ve Pico ile ESP32'ye firmware yüklemeyi göreceksin. Son bölümde MicroPython'u Arduino C++ ile yan yana karşılaştırıyoruz.

MicroPython nedir, Python'dan farkı ne?
MicroPython, 2013'te Damien George tarafından küçük bir kart için başlatılan açık kaynaklı bir projedir ve bugün onlarca mikrodenetleyiciyi destekler. Karta yüklediğin firmware, Python yorumlayıcısını, temel modülleri ve küçük bir dosya sistemini içerir. Yazdığın kod kart üzerinde önce bytecode'a çevrilir, sonra yorumlayıcı bu bytecode'u satır satır çalıştırır. Bilgisayarındaki Python'un tamamını birkaç yüz KB'lık RAM'e sığdırmak mümkün olmadığı için dil aynı kalır, ama kütüphanelerin büyük kısmı ya küçültülmüştür ya da hiç yoktur. Buna karşılık bilgisayardaki Python'da bulunmayan bir şey eklenmiştir: donanıma doğrudan erişen machine modülü.
| Konu | Python (bilgisayar) | MicroPython (kart) |
|---|---|---|
| Çalıştığı yer | Bilgisayar, GB'larca RAM | Mikrodenetleyici, yüzlerce KB RAM |
| Standart kütüphane | Çok geniş: datetime, threading, urllib... | Küçük alt küme: time, os, json, re, struct, random, math... |
| Paketler | pip ile numpy, pandas ve binlercesi | numpy ve pandas yok; mip ile micropython-lib paketleri |
| Donanım erişimi | Yok, ek kütüphane gerekir | machine modülü: Pin, PWM, ADC, I2C, SPI, UART, Timer |
| Ondalıklı sayılar | 64 bit (yaklaşık 15 basamak) | Pico ve ESP32'de 32 bit (yaklaşık 7 basamak) |
| Zaman | time.time(), datetime | time.sleep_ms(), time.ticks_ms(), machine.RTC |
| Programın başlaması | Komut satırından çalıştırırsın | Açılışta boot.py ve main.py kendiliğinden çalışır |
MicroPython çalışan kartlar
| Kart | Firmware dosyası | Toplam RAM | Not |
|---|---|---|---|
| Raspberry Pi Pico (RP2040) | RPI_PICO (.uf2) | 264 KB | Başlangıç için en kolay kart |
| Raspberry Pi Pico W | RPI_PICO_W (.uf2) | 264 KB | Wi-Fi için network modülü; Pico firmware'i burada Wi-Fi'yi açmaz |
| Raspberry Pi Pico 2 (RP2350) | RPI_PICO2 (.uf2) | 520 KB | Daha hızlı, daha çok bellek |
| ESP32 (WROOM) | ESP32_GENERIC (.bin) | 520 KB (bir kısmını Wi-Fi kullanır) | Wi-Fi ve Bluetooth; PSRAM'li modellerde çok daha fazla bellek |
| ESP8266 (NodeMCU, Wemos D1 Mini) | ESP8266_GENERIC (.bin) | Yaklaşık 80 KB | Çalışır ama bellek dar; yeni projede ESP32 seç |
| Arduino Uno (ATmega328P) | Yok | 2 KB | MicroPython çalıştıramaz; C++ ile programlanır |
Pico ve ESP32'ye MicroPython firmware'i yüklemek
- Pico: Kartın üzerindeki BOOTSEL düğmesini basılı tutarak USB kablosunu tak, sonra düğmeyi bırak. Bilgisayarda RPI-RP2 adlı bir sürücü belirir (Pico 2'de RP2350).
- MicroPython'un resmi indirme sayfasından kartına uygun .uf2 dosyasını indir (Pico için RPI_PICO, Pico W için RPI_PICO_W) ve bu sürücünün içine sürükle.
- Kopyalama bitince kart kendiliğinden yeniden başlar ve sürücü kaybolur; MicroPython kurulmuştur. Thonny'de Araçlar > Seçenekler > Yorumlayıcı bölümünden MicroPython (Raspberry Pi Pico) seç.
- ESP32: Bilgisayarına Python kuruluysa komut satırında pip install esptool yaz. Kartı bağla ve portunu öğren (Windows'ta COM3, Linux'ta /dev/ttyUSB0 gibi).
- Önce flaşı sil: esptool.py --chip esp32 --port COM3 erase_flash. Kart bağlanamazsa komut çalışırken BOOT düğmesini basılı tut.
- Firmware'i yaz: esptool.py --chip esp32 --port COM3 --baud 460800 write_flash -z 0x1000 ESP32_GENERIC-....bin. ESP32-S3 ve ESP32-C3'te adres 0x0'dır. Thonny'deki Install or update MicroPython (esptool) seçeneği aynı işi pencereden yapar.
REPL: kartla anında konuşmak
REPL (Read-Eval-Print Loop), kartın seri port üzerinden sana açtığı komut satırıdır. Thonny'nin alt kısmındaki Shell penceresinde gördüğün >>> işareti REPL'in seni beklediğini gösterir. Buraya 1 + 1 yazarsan kart hesaplayıp 2 döndürür; from machine import Pin ve ardından Pin("LED", Pin.OUT).value(1) yazarsan Pico'nun LED'i o anda yanar. Derleme ve yükleme beklemeden bir sensörün değerini okumak, bir pinin doğru bağlanıp bağlanmadığını denemek ya da bir kütüphanenin nasıl çalıştığını keşfetmek için REPL'den daha hızlı bir yol yoktur.
| Kısayol ya da komut | Ne yapar? |
|---|---|
| Ctrl+C | Çalışan programı durdurur (KeyboardInterrupt) ve REPL'e döner |
| Ctrl+D | Yazılımsal yeniden başlatma (soft reset); boot.py ve main.py yeniden çalışır |
| Ctrl+E | Yapıştırma modu: uzun kodu girintileri bozulmadan yapıştırırsın, Ctrl+D ile çalışır |
| Tab | Otomatik tamamlama; machine. yazıp Tab'a basınca modüldeki her şey listelenir |
| help("modules") | Firmware'deki bütün modülleri listeler |
| import gc; gc.mem_free() | Programın kullanabileceği boş RAM'i bayt olarak gösterir |
| import os; os.listdir() | Karttaki dosyaları listeler |
İlk program ve Arduino C++ karşılığı
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}İki program aynı işi yapar ama yapıları farklıdır. MicroPython'da setup() ve loop() yoktur: dosya yukarıdan aşağı bir kez çalışır, sonsuz döngüyü sen while True: ile kurarsın. Süslü parantez ve noktalı virgül yerine girinti kullanılır; döngünün içindeki satırların hepsi aynı miktarda (genellikle 4 boşluk) içeride olmalıdır. Bekleme süresi de farklı birimdedir: time.sleep(0.5) saniye, Arduino'daki delay(500) milisaniye alır. MicroPython'da milisaniye için time.sleep_ms(), mikrosaniye için time.sleep_us() kullanılır. Arduino tarafının temelleri Arduino programlama temelleri yazısında.
machine.Pin: dijital giriş ve çıkış
| MicroPython | Arduino C++ karşılığı | Açıklama |
|---|---|---|
| led = Pin(15, Pin.OUT) | pinMode(15, OUTPUT) | Pini çıkış yapar |
| led.value(1) ya da led.on() | digitalWrite(15, HIGH) | Pini HIGH yapar; value(0) ya da off() LOW yapar |
| buton = Pin(14, Pin.IN, Pin.PULL_UP) | pinMode(14, INPUT_PULLUP) | Dahili pull-up dirençli giriş |
| buton.value() | digitalRead(14) | 0 ya da 1 döndürür |
| led.toggle() | digitalWrite(15, !digitalRead(15)) | Durumu tersine çevirir; Pico'da var, ESP32'de yerine value(not led.value()) |
| buton.irq(trigger=Pin.IRQ_FALLING, handler=f) | attachInterrupt(..., f, FALLING) | Pin değişince f fonksiyonunu çağırır |
time.sleep ve ticks_ms: beklemeden zaman ölçmek
time.sleep() kartı tamamen bekletir; o sırada buton okunmaz, sensöre bakılmaz. Birden çok işi aynı anda yürütmek için Arduino'daki millis() mantığının MicroPython karşılığını kullanırsın: time.ticks_ms() açılıştan beri geçen milisaniyeyi verir, time.ticks_diff(yeni, eski) de iki an arasındaki farkı hesaplar. Farkı çıkarma işlemiyle değil ticks_diff ile almak önemlidir; sayaç belli bir değere ulaşınca başa döner ve düz çıkarma o anda yanlış sonuç verir. Aşağıdaki kod LED'i beklemeden yakıp söndürürken butonu bir kesme (IRQ) ile dinler; butona her basışta yanıp sönme hızı değişir.
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: parlaklık, servo ve ses
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)PWM nesnesi bir pini çok hızlı açıp kapatarak ortalama bir güç ayarlar. freq() saniyedeki tekrar sayısını, duty_u16() da pinin ne kadar süre açık kalacağını 0 ile 65535 arasında bir sayıyla belirler; 32768 yaklaşık yüzde 50 demektir. Bu ölçek Arduino'daki analogWrite'ın 0–255 aralığından çok daha ince adımlar verir. Servolar 50 Hz'lik bir sinyal ve 0,5–2,5 ms arasında bir darbe genişliği bekler; duty_ns() darbe süresini doğrudan nanosaniye olarak verdiği için servo kodunu çok sadeleştirir. Pasif bir buzzer'a farklı freq() değerleri vererek nota da çalabilirsin. Duty cycle ve frekans kavramlarının ayrıntısı PWM nedir yazısında.
ADC: analog okuma
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() her kartta 0–65535 arasında bir değer döndürür; böylece aynı kod Pico'da da ESP32'de de çalışır. Pico'nun ADC'si gerçekte 12 bitliktir ve okuma 16 bite ölçeklenir. Pico'da kullanıcıya açık üç analog pin vardır: GP26 (ADC0), GP27 (ADC1) ve GP28 (ADC2); dördüncü kanal yonganın içindeki sıcaklık sensörüdür ve ortam sıcaklığını değil yonganın sıcaklığını ölçer. ESP32'de tam 0–3,3 V aralığını okumak için adc.atten(ADC.ATTN_11DB) ayarı gerekir ve Wi-Fi açıkken ADC2 pinleri kullanılamaz; bu yüzden GPIO 32–39 arasındaki ADC1 pinlerini seç. Koddaki 16 ölçümlük ortalama, ADC gürültüsünü belirgin şekilde azaltır. Çözünürlük ve referans gerilimi gibi kavramlar ADC nedir yazısında.
I2C: sensör ve ekran bağlamak
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=...) donanım I2C birimini seçtiğin pinlerle başlatır, scan() da hatta cevap veren bütün cihazların adreslerini liste olarak döndürür. Bir sensör çalışmıyorsa ilk iş bu taramayı yapmaktır: liste boşsa sorun kablolamadadır, adres beklediğinden farklıysa koddaki adresi düzeltirsin. Pico'da her I2C biriminin kullanabildiği pinler sabittir; örneğin I2C0 için GP0-GP1, GP4-GP5 ya da GP8-GP9 çiftleri çalışır, yanlış bir çift seçersen ValueError alırsın. ESP32'de ise hemen her pine I2C atanabilir. Ekranın ayrıntıları OLED ekran, protokolün kendisi I2C nedir yazısında.
main.py ve boot.py: açılışta çalışan kod
Thonny'de Çalıştır düğmesine bastığında kod karta kaydedilmeden yalnızca o an çalışır; USB'yi çıkarınca kaybolur. Kodun kart her açıldığında kendiliğinden çalışması için dosyayı kartın içine main.py adıyla kaydetmelisin. Açılışta önce boot.py, ardından main.py çalışır. boot.py, Wi-Fi bağlantısı ya da saat ayarı gibi bir kez yapılacak hazırlıklar için kullanılır; ESP32 firmware'i bu dosyayı kendisi oluşturur, Pico'da ise genellikle yoktur. Asıl programın her zaman main.py'de durur. Başka dosyalara yazdığın fonksiyonları import ile main.py'ye çağırabilir, ölçümleri karttaki dosya sistemine open() ile kaydedebilirsin.
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")Dosya yükleme: Thonny ve mpremote
Yeni başlıyorsan Thonny en kolay yoldur: kodunu yaz, Dosya > Farklı kaydet de, açılan pencerede Raspberry Pi Pico ya da MicroPython device seçeneğini seçip dosya adını main.py yap. Görünüm > Dosyalar menüsünü açarsan bilgisayarındaki ve karttaki dosyaları yan yana görür, sağ tıkla birinden diğerine kopyalarsın. Komut satırını sevenler ve VS Code gibi bir editör kullananlar için resmi araç mpremote'tur; pip install mpremote ile kurulur ve ilk bulduğu MicroPython kartına kendiliğinden bağlanır.
| mpremote komutu | Ne yapar? |
|---|---|
| mpremote | Bulduğu ilk karta bağlanır ve REPL'i açar (çıkış: Ctrl+X) |
| mpremote ls | Karttaki dosyaları listeler |
| mpremote cp main.py :main.py | Bilgisayardaki dosyayı karta kopyalar; iki nokta (:) kartı gösterir |
| mpremote run test.py | Dosyayı karta kaydetmeden çalıştırır ve çıktısını gösterir |
| mpremote mip install ssd1306 | Kütüphaneyi bilgisayarın internetiyle indirip kartın /lib klasörüne kurar |
| mpremote reset | Kartı yeniden başlatır |
| mpremote connect COM3 ls | Belirli bir porttaki karta bağlanır (macOS ve Linux'ta /dev/ttyACM0 gibi) |
Kütüphane eklemek: mip
MicroPython'da pip yoktur; onun yerine küçük paket yöneticisi mip kullanılır. Pico W ya da ESP32 gibi internete bağlanabilen bir kartta önce Wi-Fi'ye bağlanır, sonra REPL'de import mip ve mip.install("ssd1306") yazarsın; paket resmi micropython-lib deposundan indirilip kartın /lib klasörüne yerleşir. GitHub'daki bir sürücüyü mip.install("github:kullanici/depo") biçiminde de kurabilirsin. Wi-Fi'si olmayan Pico için aynı işi bilgisayardan mpremote mip install komutuyla ya da Thonny'nin Araçlar > Paketleri yönet menüsüyle yaparsın. Tek dosyalık bir sürücüyü (ör. bir sensör için yazılmış .py dosyası) karta kopyalamak da yeterlidir; dosya kökte ya da /lib içinde durduğu sürece import ile çağrılır. Wi-Fi bağlantısının adımları Pico W Wi-Fi yazısında.
MicroPython mu, Arduino C++ mı?
| Özellik | MicroPython | Arduino C++ |
|---|---|---|
| Dil | Python 3 sözdizimi | C++ ve Arduino çekirdeği |
| Çalışma şekli | Kart üzerindeki yorumlayıcı bytecode çalıştırır | Bilgisayarda makine koduna derlenir |
| Deneme süresi | REPL'de anında; kaydetmek 1–2 saniye | Her değişiklikte derleme ve yükleme, 10–60 saniye |
| Hız | Saf Python döngüleri yaklaşık 10–100 kat yavaş | Yerel hız |
| Zamanlama | Çöp toplayıcı ara sıra kısa duraklamalar yapar | Mikrosaniye düzeyinde öngörülebilir |
| Dosya sistemi | Var: main.py, veri ve ayar dosyaları | Yok; EEPROM ya da ek kütüphane gerekir |
| Kütüphaneler | micropython-lib ve topluluk sürücüleri | Çok geniş Arduino kütüphane dünyası |
| Kartlar | Pico, ESP32, ESP8266 | Uno, Nano, Mega dahil hemen hepsi |
| Hata mesajı | Çalışırken satır numaralı açık mesaj | Derleme hatası; çalışırken Serial.print ile takip |
| En iyi olduğu iş | Öğrenme, hızlı deneme, Wi-Fi ve veri işleme | Hassas zamanlama, az bellekli kartlar, hazır kütüphane bolluğu |
Pratikte seçimi projen belirler. Bir sensörü okuyup Wi-Fi ile göndermek, bir web sayfası sunmak ya da bir ekran sürmek MicroPython'da daha az satırla ve daha hızlı biter. Mikrosaniye hassasiyetinde sinyal üretmek, yüzlerce LED'i çok hızlı güncellemek ya da yalnızca Uno gibi küçük bir kartın olması ise C++'ı öne çıkarır. Yavaş kalan bir fonksiyonu @micropython.native dekoratörüyle hızlandırabilir, döngü içinde yeni liste ve metin oluşturmaktan kaçınarak çöp toplayıcının duraklamalarını azaltabilirsin. Kart seçimi için Arduino mu ESP32 mi yazısına da bakabilirsin.
Sık hatalar ve çözümleri
| Hata ya da belirti | Sebep | Çözüm |
|---|---|---|
| ImportError: no module named 'ssd1306' | Kütüphane kartta değil | mip ya da mpremote mip ile kur veya .py dosyasını karta kopyala |
| IndentationError | Girintiler tutarsız, boşluk ve sekme karışmış | Bütün dosyada 4 boşluk kullan; Thonny bunu kendiliğinden yapar |
| OSError: [Errno 5] EIO (I2C) | Cihaz cevap vermiyor: kablo, adres ya da besleme | scan() ile adresi kontrol et, SDA ve SCL'yi doğrula |
| ValueError: bad SCL pin | Seçilen pinler o I2C birimine ait değil | Pico'nun pin şemasından doğru I2C0 ya da I2C1 çiftini seç |
| Kod Thonny'de çalışıyor, USB'den çıkarınca çalışmıyor | Dosya karta main.py olarak kaydedilmemiş | Farklı kaydet ile karta main.py adıyla kaydet |
| MemoryError: memory allocation failed | RAM doldu: büyük liste, uzun metin ya da büyük tampon | Verileri parça parça işle, gc.collect() çağır, bytearray kullan |
| Thonny: Device is busy or does not respond | main.py beklemesiz bir döngüde, portu başka program kullanıyor | Stop ya da Ctrl+C, öteki programı kapat, gerekirse flaşı temizle |
MicroPython, mikrodenetleyici dünyasına Python bilerek girmenin en kısa yoludur: REPL'de bir pini denediğin anda sonucu görür, birkaç satırla sensör okuyup Wi-Fi'ye bağlanırsın. Temel modülleri, main.py mantığını ve ticks_ms ile beklemeden zaman ölçmeyi öğrendiğinde projelerin hızla büyür. BlueGrays uygulamasında Raspberry Pi Pico ile LED, trafik lambası, buton ve PWM projelerini devre şemaları ve MicroPython kodlarıyla adım adım bulabilirsin.
Sıkça sorulan sorular
MicroPython nedir?
MicroPython, Python 3 dilinin mikrodenetleyiciler için hazırlanmış küçük bir sürümüdür. Karta yüklenen firmware sayesinde Raspberry Pi Pico ve ESP32 gibi kartlar Python kodunu doğrudan çalıştırır; machine modülüyle pinlere, PWM'e, ADC'ye ve I2C'ye erişirsin.
MicroPython ile Python aynı şey mi?
Sözdizimi aynıdır ama MicroPython, bilgisayardaki Python'un küçültülmüş bir alt kümesidir. numpy ve pandas gibi büyük kütüphaneler yoktur, standart kütüphane daraltılmıştır ve ondalıklı sayılar Pico ile ESP32'de 32 bitliktir. Buna karşılık donanıma doğrudan erişen machine modülü eklenmiştir.
MicroPython mu Arduino mu daha iyi?
Amacına bağlıdır. MicroPython öğrenmek, hızlı deneme yapmak ve Wi-Fi ile veri gönderen projeler için daha rahattır; Arduino C++ ise daha hızlı çalışır, zamanlaması daha hassastır ve çok daha fazla hazır kütüphane sunar. Pico ve ESP32 iki yöntemle de programlanabilir.
Arduino Uno'da MicroPython çalışır mı?
Hayır. Arduino Uno'daki ATmega328P yongasında yalnızca 2 KB RAM ve 32 KB flaş bellek vardır; MicroPython yorumlayıcısı buna sığmaz. MicroPython kullanmak istiyorsan Raspberry Pi Pico ya da ESP32 gibi daha güçlü bir kart seçmelisin.
MicroPython'a kütüphane nasıl yüklenir?
İnternete bağlı bir kartta REPL'de import mip ve mip.install("paket_adi") yazarsın. Wi-Fi'si olmayan kartlarda aynı işi bilgisayardan mpremote mip install paket_adi komutuyla ya da Thonny'nin paket yöneticisiyle yaparsın. Tek dosyalık sürücüleri karta kopyalamak da yeterlidir.
Pico'ya kod kalıcı olarak nasıl kaydedilir?
Thonny'de Dosya > Farklı kaydet menüsünden Raspberry Pi Pico'yu seç ve dosyanın adını main.py yap. Kart her açıldığında önce boot.py, ardından main.py kendiliğinden çalışır; USB'yi bilgisayardan çıkarıp başka bir 5 V kaynağa taksan da program çalışmaya devam eder.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
Raspberry Pi Pico Dahili LED Yakma (Pico ve Pico W)
Raspberry Pi Pico serisinin açılış projesi! Pico'nun üzerindeki yeşil dahili LED'i yakıp söndürerek kartın çalıştığını doğruluyoruz — klasik "Hello World" tarzı ilk deney. Harici bileşene ihtiyaç YOK, sadece Pico ve USB kablosu yeterli. Kod MicroPython ile yazıldı (Raspberry Pi Vakfı'nın resmi olarak desteklediği dil). Thonny IDE ile Pico'yu programlarken machine.Pin sınıfı, Pin.OUT mode, led.on()/off() metodları ve time.sleep() fonksiyonlarını kavrarsın. Seri

Raspberry Pi Pico Harici LED Yakma (Breadboard)
Pico'nun dahili LED'inden sonraki adım: breadboard'a harici LED bağlayıp GP14 pini üzerinden kontrol etmek. Bu proje ile Pico'nun herhangi bir genel amaçlı GPIO pinini output olarak nasıl kullanacağını, LED'in polaritesini (uzun bacak = anot/+, kısa bacak = katot/–) ve neden akım sınırlama direnci (220Ω) şart olduğunu öğreniyorsun. Direnci koymazsan LED'e aşırı akım gider ve yanabilir. Devre çok basit: Pico GP14 → 220Ω direnç → LED (+) → LED (–) → Pico GND. Wokwi'de simüle edebilir, gerçek bread

Raspberry Pi Pico 2 LED Alternatif Yakma (Blink-Flip Pattern)
Pico'nun tek LED'inden sonraki adım: iki LED'i alternatif yakıp söndürerek klasik flip-flop animasyonu. Bir LED sönerken diğeri yanıyor — çoklu GPIO yönetiminin en temel örneği. Bu projede iki farklı renk LED (kırmızı GP14, yeşil GP13) her 500 ms'de yer değiştiriyor. MicroPython'un Pin.toggle() metoduyla kod çok kısa ve okunaklı. Aynı temel mantık trafik lambası, polis çakar efekti, yürüyen LED (Karaşimşek) gibi tüm çok-LED animasyonlarının temeli. Devre çok basit: her LED için 220Ω direnç + P

Raspberry Pi Pico Trafik Lambası (3 LED Sıralı)
Kırmızı, sarı ve yeşil LED'lerle gerçek trafik ışığı mantığını simüle ediyoruz — Pico serisinin 3 LED'e geçen ilk projesi! Yeşil 4 saniye "geç", sarı 1.5 saniye "hazırlan", kırmızı 3 saniye "dur" ve kırmızı+sarı 1 saniye "kalkış" (Avrupa trafik lambası pattern'i). Bu proje ile fonksiyon tanımlama (def all_off()), durum makinesi mantığı (sequence) ve coklu GPIO senkronizasyonu kavramlarını öğreneceksin. Devre çok basit: GP11 (Yeşil), GP12 (Sarı), GP13 (Kırmızı) pinlerine 3 LE

Raspberry Pi Pico Buton ile LED Yakma (Push)
Pico ile ilk input projesi — buton okuma! Butona basıldıkça LED yanar, bırakıldıkça söner. Bu proje LED animasyonlarından sonraki büyük adım: Pico'ya dünyadan sinyal girişi. Yeni öğrenme: Pin.IN (input mode), Pin.PULL_UP (dahili pull-up direnci — buton için standart), button.value() okuma. GP14 LED, GP2 buton (dahili PULL_UP). Buton basılınca sinyal LOW (0), bırakılınca HIGH (1) — bu ters mantık ilk başta kafa karıştırıcı ama endüstri standardı.

Raspberry Pi Pico Buton Debounce Karşılaştırma: IRQ vs Software Polling
Butona bir kere bastığında kod 3-4 kere saydırdıysa nedeni contact bounce — buton metal kontakları temas anında mikrosaniyelerde defalarca aç-kapa yapar! Bu projede aynı butonu 2 farklı yöntemle sayıp Serial'da yan yana karşılaştırıyoruz: RAW polling (bounce'u yakalar, hatalı sayar) vs IRQ + software debounce (doğru sayar). Öğrenme: contact bounce fiziği (metal titreşim), software debounce (ticks_diff() > 50ms), Pin.irq() interrupt kaydı, IRQ_FALLING trigger tipi,

Raspberry Pi Pico PWM ile LED Fade (Nefes Efekti)
LED artık sadece yanıp sönmüyor — nefes alıyor! Raspberry Pi Pico'nun PWM (Pulse Width Modulation — darbe genişlik modülasyonu) özelliğiyle LED'in parlaklığı yavaş yavaş artar, sonra yavaş yavaş azalır. Uyku modundaki MacBook ışığı gibi sakin bir "nefes" efekti. Öğrenme: machine.PWM sınıfı (pini PWM çıkışına çevirme), duty_u16() (0–65535 arası 16-bit parlaklık değeri), PWM frekansı (freq(1000) — saniyede 1000 kez aç-kapa, göz titremeyi görmez), range() ile adım adım döngü

Raspberry Pi Pico RGB LED Renk Çevrimi (3 Kanal PWM)
Tek LED, milyonlarca renk! RGB LED'in içinde aslında 3 ayrı LED var: kırmızı, yeşil ve mavi. Pico'nun 3 ayrı PWM kanalıyla her birinin parlaklığını ayrı ayrı ayarlayınca renkler karışır: kırmızı + yeşil = sarı, yeşil + mavi = camgöbeği, üçü birden = beyaz. Bu projede LED 8 renk arasında sırayla dönüyor. Öğrenme: çoklu PWM kanalı (aynı anda 3 pin), fonksiyon tanımlama (def set_color(...) ile tekrar eden kodu tek yerde toplama), RGB renk karışımı
Diğer yazılar
BlueGrays uygulaması
Bu devreyi telefonunda adım adım kur
Devre şeması, kod ve parça listesi tek ekranda. 200'den fazla Arduino, ESP32 ve Pico projesi seni bekliyor.
Telefonunla tara
Kamerayı koda tut; telefonunun uygulama mağazası açılır.
ya da mağazada aç

