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.

    • Ömer Koman dedi ki:

      toplamda arduino yazılarını 3 e tamamlarsanız mümkün olabilir 🙂 kolay gelsin

  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