ARDUINO PROĞRAMLAMA

tarafından
1711
ARDUINO PROĞRAMLAMA

ARDUINO NANO İLE LED ÇALIŞTIRILMASI

Arkadaşlar eğer sizin için uygun ise reklamlara bir kez tıklayarak bana destek olabilirsiniz.Şimdiden sizlere teşekkür ederim.

//==========ARDUINO 12 NOLU UÇA BAĞLI OLAN LEDİN  ÇALIŞTIRILMASI==========

int led=12;//ledin bağlı olduğu pin ucu
void setup() {
pinMode(led,OUTPUT);// arduino 12 nolu ucun çıkış olarak atanması
}
void loop()
digitalWrite(led,HIGH);// 12 nolu uç aktif edildi(yani 5V çıkış alındı)
delay(1000);// 1 saniye bekleme süresi verildi.
digitalWrite(led,LOW);// 12 nolu uç pasif yapıldı.(yani 0V çıkış alındı)
delay(1000);//1 saniye bekleme süresi verildi.
}
/*BU KOD İLE ARDUINO 12 NOLU PİNE BAĞLI OLAN LED 1 SANİYE YANACAK ve 1 SANİYE SÖNÜK KALACAKTIR.12 NOLU UCA BAĞLANACAK LEDİN RENGİNE GÖRE ÇALIŞACAĞI VOLTAJ DEĞERİ BELİRLENİP, ONA GÖRE DİRENÇ DEĞERİ İLE BAĞLANTI SAĞLANACAKTIR. BU KOD  PARLAK KIRMIZI LED  VE 100 OHM DİRENÇ KULLANILMIŞTIR.
BU KODDA ARDUINO NANO KULLANILMIŞTIR. AYNI KOD AYNI BAĞLANTI NOKTASI İLE ARDUINO UNO İÇİNDE GEÇERLİDİR.*/
PROTEUS ISIS ÜZERİNDE SİMÜLASYONU

ARDUINO NANO İLE LED FLAŞÖR

int led=12;//ledin bağlı olduğu pin ucu
int led1=11;// led in baglı oldugu uç

void setup() {

pinMode(led,OUTPUT);// arduino 12 nolu ucun çıkış olarak atanması
pinMode(led1,OUTPUT);// arduino 11 nolu ucun çıkış olarak atanması
}

void loop() {
digitalWrite(led,HIGH);//12 nolu pine bağlı led yanar.
delay(200);                          //200 ms bekleme süresi verildi.
digitalWrite(led,LOW);//12 nolu pine bağlı led söner.
delay(1);                              //1ms bekleme süresi verildi.
digitalWrite(led1,HIGH);//11 nolu pine bağlı led yanar.
delay(200);                            //200 ms bekleme süresi verildi.
digitalWrite(led1,LOW);//11 nolu pine bağlı led söner.
delay(1);                                //1ms bekleme süresi verildi.
}

/*BU KOD İLE 11 VE 12 NOLU PİNLERE BAĞLI LEDLER SIRASI İLE YANIP SÖNECEKTİR. 12 NOLU PİNE BAĞLI LED 200 ms YANACAK DAHA SONRA SÖNECEKTİR. 1ms SONRA 11 NOLU PİNE BAĞLI LED 200 ms YANACAK DAHA SONRA SÖNECEKTİR. 1ms SONRA TEKRAR DÖNGÜ BAŞA DÖNECEĞİNDEN 12 NOLU PİNE BAĞLI LED YANACAKTIR. BU BÖYLE SONSUZ DÖNGÜ ŞEKLİNDE SÜREKLİ TEKRAR EDECEKTİR. BEN BURADA LEDLERİ DOĞRUDAN  BAĞLADIM. SİMÜLASYON OLDUĞU İÇİN BİR SIKINTI OLMUYOR. GERÇEK DEVREDE LED ÇALIŞMA VOLTAJINA GÖRE DİRENÇ DEGERİ İLE PİNLERE BAĞLANTI YAPILMALIDIR.*/
PROTEUS İSİS ÜZERİNDE SİMÜLASYONU

