Arduino ve ethernet modülü ENC28J60 kullanımı, internete bağlanma, arduino projeler, enc28j60 library, kütüphane, enc28j60 kullanımı, web server, example, örnek, şematik, devre, bağlantı, led yakma
Arduino kartlarını ethernet modülleri aracılığıyla internete veya kurduğumuz yerel ağlara bağlayabilir ve projelerimize göre led, motor kontrolü, sensör değerleri okuma, veri paylaşma, kendi ev otomasyon sistemimizi kurma gibi farklı işlemler yapabiliriz.
Bu yazımızda ethernet shieldlara göre daha ucuz olan ethernet modülü enc28j60 ile arduino kartına bağlı olan harici bir ledin, bir web sayfası üzerinden on-off şeklinde kontrolünü paylaşıyoruz.
ENC28J60 Nedir ?
ENC28J60 Ethernet Modülü, ağ protokolü gereksinimlerinin çoğunu karşılayacak bir dizi özelliğe sahip Microchip ENC28J60 Bağımsız Ethernet Denetleyicisi IC’sini kullanır.
Pek çok işlemciye standart SPI bağlantısı ile 20MHz’e kadar varan transfer hızı ile bağlanır.
Özellikleri:
- Arduino / AVR / LPC / STM3 için Ethernet LAN Modülü
- Ağ Arayüzü: HR911105A
- Besleme Gerilimi: 3.3 V (5V Toleranslı DIO)
- 25 Mhz kristal osilatör
- Boyut (U x G x Y): Yaklaşık. 2,3 x 1,3 x 0,7 inç / 58 x 34 x 17 mm
Kullanılacak Ekipmanlar
1x Arduino Uno
1x Ethernet Modülü ENC28J60
1x 3mm LED
1x 150ohm direnç
1x Router/modem
2x Ethernet kablosu
Yeteri kadar jumper kablo
Arduino ve ENC28J60 Ethernet Modülü Bağlantısı
Ethernet modülü ile Arduino‘muz arasında aşağıdaki gibi bağlantı kurulur.
ENC28J60 Ethernet Modülü | Arduino |
CS | 10 |
SI | 11 |
SO | 12 |
SCK | 13 |
VCC | 3.3V |
GND | GND |
Arduino Kodu
Aşağıdaki kod (sketch) açılan Arduino‘nun kod sayfasına kopyalanır ve derlenip&yüklenerek çalıştırılır. Kod çalıştırmadan önce ethernet modülü için gerekli olan kütüphane EtherCard BURADAN indirilerek programın başına eklenir.
#include <EtherCard.h> //EtherCard kütüphanesi ekleme
//Ledi yakıp söndürmek için kısayollar
//http://192.168.2.34/?LED=OFF
//http://192.168.2.34/?LED=ON
#define STATIC 0 // DHCP'yi kullanım dışı bırakmak için 1 yapılır (myip/gwip değerlerini aşağıda ayarlanır)
// mac adresi
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
// ethernet ip adresi
static byte myip[] = { 192,168,0,200 };
// gateway ip adresi
static byte gwip[] = { 192,168,0,1 };
// Kontrol edilecek LED pini
int ledPin = 5; //Arduino D5 pini ile GND arasına LED ve 150ohm direnç bağlanır.
byte Ethernet::buffer[700];
//web arayüzü
char const page[] PROGMEM =
"HTTP/1.0 503 Service Unavailable\r\n"
"Content-Type: text/html\r\n"
"Retry-After: 600\r\n"
"\r\n"
"<html>"
"<head><title>"
"Service Temporarily Unavailable"
"</title></head>"
"<body>"
"<h3>LED KONTROL PROGRAMI</h3>"
"<p><em>"
"LED kontrolu icin Arduino'ya iletilecek komutlar.<br />"
"Sintaks yapisi: http://192.168.0.XX/?LED=OFF or ON"
"</em></p>"
"</body>"
"</html>"
;
void setup ()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Serial.println("Trying to get an IP...");
Serial.print("MAC: ");
for (byte i = 0; i < 6; ++i)
{
Serial.print(mymac[i], HEX);
if (i < 5)
Serial.print(':');
}
Serial.println();
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
{
Serial.println( "Failed to access Ethernet controller");
}
else
{
Serial.println("Ethernet controller access: OK");
}
;
#if STATIC
Serial.println( "Getting static IP.");
if (!ether.staticSetup(myip, gwip))
{
Serial.println( "could not get a static IP");
blinkLed(); // blink forever to indicate a problem
}
#else
Serial.println("Setting up DHCP");
if (!ether.dhcpSetup())
{
Serial.println( "DHCP failed");
blinkLed(); // blink forever to indicate a problem
}
#endif
ether.printIp("My IP: ", ether.myip);
ether.printIp("Netmask: ", ether.netmask);
ether.printIp("GW IP: ", ether.gwip);
ether.printIp("DNS IP: ", ether.dnsip);
}
void loop ()
{
word len = ether.packetReceive();
word pos = ether.packetLoop(len);
// IF LED=ON turn it ON
if(strstr((char *)Ethernet::buffer + pos, "GET /?LED=ON") != 0)
{
Serial.println("Received ON command");
digitalWrite(ledPin, HIGH);
}
// IF LED=OFF turn it OFF
if(strstr((char *)Ethernet::buffer + pos, "GET /?LED=OFF") != 0)
{
Serial.println("Received OFF command");
digitalWrite(ledPin, LOW);
}
// show some data to the user
memcpy_P(ether.tcpOffset(), page, sizeof page);
ether.httpServerReply(sizeof page - 1);
}
void blinkLed()
{
while (true)
{
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}
}
WEB Sayfasından LED Kontrolü
Yukarıda verilen kod Arduino‘ya yüklenip çalıştırıldıktan sonra seri monitör açılarak ethernet modülüne tanımlanan (DHCP aktif ise) IP adresi kopyalanır ve bir internet tarayıcı sayfasına gidilerek kodun başında verilen IP adresleri yerine yazılarak LED on veya off konumuna getirilir.
Arduino ve Röle İle Motor Dönüş Yönü Kontrolü içeriğimiz de ilginizi çekebilir.
mükemmel bir yazı olmuş, emeklerinize sağlık… peki esp8266 wifi modüle entegre edilebilir mi acaba?
yorumunuz için teşekkürler.
şu web adresinde esp ve enc28j60 entegrasyonuna yönelik bir çalışma var sorunuza yardımcı olabilir.