Arduino ve ENC28J60 Ethernet Modülü Uygulamaları-1: No-ip.com

Arduino için ucuz bir internet çözümü olan ENC28J60 Ethernet Modüllünden bahsetmiştim daha önceki bir yazımda. Bu yazımda ise webserver ve web otomasyon sistemleriyle uğraşanlar için büyük bir engel oluşturan sabit ip sorununa, no-ip.com aracılığıyla geliştirilen bir çözümü anlatmaya çalışacağım.

Arduino ve ENC28J60 ethernet modülü kullanarak kurduğumuz webservera sabit bir ip adresine sahip değilseniz yalnızca yerel ağ üzerinden ulaşılabilir. Bu da doğrudan internet üzerinden kontrol etmemizi engeller ve pratikteki kullanımı epey kısıtlar.

Öncelikle no-ip.com üzerinden ücretsiz bir hesap oluşturacağız. Daha sonra hesabımız içerisinde oluşturacağımız bir hostu kullanarak değişen ip adresimizi bu host, Arduino ve ENC28J60 ethernet modülü aracılığıyla her değiştiğinde güncelleyip ücretsiz sabit ip’imize kavuşacağız.

İlk adım olarak bu bağlantıyı kullanarak no-ip.com üzerinde ücretsiz bir hesap oluşturuyoruz. Üye olup oturum açtıktan sonra da bu bağlantıyı kullanarak host oluşturma sayfasına geliyoruz. Kullanmak istediğinz host ismini yazdıktan sonra diğer seçimleri aşağıdaki resimdeki gibi yapıp “Create Host” diyerek hostumuzu oluşturuyoruz. (Ip Address kısmında sayfayı açtığınızda kendi ip adresiniz gelecek, sistemin çalışmasını test edebilmek için orayı aşağıdaki gibi değiştiriyoruz.) Host ismimizi, no-ip.com‘a kayıt olurken belirlediğimiz kullanıcı adımız ve şifremizi bir kenara not ediyoruz.

Güncelleme yapılacak hostumuzu oluşturduk. ENC28J60 Ethernet Modülü ve Arduino yazımdaki bağlantı şemasını kullanarak Arduino ve ENC28J60 Ethernet Modülü arası bağlantıları kuruyoruz. Daha sonra aşağıdaki bağlantılardan ulaşabileceğini EtherCard kütüphanesini yüklüyoruz. (EtherCard klasörünü Arduino>libraries klasörüne kopyalıyoruz.)

Arduino’ya yükleyeceğimiz programda bize 2 parametre gerekiyor. Birincisi oluşturduğumuz host adresi, diğeri ise no-ip.com‘a kayıt olurken kullandığımız kullanıcı adı ve şifrenin base64 şeklinde şifrelenmiş hali. Bu bağlantıyı kullanarak şifrelemeyi yapıyoruz. (Kullanıcı adı ve şifre arasına : koymayı unutmayın!) Resut kısmındaki şifrelenmiş veriyi de bir kenara not ediyoruz.

Bu basamaktan sonra gerekli tüm verileri ve dosyaları edindik. Şimdi aşağıda paylaştığım programı kartımıza yüklüyoruz. Programdaki satırları elimden geldiğince anlatmaya çalıştım. Özetle program her dakika ip adresinizi ve no-ip.com hostunuzda kayıtlı ip adresini tespit ediyor. Güncel ip adresiniz no-ip.com hostundakinden farklıysa, no-ip üzerindeki ip adresini güncel ip adresinizle değiştiriyor. Böylelikle host adresimizi kullanarak modülün ip adresini internet üzerinden takip edebilir konuma geliyoruz.

Bu bağlantıyı kullanarak örnek programı indirebilirsiniz. Sistemin çalışabilmesi için programda aşağıdaki resimde kırmızı kutu içerisine alınmış kısmı bularak değişkenleri daha önce not aldığımız verilerle değiştirmemiz gerekiyor. Bir de serial monitörü açınca baud rate’i 57600 olarak seçmemiz gerekiyor yazıların görüntülenebilmesi için.

Daha sonraki bir yazımda, 192.168.1.2 gibi bir yerel ip adresini kullanarak webserver oluşturacağız. Bu webserver ile bu yazıda anlattığım no-ip.com uygulamasını birleştireceğiz. Modem ayarlarından yerel ip adresimizi HTTP WebServer olarak yönlendirip Arduino webserver‘ımıza sadece host adresimizi kullanarak her yerden erişebileceğiz.

Tüm bunları yapınca ne işimize yarayacak diye düşünüyorsanız açıklayayım. Bu işlemler sonucunda analog ve dijital girişlerdeki değerleri internet üzerinden görebilir, programlarınızda akışı yönlendiren değişkenleri internet üzerinden değiştirebilir, dijital çıkışları doğrudan internet üzerinden kontrol edebilirsiniz. Arduino ile Röle Kontrolü yazısında anlattığım şekilde röle devreleri hazırlayıp sisteme ekleyerek kendi akıllı ev sisteminizi hazırlayabilirsiniz.

