internetten arduino kontrolü [ÇÖZÜLDÜ]

iyi günler arkadaşlar, Bitirme projesi olarak internetten kontrol edilebilen ev otomasyonu aldım. Projeyi ilk başta PIC ile yapmayı düşünsem de internete bağlanma olayının PIC de çok sıkıntı oluşturmasından ve arduinoda bulunan hazır modüllerin sağlayacağı kolaylıktan dolayı arduino ile yapmaya karar verdim. Kitaplardan ve internetten bir hafta boyunca arduino nasıl çalışır nasıl programlanır bunlarla ilgilendim devreler kurdum. Zaten PIC ile haşır neşir olduğumdan olayı baya çözdüm ama bazı konularda yardımınızı istiyorum Devre hem internetten hemde bir kontrol panelinden kontrol eldilecek. Kontrol paneli yapabilmem için görsellik açısından bir tane lcd bağlamam şart. Bu yüzden arduino uno nun digital giriş çıkış sayısı yetmez diye projeyi arduino mega ile başladım. Belki uno ile kontrol sistemini yapıp PIC ile röle, motor sürme gibi işlemleri yaparak uno kartını da kullanabilirim. https://github.com/ctasdemir/ArduinoUygulamalari/blob/master/Bölüm-4%20Arduino%20ve%20İnternet/Örnek5/WebSunucu/WebSunucu.ino Kafamda bir sürü soru var bunları cevaplayan olursa çok sevinirim :slight_smile: Bu kodları karta attıktan sonra karta verdiğim ip adresini tarayıcıya yazdığımda sayfa açılmıyor. Ethernet modülüm wiznet5100 ethernet kablosu karta takılı. Nerede hata yapıyor olabilirim ? Buraya kadar olan yeri çalıştırabilsem kodlar üzerinde oynama yaparak lcd de bağlarım giriş çıkış sayısını da çoğaltırım. Bu kodları çalıştırabilmek için devre ile bilsayar aynı modeme bağlı olması gerekiyor ? Ayrıca kartı istediğim yerden kontrol etmek veya bu programı çalıştrıbilmem için modemde port mu açmam gerekiyor ? https://github.com/ctasdemir/ArduinoUygulamalari/blob/master/Bölüm-4%20Arduino%20ve%20İnternet/Örnek6/SunucuKomutlaKontrol/SunucuKomutlaKontrol.ino Bu örnekteki gibi telnet istemcisi ile kontrol etmek için ne gibi adımlar izlemem lazım ? Yine port açmam gerekiyor mu ? Sonuç olarak coşkun beyin kitabını baştan aşşağıya okudum ama kodları çalıştıramadım. Bu konuda bilgisi, fikkri, deneyimi olan arkadaşlar varsa yardımcı olurlarsa çok memnun olurum. Şimdiden çok teşekkür ediyorum.

Bu örneklerden önceki örnekleri sırayla çalıştırdın mı? Modemden IP alıyor musun? Bilgisayarın lokal ip’si ile Arduino aynı lokal ip’de mi (yani 192.168.2.XXX gibi) Önce kartın ip almasını ve kartın ip’sine ping atabilmeyi denemelisin. Dışarıdan erişmek için modeminden Ethernet kartının ipsine dışarıdan port açma ve yönlendirme yapman lazım.

kitabınızdaki arduino ile ilgili örneklerin çoğunluğunu çalıştırdım. modemden ip almadım hocam bu konuda bir eksiklik var. ip leri aynı yapmadım çakışırlar diye. arduinoya da ip yi programda verdim static uint8_t ip = { 192, 168, 1, 9 }; eğer bahsettiğiniz bu ise. port açma ve yönlendirmeyi denedim kontrol ettiğimde açılmamış görünüyor. onunla ilgili biraz daha araştırma yapacam ping atma konusunda hiçbir bilgim yok onu da araştırırım port olarak modeme ne vermeliyim modem: ZXV10 W300 ethernet kartın ip sini ve mac adresini nasıl öğrenebilirim veya sadece programda atama yapılarak mı olur ? kafamda bu tip sorular var ve birkaç gündür ethernet ile uğraştığım için henüz tam çözemedim. aslında kitabınızda da kodun çalıştırılması için gereken aşamalara fazla değinmediğiniz için bu konulara hiç kafa yormadım ve kodları derleyip karta atınca çalışacağını düşündüm. sonuç olarak bu takıldığım noktalardaki önemli gördüğünüz soruları veya izleyeceğim adımları söylerseniz en azından doğru şeyleri araştırıyor olurum.

Anladığım kadarıyla önceki ethernet örneklerini yapmadın doğrudan bu örneğe başladın? Adım adım başlamaktan kastım ethernetle ilgili örnekleri adım adım yapmaktı. Önce şunu öğrenelim, lokal ağda bilgisayarının ip’si nedir? Şimdilik port açmayı felan boşver. Önce kartının ip aldığından emin olmalısın ondan sonra diğer adımlara geçersin.

