# Başlangıç

Kartı bir kez hazırlarsın: imajı yazar, çekirdeği yüklersin. Sonrası tarayıcıda. Bu sayfa üç kart için de PC tarafındaki adımları anlatır.

## Gerekenler

- Python 3.12 ve araçlar: `pip install mpremote esptool mpy-cross pyserial`
- Depo: `git clone https://github.com/tarikgkhsn/CYD-Studio`
- Seri port: Windows'ta `COM3` gibi, Linux'ta `/dev/ttyUSB0` gibi. Listelemek için: `python -c "import serial.tools.list_ports as l; [print(p.device) for p in l.comports()]"`

## 1. WiFi ayarı

`boards/*/config.json` şifre içerdiği için depoda yoktur. Örneği kopyala ve doldur:

```sh
cp boards/cyd/config.example.json boards/cyd/config.json
```

Alanlar: `ssid`, `password`, statik IP (`ip`, `netmask`, `gateway`, `dns`), yedek erişim noktası (`ap_ssid`, `ap_password`), `hostname`, `rotation`, `cpu_freq`. Kart ağa bağlanamazsa `ap_ssid` adıyla kendi ağını açar ve `192.168.4.1` adresinden ulaşılır.

## 2. Flash

Hazır imajlar `firmware/` altında:

| Dosya | Kart |
|---|---|
| `micropython-esp32-cydstudio.bin` | CYD, özel imaj (dondurulmuş çekirdek, sabit heap) |
| `micropython-esp8266-frozen.bin` | NodeMCU, özel imaj |
| `micropython-esp32.bin` · `micropython-esp8266.bin` | Stok yedekler |

**CYD:** kartın otomatik reset devresi IO0'ı süremez. **BOOT'u basılı tut, RESET'e bas-bırak, BOOT'u yazma bitene kadar bırakma.** `flash.py` esptool'u `--before no-reset --after no-reset --baud 115200` ile çalıştırır; `--koru` dosya sistemini (projeler, config, log) silmez.

```sh
python tools/flash.py COM3 firmware/micropython-esp32-cydstudio.bin --koru
```

> **Dikkat:** `--baud 460800` verirsen esptool stub'ı o hızda bırakır ve sonraki komut 115200'den bağlanamaz. Yazma ortasında port düşerse kart download modunda kalır; tuşa tekrar gerek yok, komutu hemen yeniden çalıştır.

**NodeMCU:** otomatik reset var, tuş yok. Flash'tan sonra ~10 saniye dokunma; LittleFS ilk formatını yapıyor.

```sh
python tools/flash_esp8266.py COM3 --koru
```

**ESP32 OLED:** stok imaj (`micropython-esp32.bin`) ve aynı BOOT yordamı.

## 3. Deploy

Çekirdeği dondurulmuş kartlarda yalnız dosya sistemi dosyaları gider (`main.py`, `boot.py`, `index.html`, belgeler, örnekler). `--frozen` dondurulmuş modüllerin dosya sistemindeki kopyalarını siler; bu şarttır, çünkü dosya sistemindeki aynı adlı `.py` firmware'dekini **gölgeler** ve RAM yer.

```sh
# CYD
python tools/deploy.py --board cyd --port COM3 --frozen --samples --reset
# NodeMCU
python tools/deploy_mpy.py --board nodemcu --port COM4 --frozen --samples --reset
# ESP32 OLED (stok firmware; çekirdek dosya sistemine yazılır)
python tools/deploy.py --board oled --port COM6 --samples
```

- `--samples` örnek projeleri de yükler.
- `--config` kartın `config.json`'unu **ezer**; ilk kurulumda ver, sonra verme.
- `--reset` sonunda kartı yeniden başlatır. `mpremote` kartı REPL'de bırakır; bunu vermezsen panel açılmaz.
- `deploy.py` karttaki dosyanın özetini okuyup karşılaştırır, değişmeyeni atlar.

## 4. Açılışı izle

```sh
python tools/bootlog.py COM3 25
curl http://192.168.0.217/api/status
```

Panel cevap vermiyorsa kart ya kapalı, ya solo modda, ya açılışta patlamış, ya da REPL'de kalmış. `bootlog.py` her zaman gerçeği söyler.

## 5. İlk proje

Paneli aç (`http://<kart-ip>/`), **+ yeni** ile `merhaba.py` oluştur, yaz, **▶**'a bas:

```python
import cyd

sayac = 0
while not cyd.should_stop():
    sayac += 1
    print('merhaba', sayac)
    if not cyd.sleep(1): break
```

`print()` çıktısı alttaki konsola akar, **■** durdurur. Kurallar ve `cyd` modülünün tamamı: [Proje yazma](/docs/proje-yazma/).

## USB köprüsü: WiFi olmadan panel

`tools/usb_panel.py COM4 --board nodemcu` paneli seri kablo üzerinden `http://127.0.0.1:8080/` adresinde açar (`localhost` değil: Windows önce IPv6 dener, her istek 2 saniye gecikir). Panel HTML'i PC'den yüklenir, yalnız `/api/...` istekleri seri porttan gider; kartın konsol çıktısı aynı pencerede `[kart]` olarak akar. Köprü açıkken port meşguldür; deploy'dan önce kapat.

## Dosya yazarken

PowerShell'in `Set-Content -Encoding utf8` komutu dosya başına BOM ekler ve MicroPython bunu değişken sanıp `NameError` verir. Python dosyalarını editörle ya da Python'la yaz: `open(p, 'w', encoding='utf-8', newline='\n')`.