ESP8266 FIRMWARE GÜNCELLEMESİ

Öncelikle belli metotlarla güncelleme yaparken aşağıdaki hatayı aldım. Daha sonra esptool ile başarılı bir şekilde güncelleme yapmayı başardım. Eğer sizde aşağıdaki gibi bir hata mesajı alırsanız gösterdiğim yöntemi deneyebilirsiniz. Hata mesajı sadece 74800 baud hızında anlamlı bir şekilde gözlemlenmektedir.

Arduino IDE Üzerinden Alınan Hata

Öncelikle bilgisayarınıza python kurulu olmalıdır. Bu linkten gerekli adımları takip ederek kurulum gerçekleştirebilirsiniz. Daha sonra komut satırı(cmd) açılır ve aşağıdaki şekilde kurulumu kontrol edebilirsiniz.

python
Python Kurulum Kontrolü

ctrl+d ile çıkış yapabilirsiniz. Firmware güncellemesi için aşağıdaki modüllü kullandım.

esp8266 usb modül ile ilgili görsel sonucu
Esp8266 Usb Modül

Esp8266 modül ok(modül üzerinde var)yönünde anten kısmı usb başlığının üzerine denk gelecek şekilde bağlantı sağlanır.
Bu modül kullanılmadan da arduino üzerinden gerekli bağlantılar sağlanarak işlemler yapılabilir.

Daha sonra buradan gerekli araçlar indirilerek masaüstüne alınır. İndirilen dosya içerisine at komutları için buradan indireceğiniz firmware dosyası atılır ve ismi aşağıdaki şekilde düzenlenir Aradaki boşluk karakterleri “_” ifadesi ile değiştirilir.
“v0.9.2.2_AT_Firmware.bin”

Sonra cmd üzerinden aşağıdaki adımlar uygulanır.

NOT: Bağladığınız modülün bağlı olduğu Port adresini bilmelisiniz. Bilgisayarım sağ tıklanarak yönet seçeneği üzerinden aşağıda belirtilen görseldeki gibi bulabilirsiniz.

Port Adresi Bulunması

NOT: Usb modül ile programlama yapılacağından ötürü modül üzerinden esp8266 modülünün bağlı olduğu GND ve IO0 pini birbiri ile bağlanmalıdır. Esp8266 IO0 pini lojik “0” yapıldığında programlama moduna geçmektedir. Bu işlem yapıldıktan sonra modül bilgisayara bağlanmalıdır. Bu işlemden sonra aşağıdaki adımlar uygulanır.

cd Desktop
cd esptool-master
python esptool.py --port COM3 erase_flash
Flash Silinmesi

Bu işlemden sonra modül USB den çıkarılıp tekrar takılmalıdır. Sonra aşağıdaki komut çalıştırılır.

python esptool.py --port COM3 write_flash -fs 1MB -fm dout 0x0 v0.9.2.2_AT_Firmware.bin
Esp Firmware Güncellemesi

Bu işlemden sonra modül bilgisayardan çıkarılıp GND ve IO0 pini ayrılarak tekrar takılır ve arduino ide üzerinden kontrol sağlanır.
NOT: Bu güncelleme ile Baud hızı 9600 olarak gelmektedir. Arduino IDE üzerinden seri port ekranı baud hızı 9600 olacak şekilde ayarlanmalıdır.

Arduino IDE Üzerinden Kontrol
AT Komutlarının Denenmesi

ARDUINO VE ESP8266 İLE WEBSERVER UYGULAMASI

Aşağıdaki anlatımda esp8266 wi-fi modül ile arduino uno ile birlikte kullanılarak web server uygulaması anlatılacaktır. Uygulama da arduino üzerindeki 13 nolu pine bağlı ledin yanıp sönmesi sağlanacaktır.

Arduino ve esp8266 modül bağlantısını aşağıdaki gibi yapınız.

