Arduino Web Server Yapımı – Arduino Uzaktan Kontrol

Arduino Web Server Yapımı – Arduino Uzaktan Kontrol

3 Nisan 2019 0 Yazar: Onur Cici

Web sunucusu

Bu örnekte, basit bir Web sunucusu oluşturmak için Ethernet Kalkanınızı ve Arduino veya Genuino kartınızı kullanacaksınız. Ethernet kütüphanesini kullanarak, cihazınız Ethernet kalkanınızla bir HTTP isteğini cevaplayabilecektir. Bir tarayıcı açtıktan ve Ethernet kalkanı IP adresinize gittikten sonra, Arduino’nuz bir tarayıcının giriş değerlerini altı analog pimin hepsinden göstermesine yetecek kadar HTML ile cevap verecektir.

Donanım gerekli

Devre

Ethernet kalkanı, WIZNet Ethernet denetleyicisini Arduino veya Genuino kartlarına SPI veri yolu üzerinden bağlamanıza izin verir . Ethernet denetleyici yongasına SPI bağlantısı için yonga seçimi olarak ICSP başlık pimlerini ve 10 pimini kullanır. Ethernet kalkanının sonraki modellerinde ayrıca bir SD Kart bulunur. Dijital pin 4, SD karttaki slave select pinini kontrol etmek için kullanılır.

Kalkan bir ağa Ethernet kablosu ile bağlanmalıdır. Programdaki ağ ayarlarını, ağınıza uygun olacak şekilde değiştirmeniz gerekecektir.

Yukarıdaki resimde, Arduino veya Genuino kartı Ethernet ekranının altına istiflenmiş olacaktı.

Şematik

Uyarı

Bu örnek bir SD kart gerektirmez. Bir SD kart takılı ancak kullanılmıyorsa, eskizin asılması uygundur, çünkü pin 4 SD’nin SS (aktif düşük) değeri olarak kullanılır ve kullanılmadığında varsayılan olarak INPUT olarak yapılandırılır. İki olası çözüm:

  • SD kartı çıkarın;
  • Kur’a bu kod satırlarını ekleyin ()
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);

Kod

/*
  Web Server


 Analog giriş pinlerinin değerini gösteren basit bir web sunucusu. 
 bir Arduino Wiznet Ethernet kalkanı kullanarak. 

 Devre: 
 pimleri 10, 11, 12, 13 tutturulmuş * Ethernet kalkanı 
 (opsiyonel) ile A5 pimleri A0 bağlı * Analog girişler 

 18 Ara 2009 yarattı 
 David A. Mellis tarafından 
 9 Nis 2012 modifiye 
 Tom Igoe tarafından 
 
 Onur Cici tarafından 
 */

#include <SPI.h>
#include <Ethernet.h>

// Aşağıya kontrolörünüz için bir MAC adresi ve IP adresi girin. 
// IP adresi yerel ağınıza bağlı olacaktır: 
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);

// Ethernet sunucusu kütüphanesini 
// kullanmak istediğiniz IP adresi ve portu ile başlatınız 
// (port 80, HTTP için varsayılandır):
EthernetServer server(80);

void setup() {
 // CS pinini yapılandırmak için Ethernet.init (pin) kullanabilirsiniz 
  //Ethernet.init(10); // Çoğu Arduino kalkanı
  //Ethernet.init(5); // MKR ETH kalkanı 
  //Ethernet.init(0); // Teensy 2.0 
  //Ethernet.init(20); // Teensy ++ 2.0 
  //Ethernet.init(15); // ESP8266 Adafruit Featherwing Ethernet ile birlikte 
  //Ethernet.init(33); // Adafruit Featherwing Ethernet ile ESP32 

  // Seri haberleşmeleri açın ve portun açılmasını bekleyin: 
  Serial.begin(9600);
  while (!Serial) {
    ; // seri portun bağlanmasını bekleyin. Sadece yerel USB portu için gereklidir 
  }
  Serial.println("Ethernet WebServer Example");

// Ethernet bağlantısını ve sunucuyu başlat:
  Ethernet.begin(mac, ip);

  
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // hiçbir şey yapma, Ethernet donanımı olmadan çalışan hiçbir nokta yok }
  }
  if (Ethernet.linkStatus() == LinkOFF) {
    Serial.println("Ethernet cable is not connected.");
  }

  // start the server
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  //gelen istekleri bekle 
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    
    bool currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // satırın sonuna ulaştıysanız (yeni bir satır aldı 
        // karakter) ve satır boşsa, http isteği sona erdi, 

        if (c == '\n' && currentLineIsBlank) {
          
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  
          client.println("Refresh: 5");  
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          
          currentLineIsBlank = true;
        } else if (c != '\r') {
          
          currentLineIsBlank = false;
        }
      }
    }
   
    delay(1);
   
    client.stop();
    Serial.println("client disconnected");
  }
}