İyi çalışmalar…

Gerekli Olabilecek Bağlantılar:

İsmail

Üniversite öğrencisi, Arduino meraklısı.

15 comments

  1. Coşkun Taşdemir dedi ki:

    Güzel bir yazı olmuş İsmail emeğine sağlık.

  2. Mehmey dedi ki:

    Harika konu hocam webserver uygulamanızı sabırsızlıkla bekliyorum,hayırlı çalışmalar.

  3. İsmail Buçgün dedi ki:

    Teşekkür ederim. Hazır aslında webserver uygulaması, toparlayıp, test edip en kısa sürede yayınlayacağım.

  4. Ali Civil dedi ki:

    Ellerine sağlık gerçekten çok güzzel çalışma yapmışsın. üniversite öğrencisi olarak bitirme projem internet üzerinden motor kontrolüydü. tamda ihtiyacım olan bilgiler burada 🙂

  5. huzeyfe dedi ki:

    Elinize sağlık
    ben programı derlediğimde aşağıdaki hataları aldım.Sorunun ne olduğu konusunda yardımcı olurmusunuz ?

    Ethernet.h:39: error: ‘EthernetClass Ethernet’ redeclared as different kind of symbol
    enc28j60.h:44: error: previous declaration of ‘typedef class ENC28J60 Ethernet’

  6. huzeyfe dedi ki:

    Merhaba

    Projeyi aynen sizin dediğiniz gibi uyguluyorum ancak aşağıdaki hataları alıyorum sürekli

    no_ip_com_ornek_program:46: error: function definition does not declare parameters
    no_ip_com_ornek_program:54: error: ‘Stash’ does not name a type
    no_ip_com_ornek_program.ino: In function ‘void setup()’:
    no_ip_com_ornek_program:71: error: ‘ether’ was not declared in this scope
    no_ip_com_ornek_program:71: error: ‘Ethernet’ has not been declared
    no_ip_com_ornek_program:80: error: ‘ether’ was not declared in this scope
    no_ip_com_ornek_program:87: error: ‘ether’ was not declared in this scope
    no_ip_com_ornek_program.ino: In function ‘void loop()’:
    no_ip_com_ornek_program:121: error: ‘ether’ was not declared in this scope
    no_ip_com_ornek_program.ino: In function ‘void checkPublicIP()’:
    no_ip_com_ornek_program:146: error: ‘Stash’ has not been declared
    no_ip_com_ornek_program:148: error: ‘ether’ was not declared in this scope
    no_ip_com_ornek_program.ino: In function ‘void checkPublicIPResponse()’:
    no_ip_com_ornek_program:164: error: ‘ether’ was not declared in this scope
    no_ip_com_ornek_program.ino: In function ‘void updateNoIP()’:
    no_ip_com_ornek_program:232: error: ‘Stash’ has not been declared
    no_ip_com_ornek_program:237: error: ‘ether’ was not declared in this scope
    no_ip_com_ornek_program.ino: In function ‘void checkNoIPResponse()’:
    no_ip_com_ornek_program:249: error: ‘ether’ was not declared in this scope

  7. fikret öcal dedi ki:

    selamlar.uygulamalarınızı takip ediyorum ne zamandır ilgilendiğim bir projeydi.sonuca ulaştırdım sizinde yazılarınızın yardımı ile.no-ip ile ip güncelleme işlemleri,modemden port yönlendirme işlemleri ve web serverıma uzaktan erişme işlemlerini yaptım.mega 2560 kullandıgım için verdiğiniz bağlantı ve kodda ufak değişiklikler gerekti.eğer siteye yazı ekleyebiliyorsam bu bilgiler ışığında bir yazı ekleyebilirim.selamlar.

  8. alperen dedi ki:

    İsmail abi sen acaba marmarada mı okuyosun

  9. hasan dedi ki:

    Merhaba arkadaşlar
    @İsmail Buçgün yazı çok faydalı olmuş elinize sağlık . ama bazı hatalar vardı kodları denedinizmi acaba ?
    hataları düzeltince sorunsuz derleme yaptı gerçi karta yükleyip denemedim ama büyük ihtimalle çalışır.

    hata1: ether.printIp(“Netmask:\t”, ether.netmask); bu satır “ether.mymask” olarak yazılmış doğrusu ether.netmask olacak
    hata2. bazı değişkenlerin başına “const” eklenmemiş. eklerseniz hatalar düzelir.

  10. Akın dedi ki:

    Merhaba,
    İşlemleri aynen uyguladım fakat şöyle bir hata aldım ve düzeltemiyorum. Yardımcı olursanız sevinirim.
    variable ‘noIP_host’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

  11. kudret dedi ki:

    merhabalar herşey doğru arduino ve ethernet modulu bağlı ancak ip adresini girince modemin arayüzüne giriş yapıyor . nasıl yapmalyım ki ethernet ile haberleşeceğim sayfa gelsin yardımcı olur musunuz

E-posta adresiniz gösterilmeyecek. Gerekli alanlar * ile işaretlidir.

*



Sosyal Ağlar