W5500 Ethernet modülü, TCP/IP yığınını donanımda çalıştıran WIZnet W5500 çipiyle mikrodenetleyiciye SPI üzerinden 10/100 Mbps kablolu ağ bağlantısı kazandırır. 8 soket ve 32 KB tampon bellek sunar, 3,3 V ile beslenir ve girişleri 5 V toleranslıdır. Arduino Ethernet kütüphanesiyle doğrudan çalışır.
Wi-Fi her projede yeterince kararlı değildir: pano içindeki bir kontrol kartı, depo sıcaklığını kaydeden bir sensör ya da fabrikadaki bir sayaç kablolu ağdan çok daha güvenilir çalışır. W5500 Ethernet modülü, Arduino ve ESP32 gibi kartlara bu kablolu bağlantıyı birkaç kabloyla ekler. Bu yazıda W5500'ün ne olduğunu, özelliklerini, ENC28J60 ve W5100'den farkını, Arduino ve ESP32 bağlantısını, örnek bir web sunucu kodunu ve beslemeyi anlatıyoruz.
W5500 nedir?
W5500, WIZnet firmasının TCP, UDP, IPv4, ICMP, ARP, IGMP ve PPPoE protokollerini donanım içinde işleyen, MAC ve 10/100 Mbps PHY katmanını da barındıran ve mikrodenetleyiciye SPI ile bağlanan bir Ethernet denetleyici çipidir. WIZnet bu yapıya "hardwired TCP/IP" adını verir.
Bu yaklaşımın faydası, ağ yığınının mikrodenetleyicinin belleğini ve işlem gücünü tüketmemesidir. Arduino Uno gibi 2 KB RAM'li bir kart bile W5500 ile web sayfası sunabilir ya da MQTT mesajı gönderebilir. W5500 tabanlı SPI-Ethernet dönüştürücü modül (USR-ES1) gibi kartlar ise bu çipi RJ45 soketi, manyetik trafo, kristal ve gerekli pasif elemanlarla birlikte küçük bir karta yerleştirir.
W5500'ün özellikleri nelerdir?
W5500, 8 bağımsız soket, 32 KB gönderme-alma tampon belleği ve 80 MHz'e kadar SPI saat hızı sunar; 3,3 V ile çalışır ve G/Ç uçları 5 V toleranslıdır. Temel değerler WIZnet belgelerine göre şöyledir:
| Özellik | Değer |
|---|---|
| Ağ hızı | 10BaseT / 100BaseTX, otomatik algılama, tam ve yarım çift yönlü |
| Soket sayısı | 8 bağımsız soket |
| Tampon bellek | 32 KB (TX ve RX için paylaştırılır) |
| Arayüz | SPI, mod 0 ve 3, 80 MHz'e kadar |
| Besleme | 3,3 V |
| G/Ç seviyesi | 3,3 V, girişler 5 V toleranslı |
| Akım | 100 Mbps bağlantıda yaklaşık 130 mA |
| Ek özellikler | Wake on LAN (UDP), güç kesme modu |
W5500 IP parçalanmasını (fragmentation) desteklemez ve çip içinde fabrika MAC adresi yoktur; MAC adresini kodda siz verirsiniz. Aynı ağda birden fazla modül varsa her birine farklı MAC adresi atayın.
W5500, ENC28J60 ve W5100 arasındaki fark nedir?
W5500 TCP/IP'yi donanımda işler ve 8 soket sunar; W5100 de donanım yığınlıdır ama 4 soketle sınırlıdır; ENC28J60 ise yalnızca MAC ve PHY içerir, TCP/IP yığını mikrodenetleyicide yazılımla çalışır. Bu fark özellikle küçük RAM'li Arduino kartlarında belirgindir.
| Özellik | W5500 | W5100 | ENC28J60 |
|---|---|---|---|
| TCP/IP yığını | Donanımda | Donanımda | Yazılımda (mikrodenetleyici) |
| Soket | 8 | 4 | Kütüphaneye bağlı |
| Ağ hızı | 10/100 Mbps | 10/100 Mbps | 10 Mbps |
| Arduino kütüphanesi | Ethernet (resmi) | Ethernet (resmi) | UIPEthernet, EtherCard |
| Tipik kart | Küçük SPI modülü | Arduino Ethernet Shield | Küçük SPI modülü |
Uno'ya doğrudan takılan bir kart istiyorsanız W5100 Ethernet Shield SD kart yuvasıyla birlikte gelir. Bütçe öncelikliyse ENC28J60 Ethernet LAN modülü de çalışır, ancak programınızın RAM'inden pay alır. Yeni projelerde hız, soket sayısı ve kütüphane desteği nedeniyle W5500 daha dengeli seçimdir.
W5500 Arduino'ya nasıl bağlanır?
W5500 modülü Arduino Uno'ya SPI pinleriyle bağlanır: MOSI → D11, MISO → D12, SCK → D13 ve CS (SCS) → D10; GND ortak olur, modül 3,3 V ile beslenir. RST ucu boşta bırakılabilir ya da Arduino'nun RESET pinine bağlanabilir.
| W5500 modülü | Arduino Uno | ESP32 DevKit |
|---|---|---|
| 3.3V | Harici 3,3 V regülatör | 3V3 |
| GND | GND | GND |
| MOSI | D11 | GPIO23 |
| MISO | D12 | GPIO19 |
| SCK (SCLK) | D13 | GPIO18 |
| CS (SCS) | D10 | GPIO5 |
| RST | RESET (isteğe bağlı) | EN ya da boş GPIO (isteğe bağlı) |
Arduino Uno'nun 3,3 V pini, Arduino belgelerine göre en fazla 50 mA verecek şekilde kullanılmalıdır; W5500 ise 100 Mbps bağlantıda yaklaşık 130 mA çeker. Bu yüzden modülü Uno'nun 5 V pininden beslenen bir AMS1117 3,3 V regülatör modülü ile besleyin ve GND'leri birleştirin. Regülatörün çalışmasını AMS1117 3,3 V regülatör yazımızda anlattık.
W5500'ün girişleri 5 V toleranslı olduğu için Uno'nun MOSI, SCK ve CS çıkışları doğrudan bağlanabilir. MISO hattında W5500'ün 3,3 V çıkışı Uno tarafından çoğu durumda yüksek seviye olarak okunur; uzun kablolarda ya da kararsız okumada bir lojik seviye dönüştürücü kullanın. Bazı modüllerde 5V girişi ve kart üstü regülatör bulunur; pin sırası üreticiye göre değiştiği için kartın üzerindeki baskıyı esas alın.
W5500 ESP32'ye nasıl bağlanır?
ESP32 DevKit kartında W5500, varsayılan VSPI pinlerine bağlanır: MOSI → GPIO23, MISO → GPIO19, SCK → GPIO18 ve CS → GPIO5; besleme kartın 3V3 pininden alınır. ESP32 3,3 V mantıkla çalıştığı için seviye dönüştürücü gerekmez.
Arduino'nun Ethernet kütüphanesi ESP32'de de çalışır; tek fark, kodda Ethernet.init(5) ile CS pinini belirtmektir. ESP32 Arduino çekirdeğinin 3.x sürümlerindeki ETH kütüphanesi de W5500'ü destekler ve ağ bağlantısını Wi-Fi ile aynı yapıda yönetir. ESP32-WROOM-32D geliştirme kartı ile kablolu ağ ve Wi-Fi'yi aynı projede yedekli kullanabilirsiniz. ESP32'ye yeniyseniz ESP32 başlangıç rehberi yazımıza göz atın.
Örnek kod nasıl yazılır?
W5500 ile ilk deneme için en uygun örnek, DHCP'den IP adresi alan ve tarayıcıya A0 pinindeki değeri gösteren küçük bir web sunucusudur. Adımlar şunlardır:
- Modülü yukarıdaki tabloya göre bağlayın ve RJ45 soketine bir ağ kablosu takıp modemin ya da switch'in LAN portuna bağlayın.
- Arduino IDE'de Kütüphane Yöneticisi'nden "Ethernet" kütüphanesini (Arduino) kurun ya da güncelleyin.
- Aşağıdaki kodu yükleyin ve seri monitörü 115200 baud'da açın.
- Seri monitörde yazan IP adresini aynı ağdaki bir bilgisayarın tarayıcısına girin.
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x02, 0x12, 0x34, 0x56, 0x78, 0x9A };
EthernetServer sunucu(80);
void setup() {
Serial.begin(115200);
Ethernet.init(10); // CS pini (ESP32'de 5)
if (Ethernet.begin(mac) == 0) { // DHCP
Serial.println("DHCP basarisiz");
if (Ethernet.hardwareStatus() == EthernetNoHardware) Serial.println("W5500 bulunamadi");
if (Ethernet.linkStatus() == LinkOFF) Serial.println("Kablo takili degil");
while (true) delay(1);
}
Serial.print("IP: ");
Serial.println(Ethernet.localIP());
sunucu.begin();
}
void loop() {
EthernetClient istemci = sunucu.available();
if (istemci) {
delay(5);
while (istemci.available()) istemci.read(); // istegi oku
istemci.println("HTTP/1.1 200 OK");
istemci.println("Content-Type: text/plain");
istemci.println("Connection: close");
istemci.println();
istemci.print("A0 = ");
istemci.println(analogRead(A0));
istemci.stop();
}
}
MAC adresinin ilk baytı 0x02 olduğu için bu adres "yerel yönetilen" sınıfındadır ve gerçek cihazlarla çakışmaz. Kütüphane, 2 KB RAM'li kartlarda (Uno, Nano) soket sayısını otomatik olarak 4'e indirir; Mega ve ESP32'de 8 soketin hepsi kullanılır.
W5500 için besleme ve PoE nasıl planlanır?
W5500 modülü için en az 200 mA verebilen temiz bir 3,3 V besleme planlayın; üretici tabloları çipin 100 Mbps bağlantıda yaklaşık 130 mA çektiğini, Joy-IT gibi modül üreticileri ise en az 200 mA besleme önerdiğini belirtir. Modülün yakınına 10 µF ve 100 nF kondansatör eklemek bağlantı kopmalarını azaltır.
W5500 çipi ve yaygın W5500 modülleri PoE (Ethernet üzerinden güç) içermez; RJ45 soketinden gelen gerilimi kullanmaz. Kartı ağ kablosuyla beslemek istiyorsanız kablonun ucunda ayrı bir PoE ayırıcı (splitter) kullanın ve çıkan 5 V ya da 12 V'u regülatörle düşürün. Bağlantı için standart bir CAT6 Ethernet kablosu yeterlidir.
Sık sorulan sorular
W5500 modülü 5 V ile çalışır mı?
W5500 çipi 3,3 V ile beslenir; 3,3 V pinine 5 V vermek çipe zarar verir. Girişleri 5 V toleranslı olduğu için 5 V'luk bir Arduino'dan gelen SPI sinyalleri sorun çıkarmaz. Bazı modüllerde kart üzerinde regülatör ve 5V girişi bulunur; bu durumda besleme 5V ucundan verilir, iki uç aynı anda kullanılmaz.
W5500 ile Wi-Fi aynı anda kullanılabilir mi?
Evet, ESP32'de W5500 ve Wi-Fi aynı anda çalışabilir. Örneğin kablolu bağlantı ana hat, Wi-Fi yedek hat olarak kullanılabilir ya da ESP32 kablolu ağ ile Wi-Fi ağı arasında köprü görevi görebilir. Bu durumda yönlendirme ve IP adreslerini dikkatle planlamak gerekir.
W5500 sabit IP ile nasıl çalıştırılır?
Ethernet.begin fonksiyonuna MAC adresiyle birlikte bir IPAddress nesnesi verirseniz modül DHCP beklemeden o adresi kullanır; örneğin Ethernet.begin(mac, IPAddress(192, 168, 1, 50)). Adresin ağınızdaki aralıkta olduğundan ve başka bir cihazda kullanılmadığından emin olun. Gerekirse ağ geçidi ve alt ağ maskesini de ekleyin.
Ethernet.begin neden takılıyor?
DHCP isteğine yanıt gelmezse Ethernet.begin varsayılan olarak bir dakikaya kadar bekler. Önce kablonun takılı ve modül LED'lerinin yanık olduğunu, sonra SPI kablolarını ve CS pininin kodla aynı olduğunu kontrol edin. Besleme yetersizse modül kendini resetleyebilir; 3,3 V hattını yük altında ölçün.
W5500 ile Modbus TCP veya MQTT yapılabilir mi?
Evet, W5500 TCP ve UDP soketleri sağladığı için üzerine Modbus TCP, MQTT ve HTTP gibi uygulama protokolleri kütüphanelerle kurulabilir. Arduino'da PubSubClient (MQTT) ve ArduinoModbus gibi kütüphaneler EthernetClient ile çalışır. Seri hat üzerinden Modbus kullanılacaksa RS485 dönüştürücü ayrıca gerekir.
Özet
- W5500, TCP/IP yığınını donanımda işleyen, SPI ile bağlanan 10/100 Mbps Ethernet çipidir; 8 soket ve 32 KB tampon sunar.
- Arduino Uno bağlantısı: MOSI D11, MISO D12, SCK D13, CS D10; ESP32'de GPIO23, 19, 18 ve 5.
- Besleme 3,3 V'tur; Uno'nun 3,3 V pini yetmez, en az 200 mA verebilen harici regülatör kullanın.
- Arduino'nun resmi Ethernet kütüphanesi W5500'ü otomatik tanır; CS pini Ethernet.init ile verilir.
- W5500 PoE içermez; ağ kablosundan besleme için ayrı PoE ayırıcı gerekir.
