Arduino – Esp8266 – Wifi üzerinden Cep Telefonu ile Kontrol hakkında detaylara yer vereceğiz.
ESP 8266 wifi modülü ile internete bağlanabildiğimiz gibi lokal server olarak ta kullanabilmekteyiz. ESP 8266 arduino ile wifi bağlantı şeması ve ilk ayarlarının nasıl yapıldığını aşağıdaki önceki yazılarımızdan öğrenebilirsiniz.
ESP8266 BAĞLANTI ŞEMASI VE DİĞER AYARLARI İÇİN BU YAZIMIZA BAKABİLİRSİNİZ
Esp 8266 ile wifi modem aracılığıyla ayda doğrudan cep telefonu aracılığıyla haberleşme mümkündür.
Wifi modem aracılığıyla Lokal web server kurulumu yaparak arduinoyu kontrol etmek mümkündür.
Cep telefonu/tablet aracılılığıyla esp8266 ya doğrudan bağlanabilir uygulama ile arduinoyu kontrol edebilirsiniz.
Bu yazımızda Lokal web server olarak kullanma ve Remotexy ile kontrolün nasıl yapılabileceğiniz açıklayacağız.
Lokal web server olarak kullanmak için arduino kodlarınızı doğrudan kendiniz yazmanız gerekmektedir.
şemadaki bağlantıları yaptıysanız artık kolama kısmına geçebiliriz.
//Görsel İşitsel Teknoloji Kanalı //wwww.teknikerler.com //Kerim Arı Youtube kanalı ESP8266 WEB Server Kodları - kullanımı örnek Kodları #include <SoftwareSerial.h> String agAdi="WİFİ ADINIZ"; //Bağlanılacak modeme ait Ağ adı ve Şifresi String agSifresi="WİFİ ŞİFRENİZ"; #define DEBUG true // Gelen cevapları yazdırmak için kullandığımız değişken SoftwareSerial esp8266(10,11); //TX,RX pin tanımlaması yapıldı #define kirmizi 5 void setup() { pinMode(kirmizi,OUTPUT); Serial.begin(9600); esp8266.begin(9600); // 115200 esp modülü haberleşmesi başlatıldı //esp.println("AT+UART_DEF=9600,8,1,0,0"); // bu satır eğerki esp modülünüz -115200- ise bir defa çalıştırılır ve 9600 yapılmış olur wifi_baglan(); } void loop(){ if(esp8266.available()) //Modülün herhangi bir mesaj gönderip göndermediğini kontrol ettik { if(esp8266.find("+IPD,")) { delay(500); int baglantiId = esp8266.read()-48; // Neden -48 çünkü ASCII kodlarında 0 48. karakterden başlıyor. // Basit WEB sayfası Oluşturduk String websayfa = "HTTP/1.1 200 OK\r\n Content-Type: text/html\r\n\r\n\r\n"; websayfa += "<h1>GiT Web Server Kurulumu</h1>"; websayfa += "<head> Arduino ve ESP01 ile Led Kontrol </head>"; websayfa += "<form method=\"get\" action=\"/led-ac\">"; websayfa += "<button type=\"submit\">LED AC</button></form>"; websayfa += "<form method=\"get\" action=\"/led-kapat\">"; websayfa += "<button type=\"submit\">LED KAPAT</button></form>\r\n\r\n"; String gitSend = "AT+CIPSEND="; gitSend += baglantiId; gitSend += ","; gitSend +=websayfa.length(); gitSend +="\r\n"; bilgi_Gonder(gitSend,500,DEBUG); bilgi_Gonder(websayfa,500,DEBUG); int pin5 = digitalRead(kirmizi); // Bilgi geri okuma String gelen = "LED DURUMU : \r\n\r\n\r\n"; if (pin5 == 1) {gelen += " ACIK";} // Led durumunu web sayfasına AÇIK olarak yazdırdık if (pin5 == 0) {gelen += " KAPALI";} //Led durumunu web sayfasına KAPALI olarak yazdırdık gitSend = "AT+CIPSEND="; gitSend += baglantiId; gitSend += ","; gitSend += gelen.length(); gitSend +="\r\n"; bilgi_Gonder(gitSend,500,DEBUG); bilgi_Gonder(gelen,500,DEBUG); // Bağlantıyı Kapattık String baglanti_kapat = "AT+CIPCLOSE="; baglanti_kapat+=baglantiId; baglanti_kapat+="\r\n"; bilgi_Gonder(baglanti_kapat,500,DEBUG); } } } // Sunuvuya Veri gönderme işlemi String bilgi_Gonder(String command, const int timeout, boolean debug){ String response = ""; esp8266.print(command); // Komut bilgilerini sunucuya gönderdik long int time = millis(); while( (time+timeout) > millis()) { while(esp8266.available()) { // Bir yanıt, sunucuya dönen veriler gider. char c = esp8266.read(); //Karakter karakter okuduk response+=c; // Sunucuya dönen bilgilerde hangi verinin olup olmadığını kontrol ettik // Gelen "GET /led-ac" veya "GET /led-kapat" //Arduino'daki LED i açar veya kapatır if(response.indexOf("GET /led-ac") >0){ // Serial.print("led-ac"); digitalWrite(kirmizi,HIGH); } if(response.indexOf("GET /led-kapat") >0){ //Serial.print("led-kapat"); digitalWrite(kirmizi,LOW); } } } if(debug) { Serial.print(response); } return response; } ////wifi bağlantısı kuruyoruz void wifi_baglan(){ bilgi_Gonder("AT+RST\r\n",2000,DEBUG); //ESP8266 modülünü resetledik String baglan = "AT+CWJAP="+agAdi+","+agSifresi+"\r\n"; bilgi_Gonder(baglan, 2000, DEBUG); //WiFi ağına bağlanalım. delay(5000); //Yönlendiriciye bağlanması için biraz bekledik bilgi_Gonder("AT+CWMODE=3\r\n",1000,DEBUG); //ESP8266 WiFi mode 1 (istasyon) çünkü evin wifi ağına bağlanacağız. bilgi_Gonder("AT+CIFSR\r\n",1000,DEBUG); //ESP'nin IP adresini öğrendik bilgi_Gonder("AT+CIPMUX=1\r\n",1000,DEBUG); //Birden çok bağlantıya izin verdik. bilgi_Gonder("AT+CIPSERVER=1,80\r\n",1000,DEBUG); //80 portu üzerinden iletişim kurduk }
Detaylar için aşağıdaki linkten videoyu izleyebilirsiniz.
ESP8266 kullanarak cep telefonu üzerinden kontrol sağlamak için Remotexy web sitesi kullanılabilir.
Cep telefonu üzerinden yapmış olduğumuz örnek kodlar aşağıdaki gibidir.
//Görsel İşitsel Teknoloji Kanalı //wwww.teknikerler.com //Kerim Arı Youtube kanalı ESP8266 WEB Server Kodları - kullanımı örnek Kodları /* -- butonlar -- This source code of graphical user interface has been generated automatically by RemoteXY editor. To compile this code using RemoteXY library 3.1.8 or later version download by link http://remotexy.com/en/library/ To connect using RemoteXY mobile app by link http://remotexy.com/en/download/ - for ANDROID 4.11.1 or later version; - for iOS 1.9.1 or later version; This source code is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. */ ////////////////////////////////////////////// // RemoteXY include library // ////////////////////////////////////////////// // RemoteXY select connection mode and include library #define REMOTEXY_MODE__ESP8266_SOFTSERIAL_POINT #include <SoftwareSerial.h> #include <RemoteXY.h> // RemoteXY connection settings #define REMOTEXY_SERIAL_RX 10 #define REMOTEXY_SERIAL_TX 11 #define REMOTEXY_SERIAL_SPEED 9600 #define REMOTEXY_WIFI_SSID "GiT_ESP8266" #define REMOTEXY_WIFI_PASSWORD "12345678" #define REMOTEXY_SERVER_PORT 6377 // RemoteXY configurate #pragma pack(push, 1) uint8_t RemoteXY_CONF[] = // 91 bytes { 255,4,0,0,0,84,0,16,166,1,2,0,4,9,22,11,8,175,16,31, 65,195,135,73,75,0,75,65,80,65,76,73,0,2,0,34,9,22,11,8, 94,94,16,83,65,82,73,0,75,65,80,65,76,73,0,10,48,23,33,15, 15,134,117,31,65,195,135,73,75,0,31,75,65,80,65,76,73,0,1,0, 21,60,19,19,1,31,65,99,105,108,0 }; // this structure defines all the variables and events of your control interface struct { // input variables uint8_t switch_1; // =1 if switch ON and =0 if OFF uint8_t switch_2; // =1 if switch ON and =0 if OFF uint8_t pushSwitch_1; // =1 if state is ON, else =0 uint8_t button_1; // =1 if button pressed, else =0 // other variable uint8_t connect_flag; // =1 if wire connected, else =0 } RemoteXY; #pragma pack(pop) ///////////////////////////////////////////// // END RemoteXY include // ///////////////////////////////////////////// #define PIN_SWITCH_1 2 #define PIN_SWITCH_2 3 #define PIN_PUSHSWITCH_1 4 #define PIN_BUTTON_1 5 void setup() { RemoteXY_Init (); pinMode (PIN_SWITCH_1, OUTPUT); pinMode (PIN_SWITCH_2, OUTPUT); pinMode (PIN_PUSHSWITCH_1, OUTPUT); pinMode (PIN_BUTTON_1, OUTPUT); // TODO you setup code } void loop() { RemoteXY_Handler (); digitalWrite(PIN_SWITCH_1, (RemoteXY.switch_1==0)?LOW:HIGH); digitalWrite(PIN_SWITCH_2, (RemoteXY.switch_2==0)?LOW:HIGH); digitalWrite(PIN_PUSHSWITCH_1, (RemoteXY.pushSwitch_1==0)?LOW:HIGH); digitalWrite(PIN_BUTTON_1, (RemoteXY.button_1==0)?LOW:HIGH); // TODO you loop code // use the RemoteXY structure for data transfer // do not call delay() }Videoyu İzlemek İçin Tıklayınız