Bu içerikte, ESP32 (ESP-WROOM-32) geliştirme kartı ile W5500 Ethernet Modülü'nü HSPI (High-Speed SPI) arayüzü üzerinden bağlayarak kablolu (LAN) ağ bağlantısı kurmayı inceliyoruz. Wi-Fi'ın zayıf olduğu veya yüksek stabilite gerektiren IoT / otomasyon projelerinde yerel Ethernet bağlantısı mükemmel bir çözümdür.
Ethernet.h kütüphanesi veya Arduino Kütüphane Yöneticisi'nden yükleyebileceğiniz Ethernet3 / EthernetLarge kütüphaneleri kullanılabilir.| W5500 Modül Pin | ESP32 Bağlantı Pini | Açıklama / Görev |
|---|---|---|
10 (3.3V) |
3V3 Pin | 3.3V Besleme Gerilimi |
4 (GND) |
GND Pin | Ortak Toprak Hat |
7 (SCS / CS) |
GPIO 15 | HSPI Chip Select (CS) Pin |
6 (SCLK) |
GPIO 14 | HSPI Clock (SCK) Pin |
8 (MOSI) |
GPIO 13 | HSPI Master Out Slave In |
9 (MISO) |
GPIO 12 | HSPI Master In Slave Out |
3 (RST) |
GPIO 4 | Hardware Reset Control Pin |
2 (INT) |
GPIO 5 | Hardware Interrupt (Kesme) Pin |
1 (NC) / 5 (5V) |
Boşta (NC) | Kullanılmıyor |
ESP32'de özel SPI pinleri kullanırken SPIClass nesnesini HSPI donanım bloğu ile başlatıp Ethernet.init() veya Ethernet.begin() çağrılarından önce SPI pinlerini atamamız gerekir:
// ESP32 + W5500 Ethernet Web Server (HSPI Pin Yapılandırması)
#include <SPI.h>
#include <Ethernet.h>
// HSPI Pin Tanımlamaları (Şemaya Uygun)
#define ETH_CS 15
#define ETH_SCLK 14
#define ETH_MOSI 13
#define ETH_MISO 12
#define ETH_RST 4
#define ETH_INT 5
// Benzersiz MAC Adresi
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Özel SPI Nesnesi (HSPI donanım bloğunu kullanır)
SPIClass hspi(HSPI);
EthernetServer server(80);
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("ESP32 W5500 Baslatiliyor...");
// W5500 Donanımsal Reset (GPIO 4 üzerinden)
pinMode(ETH_RST, OUTPUT);
digitalWrite(ETH_RST, LOW);
delay(100);
digitalWrite(ETH_RST, HIGH);
delay(200);
// Custom HSPI Pinlerini Başlat
hspi.begin(ETH_SCLK, ETH_MISO, ETH_MOSI, ETH_CS);
// Ethernet Kütüphanesine CS Pinini Bildir
Ethernet.init(ETH_CS);
// DHCP ile IP Al
if (Ethernet.begin(mac) == 0) {
Serial.println("DHCP Hata! Statik IP deneniyor...");
IPAddress ip(192, 168, 1, 150);
Ethernet.begin(mac, ip);
}
// Modül Donanım Kontrolü
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("HATA: W5500 Modulu Algılanamadı! SPI Baglantilarini Kontrol Edin.");
while (true);
}
server.begin();
Serial.println("==================================");
Serial.print("ESP32 Ethernet IP Adresi: ");
Serial.println(Ethernet.localIP());
Serial.println("==================================");
}
void loop() {
EthernetClient client = server.available();
if (client) {
Serial.println("Yeni Baglanti Geldi!");
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
// HTTP Yanıtı Gönder
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("");
client.println("ESP32 W5500 Ethernet");
client.println("");
client.println("<h1>ESP32 W5500 Ethernet Sunucusu</h1>");
client.println("<p>Kablolu Ağ Bağlantısı Başarılı!</p>");
client.print("<p>Sistem Çalışma Süresi: ");
client.print(millis() / 1000);
client.println(" saniye</p>");
client.println("");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
} else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
}
}
GPIO12 dahili flash voltaj regülatörünün modunu seçen bir strapping pinidir. Boot anında bu pinin lojik durumu kritik olabilir. Eğer kart boot kilitlenmesi yaşarsa, ETH_RST sıfırlama sırasını manuel geciktirmek veya VSPI hattına geçmek gerekebilir.GPIO 4 pinine bağlıdır. Kod içerisinde setup() aşamasında bu pini önce LOW yapıp ardından HIGH çekerek modülü resetlemek kararsız durumları çözer.Henüz yorum yapılmamış. İlk yorumu siz yapın!