You are here: Home » Elektronik » Arduino Uyumlu ENC28J60 Ethernet Modülü ve EtherCard Kütüphanesi Kullanımı

Arduino Uyumlu ENC28J60 Ethernet Modülü ve EtherCard Kütüphanesi Kullanımı

30 Eylül 2012 | Leave a comment(2) Go to comments

Arduino ile geliştirdiğiniz projelerinizi networkünüze dahil ederek daha geniş kapsamlı projeler yapmak için Arduino ile uyumlu bir ethernet arabirimine ihtiyaç duyarsınız. Bu ihtiyacınızı gidermek için kullanabileceğiniz en pratik çözüm Arduino ile uyumlu bir shield kullanmak olacaktır. Piyasada Arduino ile uyumlu birçok shield var. İlk uyumlu shieldlar 10 Mbit/s hızında çalışan ENC28J60 chipsetini kullanan shieldlardı. Daha sonra 100 Mbit/s hızında çalışan Wiznet marka chipsetini kullanan yeni shiledlar piyasaya sürüldü. Shield kavramı aslında Arduino Uno/Mega uyumlu çalışabilen bir board üzerine hazırlanmış devrenin Arduino üzerine oturtularak bütünleşik olarak hem Arduino’nun tüm pinlerini ve bu takılan shieldin özelliklerini kullanmanıza yarayan kartlar olarak tanımlanabilir.

Fakat bu shieldlar tak/kullan ürünler oldukları için bir ve birkaç lokasyona konumlandımak isteyeceğiniz Arduino ve Ethernet kullanan projeleriniz için mailyeti oldukça arttırabilir. Bu durumda maliyetleri azaltmak için Arduino’yu board olarak kullanmak yerine kendi hazırlayacagınız Atmega328P mikroişlemci içeren bir baskılı devre kullanmak isteyebilirsiniz ve Arduino’yu kullanmadıgınız durumlarda shieldlara da ihtiyacınız olmayacaktır ve hatta bu shiledlar maliyetleri Arduinoya göre çok daha fazla arttıracaktır.

ENC28J60  Chipsetli Ethernet Modül

İşte bu gibi durumlarda kullanabileceğiniz ENJ28J60 chipsetini kullanan düşük maliyetli shield board olarak tasarlanmamış SPI arayüzüne sahip ayrı bir modül mevcut. Bu modül 10 Mbit/s hızında çalışabiliyor ki 8 bitlik bir işlemci için bu hız son derece yeterli bir hız bence. Mutlaka Wiznet chipsetinin ENC28J60 chipsetine üstünlükleri var fakat ENJ28J60 modülüne  ödeyeceğiniz bedel ile Wiznet shielda ödeyeceğiniz bedel arasında en az 4 kat fark var 🙂 Dolayısıyla projelerinizde maliyet önemli bir unsur ise bu modülü kullanmanızı şiddetle tavsiye ediyorum.

 

Bu arada aşağıdaki adresten ilgili modülü temin edebilirsiniz.

Arduino Uyumlu ENC28J60 Ethernet Modül

 

ENC28J60 Modülü Arduino Kütüphanesi : Ethercard Library

Sanırım bir ürünün mailyetinin avantajlı olmasının yanında bir de kullandıgınız işlemci mimarisi ile uyumlu kütüphaneye sahip olması çok önemli. SPI arayüzüne sahip olan bu modülü SPI kütüphanesi ve arayüzü olan diğer tüm işlemci mimarisi ve geliştirma kartları ile kullanabilirsiniz ki Arduino’nun da SPI arayüzü var 🙂

Arduino ile kullanabileceğiniz ENC28J60 chipsetiyle uyumlu en gelişmiş özelliklere sahip kütüphane ise EtherCard kütüphanesi,

Bu kütüphaneyi https://github.com/jcw/ethercard linkinden  temin edebilirsiniz.

Kütüphaneyi indirdikten sonra zipten çıkardıgınız klasoru “ethercard” olarak isimlendirin ve Arduino IDE’nizin library klasörü altına kopyalayın ve Arduino IDE açık ise kapatıp yeniden açın. Bu durumda File -> Examples sekmesi altında ethercard adında yeni bir alan göreceksiniz ve bu alanda bulunan örnekleri hemen çalıştırabiliriz. Kütüphanenin diğer bir avantajı ise artık Arduino 1.0 ile uyumlu olarak çalışıyor olması.

 

Ethercard Kütüphanesi Backsoon Örneği