modemimin varsayılan ağ geçidi 192.168.2.1 bilgisayarımın ip si 192.168.2.4. programda arduino ya static uint8_t ip = { 192, 168, 1, 9 }; komutu ile bu ip yi atamaya çalıştım

aynen dediğiniz gibi hocam ip alma kısmını atlamışım

hocam websunucuya kadarki örneklerin hepsini yaptım dinamik ve statik ip yi sorunsuz alıyor, google de arama yapabiliyorum

hocam bu arada şunu yeni fark ettim; evde birtane ethernet kablosu var bunu da arduinoya bağlıyorum bilgisayarı internete wifi den bağlıyorum. bilgisayardan modem arayüzüne wifi den erişmeye çalışınca erişemiyorum bağlantı yapamıyor. acaba wifi üzerinden olduğu için mi bağlanmıyor arduinoya ?

Bilgisayarın ip’si 192.168.2.4. ise arduino’ya da 192.168.2.X gibi bir IP Vermen lazım 92.168.1.9 olmaz. Bir de nasıl deneme yapıyorsun? Putty kullanarak mı? Arduino’nun IP aldığından emin olduktan sonra bilgisayarında komut satırından “ping 192.168.2.5” komutuyla ping atıp cevap alabilmen lazım

hocam aynen dediğim gibi kablosuzdan bağlandığım için bu sorun oluşuyormuş. arada birde router var sorunu o çıkarıyor yüksek ihtimal herneyse, şimdi port açma konusunda ufak bir iki bilgi verirseniz mesela 80 ci port modemden modeme değişiyor mu gibi projeyi birkaçgün içinde bitiririm

port açtıktan sonra istediğim yerden arduinoyu kontrol edebilir miyim ?

hocam tam olarak çalıştırdım internet üzerinden erişimi sağladım teşekkür ederim

Rica ederim.

hocam yine bir sorum olacak size, sizin webserver örneğinizdeki dijital çıkış sayısını istediğim gibi arttırabiliyorum ve sensör değerini de yazabiliryorum buraya kadar bir sıkıntı yok. şimdi yapmak istediğim şey pwm sinyali ile aydınlatmayı kontrol etmek. bunun için siteye arttır ve azalt diye 2 link ekleyip bunları değişkene atayıp bir pwm sinyalinin doluluk oranında kullanacağım. linkleri ekledim ama değişkende bir değişiklik yapamıyorum. sizin kitabınıdaki komut alma fonksiyonlarını aynen kullandım galiba orada bir hata var yardımcı olursanız sevinirim. kodlar;