Arduino ve ESP8266 Wi-fi Modül Bağlantısı
//=================================================ESP8266 WEB SERVER UYGULAMASI LED KONTROL==============================================
#include <SoftwareSerial.h>
#define DEBUG true
 
SoftwareSerial esp8266(2,3); //2 yazılımsal RX , 3 yazılımsal TX pinini işaret eder. Esp8266 bağlanırken,
               //TX pini Arduino 2 nolu pine, RX pini Arduino 3 nolu pinine bağlanır.

//====================================================HAZIRLIK AŞAMASI=====================================================================
void setup()
{
  pinMode(13, OUTPUT); //Arduino üzerindeki led çıkış olarak ayarlanır.
  digitalWrite(13,LOW); //Led söndürülmesi sağlanır.
  Serial.begin(9600);  // Seri iletişim 9600 baud hızında başlatılır.
  esp8266.begin(9600); // Yazılımsal seri iletişim 9600 baud hızında başlatılır.
  sendData("AT+RST\r\n",2000,DEBUG); // AT komutu ile esp8266 tekrar başlatılır.
  sendData("AT+CWMODE=2\r\n",1000,DEBUG); // Bu komutla esp8266 wifi dağıtıcısı konumundadır. Wifi üzerinden esp8266'ya bağlantı sağlanır.
  sendData("AT+CIFSR\r\n",1000,DEBUG); // Bu komut ile esp8266 ip adresi öğrenilir.
  sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // Bu komut ile esp8266 üzerine birden çok bağlantı sağlanır.
  sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // 80 portu üzeründen yayın yapması sağlanır. 
}
//=================================================KONTROL VE WEB SAYFASI KISIMLARI========================================================
void loop()
{
  if(esp8266.available()) // bağlantı durumu kontrol edilir. 
  {
 
    if(esp8266.find("+IPD,")) // ESP8266 data okunduğuna dair bilginin bulunmasına bakılır.
    {
     delay(1000);
     int connectionId = esp8266.read()-48; // Okunan değer ASCII değerlerdir. Bu Değerden 48 çıkarılarak decimal değer elde edilir.
     String websayfasi = "<head> WEB SERVER UYGULAMASI </head>";
     websayfasi += "<br><a href=\" ?pin=on\"><button type='button'>LED ON</button></a>"; 
     websayfasi += "<br><a href=\" ?pin=off\"><button type='button'>LED OFF</button></a>";
     String cipSend = "AT+CIPSEND="; // Veri gönderilmesi için esp8266'ya komut gönderilir.AT+CIPSEND ile veriler gönderilmeye başlanır.
     cipSend += connectionId; //Yukarıdaki connection id değişkene eklenir.
     cipSend += ","; // Eklenen değerler arasına "," konulur.
     cipSend +=websayfasi.length(); //websayfasi değişkeni uzunluğu eklenir.
     cipSend +="\r\n"; //Bir alt satıra geçer.
     sendData(cipSend,1000,DEBUG); //Veri esp8266 ya gönderilir.
     sendData(websayfasi,1000,DEBUG); //Veri esp8266 ya gönderilir.
     String balantiSonlandirma = "AT+CIPCLOSE="; //Bağlantının sonlanması için AT+CIPCLOSE komutu bağlantı sonlandırma komutuna eklenir.
     balantiSonlandirma +=connectionId; // Bağlantı sonlanması için connection id bilgisi değişkene eklenri..
     balantiSonlandirma+="\r\n";
     sendData(balantiSonlandirma,3000,DEBUG);
    }
  }
}

String sendData(String command, const int timeout, boolean debug) // veri gönderme fonksiyonu
{
    String response = "";
    esp8266.print(command); // send the read character to the esp8266
    long int time = millis();
    while( (time+timeout) > millis())
    {
      while(esp8266.available())
      {
        char c = esp8266.read();//ESP8266 üzerinden veriler c icerisine yazılır.
        response+=c; //response değişkenine c içerisindeki veriler eklenir.
      }  
    }
    
    if(debug)
    {
      Serial.print(response); //Veriler seriport ekranına yazılır.
      if((response.indexOf(":GET /?pin=on")>1)){  //on butonuna basıldığında server adresinde /?pin=on var ise
      digitalWrite(13,HIGH);                  //ledi yakar
      }
     if((response.indexOf(":GET /?pin=off")>1)){ // off butonuna basıldığında server adresinde /?pin=off var ise
     digitalWrite(13,LOW);                    //ledi söndürür
      }
    }
    
    return response; 
}