Bu örnekler arasından Backsoon örneğini inceleyecek olursak yapmanız gereken tek şey ethernet modülünüzü Arduino’nun uygun pinlerine baglamak ve örneği IDE üzerinde derlemek ve Arduinoya yüklemek olacaktır. Bu örnekte STATIC değişkeni 1 olarak atandıgından myip[] adlı değişkeninde belirteceğiniz ip adresini alacaktır ve ağınızda aldıgı bu ip adresi ile bir web sunucu olarak yani 80 nolu porttan istek kabul edebilir bir durumda çalışmaya devam edecektir. Yani 192.168.1.200 adresini browserınızın adres çubuguna yazarak (internet explorer kullanıyorsanız http://192.168.1.200 yazmanız gerekiyor) bu sayfaya gitmek istediğinizde yandaki gibi bir sayfa ile karşılacaksınız. Kullandıgınız myip[] – Arduinonun ip adresi ve gwip[]  – Gateway adresiniz yani modeminiz adresi değişkenlerindeki değerlerin kendi ağınızdaki subnete uygun olarak verildiğinden emin olmayı unutmayın.

Backsoon örneğinin çalışabilmesi ve diğer tüm örneklerinizde bu kütüphaneyi kullanabilmeniz için Arduinonun SPI pinlerini kullanmak gerekiyor ve bu haliyle varsayılan olarak kütüphane Chipselect – CS pini olarak 8 nolu pini kullanıyor ve istenirse değiştirilebiliyor.

Aşağıdaki tabloda da gördüğünüz gibi modül 3.3V gerilim değeri ile çalışmak üzere tasarlanmış. Fakat siz 3.3V gerilim degerinde regulasyona sahip olmayan bir board tasarlayarak Atmega328 kullanıyorsanız üzülmeyin çünkü birçok projede bu modülü 5V gerilim değeri ile çalıştırıyorum ve hiç bir problem yaşamadım. Biraz fazla ısınıyor sadece ama herhangi bir düzensizlik problemine sebep olmuyor. Ayrıca Arduinonun pinlerine Logic Level Dönüştürücü kullanılmadıgı sürece zaten sadece VCC degerine 3.3V uygulamış oluruz, diğer SPI ve CS pinlerine 5V gitmeye devam edecektir.

 

Pinleri aşağıdaki gibi bağlayarak modülünüzü kullanabilirsiniz ;

Modül          Arduino UNO

VCC       ->       3.3V ya da 5V
GND      ->      GND
SCK       ->      Pin 13
SO          ->      Pin 12
SI           ->      Pin 11
CS          ->      Pin 8

 

Backsoon Uygulaması

#include <EtherCard.h>

#define STATIC 1  // set to 1 to disable DHCP (adjust myip/gwip values below)

#if STATIC
// ethernet interface ip address
static byte myip[] = { 192,168,1,200 };
// gateway ip address
static byte gwip[] = { 192,168,1,1 };
#endif

// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[500]; // tcp/ip send and receive buffer

char 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>This service is currently unavailable</h3>"
    "<p><em>"
      "The main server is currently off-line.<br />"
      "Please try again later."
    "</em></p>"
  "</body>"
"</html>"
;

void setup(){
  Serial.begin(57600);
  Serial.println("\n[backSoon]");

  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) 
    Serial.println( "Failed to access Ethernet controller");
#if STATIC
  ether.staticSetup(myip, gwip);
#else
  if (!ether.dhcpSetup())
    Serial.println("DHCP failed");
#endif

  ether.printIp("IP: ", ether.myip);
  ether.printIp("GW: ", ether.gwip);  
  ether.printIp("DNS: ", ether.dnsip);  
}

void loop(){
  // DHCP expiration is a bit brutal, because all other ethernet activity and
  // incoming packets will be ignored until a new lease has been acquired
  if (!STATIC && ether.dhcpExpired()) {
    Serial.println("Acquiring DHCP lease again");
    ether.dhcpSetup();
  }

  // wait for an incoming TCP packet, but ignore its contents
  if (ether.packetLoop(ether.packetReceive())) {
    memcpy_P(ether.tcpOffset(), page, sizeof page);
    ether.httpServerReply(sizeof page - 1);
  }
}

Evet umarım yeni ethernet modülünü siz de begenmişsinizdir, yeni bir yazı da görüşmek dileğiyle…

Kaynaklar :

http://winkleink.blogspot.co.uk/2012/01/arduino-enc28j60-ethernet-module-part-2.html

Filed under

Elektronik

| Tags:

  1. merhabalar ENC28J60 modülü hakkında biraz yardıma ihtiyacım var. Sizinle nasıl iletişime geçebilirim. Teşekkürler.

  2. Öncelikle böyle bir blog için teşekkür ederim hocam.Ben gyro ile dc motor kontrol etmek istiyorum(ileri-geri) yardımcı olabilir misiniz? Filtrelemesini(kalman) yaptım. Kullandığım motor sürücü sabertooth.

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>