Araçlar - Makaleler

Arduino Ethernet ENC28J60 Network Ağ Bağlantısı

14 Haziran 2017, Yazar 0 comment
Arduino ve ENC28J60 ile Ağa Bağlanma

Arduino ile ağa bağlanmak için kullanabileceğimiz en ucuz yöntem sanırım ENC28J60 kullanmak. Promini ile birleşince boyutları açısından da yemede yanında yat oluyor. Şahsen kendi evimde bu yöntemi kullanarak aydınlatmaları mı kontrol ediyorum. Sonraki anlatımlarım da Promini 328, ENC28J60 ve RF alıcı vericiler ile evinizde kendi otomasyon sisteminizi ne kadar kolay ve ucuza yapabileceğinizi anlatacağım.

Gerekli Alet Edevat Listesi
Arduino Yeni Kütüphanenin Eklenmesi

ENC28J60 Ethernet Kart kütüphanesini GitHub dan indirmek için açılan sayfada  a tılıyoruz gelen kütüphaneyi Arduino Kurulum klasörümüzün içinde bulunan libraries klasörünün içine kopyalıyoruz.

Arduino ve ENC28J60 Bağlantı Şeması
ENC28j60 UNO-Promini-DUE Mega2560
CS Dijital Port 10 Dijital Port 53
SI Dijital Port 11 Dijital Port 51
SO Dijital Port 12 Dijital Port 50
SCK Dijital Port 13 Dijital Port 52
RESET RESET RESET
INT Dijital Port 2 Dijital Port 2
VCC 3.3 – 5 VOLT OLABİLİR 3.3 – 5 VOLT OLABİLİR
GROUND GROUND GROUND





Bağlantı sırasında dikkat edilmesi gereken ethernet kartınızın kaç volt olduğudur. 3.3 volt ise gerekli pine bağlanmalı 5 volt ise zaten VCC ye bağlıyoruz. Bu projede 5 Volt güç kaynağı ve 5 Volt ethernet kartı kullanmanızı öneririm. Gelelim Web Server Kodumuza

ENC28J60 Arduino Kodu
#include <EtherCard.h> // EtherCard kütüphanesini ekliyoruz.
#include <RCSwitch.h>
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };// Daha önce bulduğumuz modülümüze atanan yerel ip adresini bu kısma yazıyoruz.
static byte myip[] = { 192,168,1,199 };
static byte gwip[] = { 192,168,1,1 }; // MOdemimizin IP Adresi
byte Ethernet::buffer[700];BufferFiller bfill;RCSwitch mySwitch = RCSwitch();
char value; // incoming data
String incomingByte = “”;
String goingByte = “”;

unsigned long interval=100; // the time we need to wait
unsigned long previousMillis=0; // millis() returns an unsigned long.

String inputString = “”; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
void setup () {
if (stringComplete) {
Serial.println(inputString);
// clear the string:
inputString = “”;
stringComplete = false;
}

Serial.begin(9600); //Seri iletişimi başlatıyoruz.
Serial.println(“droid.com.tr”);
Serial.println(); // Bir satır boşluk bırakıyoruz.
// İnternet bağlantısını başlatıyoruz. Eğer bağlantılarda sorun varsa
// hata mesajı serial monitörde yazdırılacak.

if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println( “Ethernet denetleyicisine erisim saglanamadi.”);
else
Serial.println(“Ethernet denetleyicisi baslatildi.”);
ether.staticSetup(gwip);
if (!ether.staticSetup(myip))
Serial.println(“Sabit IP atama islemi yapilamadi.”);

Serial.println(); // 1 satır boşluk bırakıyoruz.
mySwitch.enableTransmit(3);
inputString.reserve(20);

}
static word homePage() {
long t = millis() / 1000;
word h = t / 3600;
byte m = (t / 60) % 60;
byte s = t % 60;
bfill = ether.tcpOffset();
bfill.emit_p(PSTR(
“HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n”
“<body style=background-color:black>”
“<font color=red><center><p><h1>droid.com.tr</font></h1>”
“<hr><br> <h2><font color=\”blue\”>Android Atmel Entegrasyonu ”
“<br> Kontrol Sizde ”
“<br> Droid Heryerde ”
” <br></font></h2> ”
“</center><hr> V1.0 <a href=\”http://173.199.71.108\”>www.droid.com.tr<a>”));
return bfill.position();
}
void loop() {

word len = ether.packetReceive();
word pos = ether.packetLoop(len);

 

if (pos) {
char* data = (char *) Ethernet::buffer + pos;

if (strncmp(“GET /”, data, 5) ==0){
String str;

char *token = strtok(data, “H”); // Get everything up to the /

incomingByte.concat(token);
if (incomingByte.substring(0,6) == “GET /9”) {
unsigned long currentMillis = millis(); // grab current time

// check if “interval” time has passed (1000 milliseconds)
if ((unsigned long)(currentMillis – previousMillis) >= interval) {
Serial.println(“Giden “);
goingByte = incomingByte.substring(6,10);
Serial.println(goingByte);
mySwitch.send(goingByte.toInt(), 24);
previousMillis = millis();
}

}
}
ether.httpServerReply(homePage()); // send web page data
incomingByte = “”;
goingByte = “”;
}
}

void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == ‘\n’) {
stringComplete = true;
}
}
}

Arduino web server da dikkat edilmesi gerekenler başlıca IP adresimizin modemimizin havuzundan seçilmesi yani… modemimizin havuzu 192.168.2.1 yada 10.0.0.1 gibi bir adres ise biz ethernet kodumuza 192.168.1.1 dediğimizde Arduino modemden ip adresi alamaz. Modem havuzumuzun ne olduğunu öğrenmek için bilgisayarımızın ağ bağlantısına sağ tıklayıp Ağ ve paylaşım merkezinden bağlı olduğumuz ağa tıklıyoruz ve ayrıntıya tıklıyoruz.

Bağlantıları doğru yaptıysak, doğru adresi verdiysek ve yukarıda verdiğim kodu yüklediyseniz browsera 192.168.1.199 yazdığımızda. Aşağıdaki sayfayı görebiliriz.

Bir Cevap Yazın

Your email address will not be published. Required fields are marked *