Yukarıdaki komutlar arduino’ya yüklendikten sonra bağlantı sağlamak için ip adresinin bilinmesi gerekir. Bu nedenle arduino idesi üzerinden seri port ekranı açılarak ip adresi alınır.

Ip Adresinin Alınması

Ip adresi alındıktan sonra tarayıcı ile esp8266 modülüne wifi aracılığı ile bağlantı sağlanır ve tarayıcıya aşağıdaki şekilde ip adresi yazılır.

http://192.168.4.1
Web Serverin Açılması

Yukarıdaki şekilde butonlara tıklandığında arduino üzerinde 13 nolu pine bağlı led’in yanıp sönmesi sağlanacaktır.

NODEMCU WEBSERVER UYGULAMASI VE ANDROID APPLICATION

Aşağıdaki anlatımda NodeMCU V3 tümleşik kartı üzerinde led kontrolü yapılacaktır. İki adet led bağlantısı yapılarak kontrolü android uygulaması üzerinden ve web tarayıcısı üzerinden yapılacaktır. Anlatımda bahsi geçen ledler;
Yeşil Led: D1 bağlantı ucuna,
Kırmızı Led: D2 bağlantı ucuna bağlantı yapılacaktır.

NodeMCU Üzerinde Led Bağlantıları

Devre üzerine gerekli bağlantılar sağlandıktan sonra Arduino IDE si üzerinden aşağıdaki kod ile ilgili devre kartının proğramlanması sağlanır.

