ESP8266 (NodeMCU) Nedir?
ESP8266, Espressif firmasının ürettiği, dahili Wi-Fi içeren bir mikrodenetleyici çipidir. Ucuz olması ve Arduino IDE ile programlanabilmesi sayesinde IoT projelerinin en yaygın kartlarından biri haline gelmiştir.
Çıplak ESP8266 çipi doğrudan kullanılmaz; genellikle bir geliştirme kartı üzerinde satılır.
Kart Çeşitleri
| Kart | Özellik |
|---|---|
| NodeMCU (ESP-12E) | USB soketli, breadboard uyumlu, en yaygın |
| Wemos D1 Mini | Daha küçük, USB-C/Micro-USB, shield desteği |
| ESP-01 | Çok küçük, 8 pinli, USB yok — harici programlayıcı gerekir |
| ESP-12F modülü | Çıplak modül, kendi kartınıza lehimlemek için |
Başlangıç için NodeMCU veya Wemos D1 Mini tercih edin; ikisi de USB üzerinden doğrudan programlanır.
Teknik Özellikler
| Özellik | Değer |
|---|---|
| İşlemci | Tensilica L106, 80 MHz (160 MHz’e çıkarılabilir) |
| Flash bellek | 4 MB (tipik) |
| RAM | ~80 KB kullanılabilir |
| Wi-Fi | 802.11 b/g/n, 2,4 GHz |
| Lojik seviye | 3,3 V |
| Dijital pin | ~11 kullanılabilir |
| Analog giriş | 1 adet (A0) |
| PWM | Tüm GPIO’lar (yazılımsal) |
| Bluetooth | Yok |
Arduino Uno ile Karşılaştırma
| Arduino Uno | ESP8266 | |
|---|---|---|
| Hız | 16 MHz | 80–160 MHz |
| Flash | 32 KB | 4 MB |
| RAM | 2 KB | ~80 KB |
| Wi-Fi | Yok | Var |
| Lojik | 5 V | 3,3 V |
| Analog giriş | 6 | 1 |
| Fiyat | Benzer | Benzer |
Wi-Fi dışında bile ESP8266 her açıdan çok daha güçlüdür. Ancak iki önemli kısıtı vardır: tek analog giriş ve 3,3 V lojik.
NodeMCU Pin İsimlendirmesi — Kritik Tuzak
NodeMCU kartının üzerinde pinler D0, D1, D2… olarak yazılıdır. Ancak bu numaralar GPIO numaralarıyla eşleşmez.
Kodda D1 yazarsanız Arduino çekirdeği bunu doğru GPIO’ya çevirir. Ancak 1 yazarsanız GPIO1’i (TX pini) kastetmiş olursunuz.
| Kart etiketi | GPIO | Notlar |
|---|---|---|
| D0 | GPIO16 | Kesme yok, PWM yok; deep sleep uyandırma pini |
| D1 | GPIO5 | I2C SCL (varsayılan) — güvenli |
| D2 | GPIO4 | I2C SDA (varsayılan) — güvenli |
| D3 | GPIO0 | ⚠ Boot modu; açılışta LOW olmamalı (FLASH butonu) |
| D4 | GPIO2 | ⚠ Açılışta HIGH olmalı; dahili LED buraya bağlı |
| D5 | GPIO14 | SPI SCLK — güvenli |
| D6 | GPIO12 | SPI MISO — güvenli |
| D7 | GPIO13 | SPI MOSI — güvenli |
| D8 | GPIO15 | ⚠ Açılışta LOW olmalı (dahili pull-down) |
| RX | GPIO3 | Seri alma |
| TX | GPIO1 | Seri gönderme |
| A0 | ADC0 | Tek analog giriş |
Güvenli pinler
Boot sorunu yaşamamak için şu pinleri tercih edin:
D1, D2, D5, D6, D7 — bunlar her koşulda güvenlidir.
D3, D4, D8’den kaçının (özellikle bir sensör veya röle bağlayacaksanız). Bu pinler açılış anındaki seviyelerine bakarak kartın hangi modda başlayacağını belirler. Yanlış seviyede bir bileşen bağlarsanız kart hiç açılmaz veya flash moduna girer.
Örneğin D8’e (GPIO15) pull-up direnci olan bir sensör bağlarsanız kart açılmaz.
Tek Analog Giriş ve Aralığı
ESP8266’nın yalnızca bir analog girişi vardır ve çipin kendi ADC aralığı 0 – 1 V’tur.
NodeMCU ve Wemos D1 Mini kartlarında A0 pininde kart üzerinde bir gerilim bölücü bulunur; bu sayede pine 0–3,3 V uygulanabilir.
- NodeMCU / Wemos: A0 pinine 0 – 3,3 V
- Çıplak ESP-12 modülü: 0 – 1 V
void loop() {
int ham = analogRead(A0); // 0 - 1023
float volt = ham * (3.3 / 1023.0);
Serial.print(ham);
Serial.print(" ");
Serial.print(volt, 2);
Serial.println(" V");
delay(500);
}A0 pinine 3,3 V’un üzerinde gerilim uygulamayın. 5 V’luk bir sensör çıkışını doğrudan bağlamak ADC’yi kalıcı olarak bozar.
Birden fazla analog sensör gerekiyorsa harici bir ADC (ADS1115, I2C, 4 kanal, 16 bit) veya analog çoklayıcı (CD4051) kullanın.
Arduino IDE’ye ESP8266 Desteği Ekleme
- Dosya → Tercihler menüsünü açın.
- Ek Kart Yöneticisi URL’leri alanına şunu ekleyin:
https://arduino.esp8266.com/stable/package_esp8266com_index.json - Araçlar → Kart → Kart Yöneticisi’nden
esp8266aratıp kurun. - Araçlar → Kart → ESP8266 Boards → NodeMCU 1.0 (ESP-12E Module) seçin.
Kart görünmüyorsa CH340 veya CP2102 sürücüsünü kurmanız gerekebilir.
İlk Kod
Dahili LED, GPIO2’ye (D4) bağlıdır ve ters mantıkla çalışır: LOW yakar, HIGH söndürür.
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
Serial.println();
Serial.println("ESP8266 basladi");
}
void loop() {
digitalWrite(LED_BUILTIN, LOW); // LED yanar (ters mantik)
delay(500);
digitalWrite(LED_BUILTIN, HIGH); // LED soner
delay(500);
}ESP kartlarında Seri Monitör hızı olarak 115200 kullanılır.
Besleme
ESP8266 Wi-Fi iletimi sırasında ani akım çeker.
| Durum | Akım |
|---|---|
| Uyku modu (deep sleep) | ~20 µA |
| Boşta (Wi-Fi bağlı) | ~70 mA |
| Wi-Fi iletim tepe | ~300 mA |
Bu, en sık karşılaşılan sorunun kaynağıdır: yetersiz besleme yüzünden kart sürekli resetlenir veya Wi-Fi’ye bağlanamaz.
Kurallar:
- Arduino’nun 3.3V pininden beslemeyin (sadece 50 mA verir).
- En az 500 mA verebilen bir kaynak kullanın.
- Besleme hattına 470 µF elektrolitik + 100 nF seramik kondansatör ekleyin.
- NodeMCU kartını USB’den beslemek genellikle yeterlidir.
- Ayrı 3,3 V regülatör kullanacaksanız AMS1117 yeterli akımı sağlar (yaklaşık 800 mA).
Belirti: kart açılıyor ama Wi-Fi’ye bağlanırken resetleniyorsa neredeyse her zaman besleme sorunudur.
Deep Sleep — Pille Çalıştırma
ESP8266’nın en değerli özelliklerinden biri derin uyku modudur. Kart kendini kapatır, belirlenen süre sonra uyanır, işini yapar ve tekrar uyur.
Bu modda tüketim ~20 µA’e düşer; bir pille aylarca çalışan sensör düğümleri böyle yapılır.
Donanım şartı: GPIO16 (D0) pini ile RST pini bir kabloyla birleştirilmelidir. Uyandırma sinyali bu hat üzerinden gelir.
void setup() {
Serial.begin(115200);
Serial.println("Uyandi, olcum yapiliyor...");
int deger = analogRead(A0);
Serial.print("Deger: ");
Serial.println(deger);
// Burada veriyi Wi-Fi ile gonderebilirsiniz
Serial.println("Uykuya geciliyor (30 saniye)");
ESP.deepSleep(30e6); // mikrosaniye cinsinden: 30 saniye
}
void loop() {
// deepSleep sonrasi program setup()'tan yeniden baslar
}Uyandıktan sonra program loop() içinden değil, setup()’ın başından devam eder. Kod yapınızı buna göre kurun.
Maksimum uyku süresi yaklaşık 3 saat (ESP8266’da ~71 dakika, çekirdek sürümüne göre değişir); daha uzun aralıklar için art arda uyku döngüleri kurulur.
Sık Karşılaşılan Sorunlar
| Belirti | Neden |
|---|---|
| Kart açılmıyor | D3/D4/D8’e yanlış bileşen bağlı |
| Sürekli resetleniyor | Besleme yetersiz — kondansatör ve güçlü kaynak ekleyin |
| Wi-Fi’ye bağlanmıyor | 5 GHz ağa bağlanmaya çalışıyorsunuz — ESP8266 sadece 2,4 GHz destekler |
| Seri Monitör’de anlamsız karakter | Baud hızı 115200 olmalı |
| Analog okuma hep 1023 | A0’a 3,3 V üstü gerilim uygulanmış |
| Kod yüklenmiyor | Sürücü eksik; yanlış kart seçili; D3 (GPIO0) bir yere bağlı |
| Yükleme sonrası çalışmıyor | Flash boyutu ayarı yanlış seçilmiş olabilir |
Özet
ESP8266, dahili Wi-Fi taşıyan, Arduino Uno’dan çok daha hızlı ve bellekli bir mikrodenetleyicidir. 3,3 V lojik seviyeyle çalışır ve yalnızca bir analog girişi vardır.
Bu derste şunları öğrendik:
- NodeMCU, Wemos D1 Mini ve ESP-01 farklarını
- Kart etiketi (D1) ile GPIO numarası eşleşmesini
- D3, D4 ve D8 boot pinlerinden kaçınmayı
- Tek analog girişin 0–3,3 V aralığını
- Arduino IDE’ye kart desteği eklemeyi
- Wi-Fi tepe akımı ve besleme gereksinimlerini
- Deep sleep ile pille aylarca çalıştırmayı