/* Arduino ile Basit bir Web Sunucusu */ include “SPI.h” include “Ethernet.h” include “WebServer.h” define LED1 8 define LED2 9 define LED3 7 int pwm; static uint8_t mac = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; boolean LED1Durum = false; boolean LED2Durum = false; boolean LED3Durum = false; static uint8_t ip = { 192, 168, 2, 177 }; /* Bir webserver nesnesi oluşturuyoruz. Bütün gelen dosya istekleri kök dizin olarak görülmesi için önek bölümünü boş bırakıyoruz. Bütün istekler http://webserver-adresi/dosya-adi şeklinde gelecek. */ define ONEK “” WebServer webserver(ONEK, 80); /* Ana sayfa isteği geldiğinde çağırılacak fonksiyon */ void anaSayfa(WebServer &server, WebServer::ConnectionType baglantiTipi, char *, bool) { server.httpSuccess(); if (baglantiTipi != WebServer::HEAD) { LEDdurumlariniGoster(server); } } void pwmarttirKomut(WebServer &server, WebServer::ConnectionType type, char *, bool) { server.httpSuccess(); if (type != WebServer::HEAD) { pwm=pwm+1; LEDdurumlariniGoster(server); } } void pwmazaltKomut(WebServer &server, WebServer::ConnectionType type, char *, bool) { server.httpSuccess(); if (type != WebServer::HEAD) { pwm=pwm-1; LEDdurumlariniGoster(server); } } void led1AcKomut(WebServer &server, WebServer::ConnectionType type, char *, bool) { server.httpSuccess(); if (type != WebServer::HEAD) { digitalWrite(LED1,HIGH); LEDdurumlariniGoster(server); } } void led1KapatKomut(WebServer &server, WebServer::ConnectionType type, char *, bool) { server.httpSuccess(); if (type != WebServer::HEAD) { digitalWrite(LED1,LOW); LEDdurumlariniGoster(server); } } void led2AcKomut(WebServer &server, WebServer::ConnectionType type, char *, bool) { server.httpSuccess(); if (type != WebServer::HEAD) { digitalWrite(LED2,HIGH); LEDdurumlariniGoster(server); } } void led2KapatKomut(WebServer &server, WebServer::ConnectionType type, char * , bool) { server.httpSuccess(); if (type != WebServer::HEAD) { digitalWrite(LED2,LOW); LEDdurumlariniGoster(server); } } void led3AcKomut(WebServer &server, WebServer::ConnectionType type, char *, bool) { server.httpSuccess(); if (type != WebServer::HEAD) { digitalWrite(LED3,HIGH); LEDdurumlariniGoster(server); } } void led3KapatKomut(WebServer &server, WebServer::ConnectionType type, char * , bool) { server.httpSuccess(); if (type != WebServer::HEAD) { digitalWrite(LED3,LOW); LEDdurumlariniGoster(server); } } void LEDdurumlariniGoster(WebServer &server) { /* P() makrosu ile string’leri RAM yerine program belleğine kaydedebiliyoruz. Server’a gönderirken de printP() fonksiyonunu kullanıyoruz */ P(htmlHead) = “” "

" “Arduino Web Sunucusu” “” “”; server.printP(htmlHead); /* LED’lerin durumlarını yazdırıyoruz ve açma / kapama işlemleri için linkleri yazdırıyoruz */ server.println(“arttır”); server.println(“azalt”); server.println(pwm); server.print("

LED1:

“); if(digitalRead(LED1)) { server.print(“AÇIK”); server.println(“KAPAT”); } else { server.print(“KAPALI”); server.println(“”); } server.print(”

LED2:

“); if(digitalRead(LED2)) { server.println(“AÇIK”); server.println(“KAPAT”); } else { server.println(“KAPALI”); server.println(“”); } server.print(”

LED3:

"); if(digitalRead(LED3)) { server.print(“AÇIK”); server.println(“KAPAT”); } else { server.print(“KAPALI”); server.println(“”); } } void setup() { // LED Pinlerini çıkış olarak ayarlıyoruz pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); /* IP ve MAC adresi ile ethernet bağlantısını başlatıyoruz */ Ethernet.begin(mac, ip); /* Web sunucuya gelen isteklere göre çağırılacak fonksiyonları listeye ekliyoruz */ /* Varsayılan istek */ webserver.setDefaultCommand(&anaSayfa); /* ana sayfa isteği geldiğinde */ webserver.addCommand(“index.html”, &anaSayfa); /* Diğer istekler */ webserver.addCommand(“led1Ac”, &led1AcKomut); webserver.addCommand(“led1Kapat”, &led1KapatKomut); webserver.addCommand(“led2Ac”, &led2AcKomut); webserver.addCommand(“led2Kapat”, &led2KapatKomut); webserver.addCommand(“led3Ac”, &led3AcKomut); webserver.addCommand(“led3Kapat”, &led3KapatKomut); webserver.addCommand(“pwmarttır”, &pwmarttirKomut); webserver.addCommand(“pwmazalt”, &pwmazaltKomut); /* Sunucuyu başlatıyoruz */ webserver.begin(); } void loop() { char webserver_tampon[64]; int boyut = 64; /* Sürekli olarak gelen istekleri işliyoruz */ webserver.processConnection(webserver_tampon, &boyut); }

veya sadece kodların bir kısmını şu şekilde değiştirdim yine çalışmadı. void pwmarttirKomut(WebServer &server, WebServer::ConnectionType type, char *, bool) { server.httpSuccess(); if (type != WebServer::HEAD) { Serial.print(‘a’); LEDdurumlariniGoster(server); } } void pwmazaltKomut(WebServer &server, WebServer::ConnectionType type, char *, bool) { server.httpSuccess(); if (type != WebServer::HEAD) { Serial.print(‘b’); LEDdurumlariniGoster(server); yani anlatmaya çalıştığım ve yardım istediğim şey led yak söndür yerine arduinoya başka birşeyler yaptırmaya çalıştım yine olmadı. görebildiğiniz bir hatam var mı hocam ?

Komutları yazınca ilgili fonksiyonlara girmiyor mu? LED1yak vs… onlar çalışıyor mu?

robot kolu yapın o daha kolay led yakmak daha zor (tecrübeyle sabit, bunca senedir forumda etherneti çalıştıranı görmedim yani mevcut led orneklerıne bir led ekleyebılenı ve bunu web sayfasına ekleyebılenı goremedık maşşalah)

led fonksiyonlarına giriyor fakar pwmarttır ve pwmazalt fonksiyonları çalışmımıyor. linke tıklarıdğğımda hata mesajı veriyor.

led eklemede ve sıcaklık değieri yazdırmada bir sorun yok ama başka bir komut işletemedim. mesela pwm arttır linkine tıkladıkdan sonra hiçbirşey yapmasa bile anasayfaya dönmesi lazım anasayfaya da dönmüyor. hata sayfasına yönlendirip orada kalıyor.