#include <ESP8266WiFi.h>
//==============================================DEFINITIONS========================================================
const char* ssid     = "----------"; // Please write your wifi connection name
const char* password = "----------"; // Please write your wifi password
WiFiServer server(80);// This command open number of port 80, you connect nodenmcu web server with this port number
String header; // This command definition variable for html command
int greenled = D1; //Variable of green led. You should connect green led with this pin
int redled = D2; //Variable of red led. You should connect red led with this pin
String greenstate = "off";// Definition State of Green Led
String redstate = "off";// Definition State of Red Led
//==============================================SETUPS========================================================
void setup() {
  Serial.begin(9600);
  pinMode(greenled, OUTPUT); // Set this port output
  pinMode(redled, OUTPUT); // Set this port output
  digitalWrite(greenled, LOW); // Set state of port low
  digitalWrite(redled, LOW); // Set state of port low
  WiFi.begin(ssid, password); //This command connet to your wifi
  Serial.print("Connecting to ");
  Serial.println(ssid);
  while (WiFi.status() != WL_CONNECTED) { //waits until it is connected and write "."
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());// This command show ip address in arduino serial editor. You will connect with this ip address to webserver interface
  server.begin();
}
//==============================================CODES========================================================
void loop(){
  WiFiClient client = server.available();   // This command listen for incoming clients
  if (client) {                             // If a new client connects,
    String currentLine = "";                // This variable is set up for connected users
    while (client.connected()) {            // If user connects this loop start working
      if (client.available()) {             // If there's bytes to read from the client,
        char c = client.read();             // This comand register to read value
        Serial.write(c);                    // Print character on Serial Monitor
        header += c;
        if (c == '\n') {                    
          if (currentLine.length() == 0) {
			//Below commands give information for client. If clinent connects with success turn http OK code.
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            //Below commands decide for reads variable.
			if (header.indexOf("GET /green/on") >= 0) {
              Serial.println("green on");
              greenstate = "on";
              digitalWrite(greenled, HIGH);
            } else if (header.indexOf("GET /green/off") >= 0) {
              Serial.println("green off");
              greenstate = "off";
              digitalWrite(greenled, LOW);
            } else if (header.indexOf("GET /red/on") >= 0) {
              Serial.println("red on");
              redstate = "on";
              digitalWrite(redled, HIGH);
            } else if (header.indexOf("GET /red/off") >= 0) {
              Serial.println("red off");
              redstate = "off";
              digitalWrite(redled, LOW);
            }
       
            // Belows command shows html page.
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS to style the ON and OFF buttons 
            // With below commands you can change style of buttons your prefers.
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button {border-radius: 50px; background-color: #4CAF50; border: none; border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none;display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer;}");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");           
            client.println(".button1 { background-color: #4CAF50;border-radius: 50px;}");
            client.println(".button2 { background-color: #555555;border-radius: 50px;}");
            client.println(".button3 { background-color: #f44336;border-radius: 50px;}");
            client.println(".button4 { background-color: #555555;border-radius: 50px;}</style></head>");
			// Web Page Heading
            client.println("<body><h1>NodeMCU V3 WEB SERVER</h1>");            
            // Below commands shows State of green led. 
            client.println("<p>GREEN - STATE: " + greenstate + "</p>");
            // If state of green led is off, on button fills green, off button fills gray.       
            if (greenstate == "off") {
              client.println("<a href=\"/green/on\"><button class=\"button\">ON</button></a>");
              client.println("<button class=\"button button2\">OFF</button>");
			} else {
              client.println("<button class=\"button button2\">ON</button>");
              client.println("<a href=\"/green/off\"><button class=\"button button1\">OFF</button></a>");
			} 
           
            client.println("<p>RED - STATE: " + redstate + "</p>");
            // If state of red led is off, on button fills red, off button fills gray.       
            if (redstate == "off") {
              client.println("<a href=\"/red/on\"><button class=\"button button3\">ON</button></a>");
              client.println("<button class=\"button button4\">OFF</button>");
            } else {
              client.println("<button class=\"button button4\">ON</button>");
			  client.println("<a href=\"/red/off\"><button class=\"button button3\">OFF</button></a>");
            }
			  client.println("<p style=font-family:'Courier New'>Version 1.0</p>");
              client.println("</body></html>");
				client.println();
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
		} else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
    }    
    header = "";
    client.stop();// Close connection
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

NOT:Eğer Arduino Ide’si üzerinde NodeMCU kart programlama eklentisi yok ise eklenerek yukarıdaki kod bloğu ile kartın proğramlanması sağlanır. Eğer NodeMCU eklentisi yok ise aşağıdaki şekilde arduino IDE si üzerine yüklenmesi sağlanır.

Dosya —-> Tercihler sekmesi tıklanarak aşağıdaki link girilerek eklenti yüklenmesi sağlanır.

http://arduino.esp8266.com/stable/package_esp8266com_index.json
Arduino IDE’si Üzerinde Eklenti Ayarları
Arduino IDE’si Üzerinde Eklenti Ayarları

Bu adımlardan sonra ilgili kodların kart üzerine yüklenmesi sağlanır. Yükleme ayarlarını yapmak için aşağıdaki adımlar takip edilir.

Kart Seçimi Yapılması

Daha sonra kart içerisine yüklenmesi yapılarak seri port ekranı üzerinden IP adresi alınarak bağlantı denemesi yapılır.
NOT: Proğramlama yapmadan önce wifi bilgilerini kod içerisine girmeyi unutmayınız.

IP Adresinin Alınması

Şimdi aldığımız IP adresi ile tarayıcı üzerinden bağlantı sağlayalım.

Web Sayfasının Açılması

Yapılan WEB Server uygulaması için android uygulaması kaynak kodlarını bu adresten bulabilirsiniz. Uygulamanın çalışması esnasındaki görsel aşağıdaki gibidir.

Android Uygulaması Çalışma Görüntüsü

NOT: VAKİT BULDUKÇA YAZMAYA DEVAM EDECEĞİM. BİLGİNİZE SUNARIM….