Bu rehberde, WIZnet W5500 Ethernet Modülü ile Arduino Uno'yu SPI protokolü üzerinden bağlayarak kablolu (LAN) ağlara nasıl erişeceğinizi inceliyoruz. W5500 modülü, dahili TCP/IP donanım yığını (Hardwired TCP/IP stack) sayesinde Arduino'nun işlemci yükünü ve RAM kullanımını minimumda tutarak oldukça kararlı bir haberleşme sağlar.
Ethernet (v2.0 veya üzeri) kütüphanesi W5500 çipini doğrudan destekler.W5500 modülü Arduino Uno ile donanımsal SPI hattı üzerinden haberleşir. Görseldeki pin eşleşmeleri şu şekildedir:
| W5500 Pin Ucu | Arduino Uno Bağlantısı | Açıklama |
|---|---|---|
VCC (5V / 3.3V) |
5V veya 3.3V Pin | Besleme Gerilimi *(Modül üzerindeki regülatör çeşidine göre ayarlanır)* |
GND |
GND Pin | Ortak Toprak Hat Sıfırlaması |
RST |
RESET Pin | Hardware Reset Sinyali |
SCS (CS) |
Digital 10 (D10) | SPI Chip Select (Slave Select) |
MOSI |
Digital 11 (D11) | SPI Master Out Slave In |
MISO |
Digital 12 (D12) | SPI Master In Slave Out |
SCLK (CLK) |
Digital 13 (D13) | SPI Clock (Saat Sinyali) |
INT / NC |
Boşta (NC) | Kesme / Baglantısız uç (Kullanılmıyor) |
Aşağıdaki kod, W5500 modülünü kullanarak router'dan otomatik IP (DHCP) talep eder ve Arduino'yu bir yerel Web Sunucusuna dönüştürür. Tarayıcıdan Arduino'nun IP adresine bağlandığınızda analog pin değerlerini ekrana yazdırır:
// Arduino Uno + W5500 Ethernet Web Server Örneği
#include <SPI.h>
#include <Ethernet.h>
// Benzersiz bir MAC Adresi tanımlayın (Ağdaki diğer cihazlarla çakışmamalıdır)
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Statik IP yapılandırması (DHCP başarısız olursa yedek olarak kullanılır)
IPAddress ip(192, 168, 1, 177);
// Port 80 üzerinde Web Server başlat
EthernetServer server(80);
void setup() {
Serial.begin(115200);
while (!Serial) { ; } // Seri Port hazır olana kadar bekle
Serial.println("W5500 Ethernet Modulu Baslatiliyor...");
// W5500 Chip Select pini varsayılan D10'dur
Ethernet.init(10);
// Otomatik IP almak için DHCP dene
if (Ethernet.begin(mac) == 0) {
Serial.println("DHCP ile IP alinamadi, Statik IP kuruluyor...");
// Donanım hatası kontrolü
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("HATA: W5500 Modulu bulunamadi! Baglantilari kontrol edin.");
while (true);
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("HATA: Ethernet kablosu takili degil!");
}
// Statik IP ile başlat
Ethernet.begin(mac, ip);
}
// Sunucuyu Başlat
server.begin();
Serial.print("Web Server Aktif! Baglanti IP Adresi: ");
Serial.println(Ethernet.localIP());
}
void loop() {
// Gelen istemcileri (Browser isteklerini) dinle
EthernetClient client = server.available();
if (client) {
Serial.println("\nYeni İstemci Baglandi.");
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// HTTP isteği bittiğinde (boş satır alındığında) yanıt gönder
if (c == '\n' && currentLineIsBlank) {
// Standart HTTP yanıt başlığı
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 5"); // Sayfayı her 5 saniyede bir otomatik yenile
client.println();
// HTML Sayfa İçeriği
client.println("");
client.println("");
client.println("Arduino W5500 Server");
client.println("");
client.println("Arduino Uno W5500 Web Server
");
client.println("Sensör Okumaları (Analog Girişler):
");
// Analog pinleri oku ve HTTP sayfasına bas
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("- Analog Giriş A");
client.print(analogChannel);
client.print(" : ");
client.print(sensorReading);
client.println("
");
}
client.println("
");
client.println("");
client.println("");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
} else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1); // Verinin gitmesi için kısa bir süre bekle
client.stop(); // Bağlantıyı kapat
Serial.println("Baglanti kapatildi.");
}
}
Ethernet.h kütüphanesi bellek dostudur ve tak-çalıştır mimari sunar.Henüz yorum yapılmamış. İlk yorumu siz yapın!