kostenloser Webspace werbefrei: lima-city


Arduino Ethernet Server & Client

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    ravathyra

    Kostenloser Webspace von ravathyra

    ravathyra hat kostenlosen Webspace.

    Hej ( :
    Ich habe vor mit einem Arduino + Ethernet Shield einen Webserver zu hosten und gleichzeitig Daten vom Arduino an ein seperaten Webserver zu schicken.

    Ich wollte erstmal wissen ob es überhaupt möglich ist einen Webserver und Client gleichzeitig zu hosten. Ich habe das schonmal gegoogled und bin auf ein Script gestoßen

    //zoomkat 12-08-11, combined client and server
    //simple button GET with iframe code
    //for use with IDE 1.0
    //open serial monitor and send an g to test client and
    //see what the arduino client/server receives
    //web page buttons make pin 4 high/low
    //use the \ slash to escape the " in the html 
    //address will look like http://192.168.1.102:84 when submited
    //for use with W5100 based ethernet shields
    
    
    #include <SPI.h>
    #include <Ethernet.h>
    
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
    IPAddress ip(192,168,1,102); // ip in lan
    IPAddress myserver(208,104,2,86); // zoomkat web page
    EthernetServer server(84); //server port
    EthernetClient client;
    String readString; 
    
    //////////////////////
    
    void setup(){
    
      pinMode(4, OUTPUT); //pin selected to control
      Ethernet.begin(mac, ip); 
      server.begin();
      Serial.begin(9600); 
      Serial.println("server/client 1.0 test 12/08/11"); // keep track of what is loaded
      Serial.println("Send an g in serial monitor to test client"); // what to do to test client
    }
    
    void loop(){
      // check for serial input
      if (Serial.available() > 0) 
      {
        byte inChar;
        inChar = Serial.read();
        if(inChar == 'g')
        {
          sendGET(); // call sendGET function
        }
      }  
    
      EthernetClient client = server.available();
      if (client) {
        while (client.connected()) {
          if (client.available()) {
            char c = client.read();
    
            //read char by char HTTP request
            if (readString.length() < 100) {
    
              //store characters to string 
              readString += c; 
              //Serial.print(c);
            } 
    
            //if HTTP request has ended
            if (c == '\n') {
    
              ///////////////
              Serial.println(readString); //print to serial monitor for debuging 
    
                //now output HTML data header
              if(readString.indexOf('?') >=0) { //don't send new page
                client.println("HTTP/1.1 204 Zoomkat");
                client.println();
                client.println();  
              }
              else {
                client.println("HTTP/1.1 200 OK"); //send new page
                client.println("Content-Type: text/html");
                client.println();
    
                client.println("<HTML>");
                client.println("<HEAD>");
                client.println("<TITLE>Arduino GET test page</TITLE>");
                client.println("</HEAD>");
                client.println("<BODY>");
    
                client.println("<H1>Zoomkat's simple Arduino 1.0 button</H1>");
    
                client.println("<a href=\"/?on\" target=\"inlineframe\">ON</a>"); 
                client.println("<a href=\"/?off\" target=\"inlineframe\">OFF</a>"); 
    
                //client.println("<IFRAME name=inlineframe src=\"res://D:/WINDOWS/dnserror.htm\" width=1 height=1\">");
                client.println("<IFRAME name=inlineframe style=\"display:none\" >");          
                client.println("</IFRAME>");
    
                client.println("</BODY>");
                client.println("</HTML>");
              }
    
              delay(1);
              //stopping client
              client.stop();
    
              ///////////////////// control arduino pin
              if(readString.indexOf("on") >0)//checks for on
              {
                digitalWrite(4, HIGH);    // set pin 4 high
                Serial.println("Led On");
              }
              if(readString.indexOf("off") >0)//checks for off
              {
                digitalWrite(4, LOW);    // set pin 4 low
                Serial.println("Led Off");
              }
              //clearing string for next read
              readString="";
    
            }
          }
        }
      }
    } 
    
    //////////////////////////
    void sendGET() //client function to send/receie GET request data.
    {
      if (client.connect(myserver, 80)) {
        Serial.println("connected");
        client.println("GET /~shb/arduino.txt HTTP/1.0");
        client.println();
      } 
      else {
        Serial.println("connection failed");
        Serial.println();
      }
    
      while(client.connected() && !client.available()) delay(1); //waits for data
      while (client.connected() || client.available()) { //connected or data available
        char c = client.read();
        Serial.print(c);
      }
    
      Serial.println();
      Serial.println("disconnecting.");
      Serial.println("==================");
      Serial.println();
      client.stop();
    
    }


    Das ist jetzt mein jetztiger Quellcode:

    /*-------------------------Bindet Librarys ein-------------------------*/
    #include <Ethernet.h>
    #include <SPI.h>
    #include <math.h>
    /*---------------------------------------------------------------------*/
    
    
    /*----------------------Deklarierung vom Ethernet----------------------*/
    byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x1C, 0xFA };  // MAC-ADRESSE eingeben!
    byte ip[]  = { 192, 168, 178, 102 };                    // IP-Adresse eingeben!
    byte server[] = {192,168,178,23};                      // IP des Servers eingeben
    EthernetClient client;
    char host[] = "dreamworkindustries.tk";	// DOMAIN eingeben!
    char url[]  = "/dreamworkindustries/arduino_push_data.php";	// Pfad zur PHP-Datei eingeben
    char key[] = "***";	// Kennwort aus arduino_push_data.php   -Datei eingeben
    char c;
    /*---------------------------------------------------------------------*/
    
    
    
    int wartezeit =10000;       // Wartezeit zwischen messungen, IMMER 1 sec weniger angeben (59 für 60 usw...)
    float temperatur =0; //Variable zum Zwischenspeichern der Temperatur
    float TEMP;
    
    
    
    /*--------------------------------Setup--------------------------------*/
    void setup()
    {
    
      Serial.begin(9600);			// für Debug-Ausgaben
      Serial.println("Programm gestartet...");
      Ethernet.begin(mac, ip);  
      delay(5000);				// warten, bis LAN gestartet
    }
    /*--------------------------------Loop---------------------------------*/
    void loop()
    {
    /*---------------------------Temperatur--------------------------------*/
      temperatur = temp(analogRead(0));
      Serial.println(temperatur);
      delay(1000);
    /*---------------------------------------------------------------------*/  
    
    
    /*---------------------Verbindung zum Internet-------------------------*/
        Sensor_lesen();
        Daten_senden();
        delay(900);
    
      if (client.available()) 
      {
        char c = client.read();
        Serial.print(c);
      }
      delay(wartezeit);     // Upload alle 60 sec. immer 1 sec weniger eintragen!
        client.stop();
        client.flush();
    }
    /*---------------------------------------------------------------------*/
    
    
    
    /*----------------------------Sensor Lesen-----------------------------*/
    void Sensor_lesen()
    {
      TEMP = temperatur; 
    }
    
    
    /*---------------------------Daten senden---------------------------*/
    void Daten_senden()
    {
      if(client.connect(server, 80)>0)  // Verbindung zum Server aufbauen
      {
        Serial.print("Verbunden...sende Daten...");
        client.print("GET ");
        client.print(url);
       
       
        //ab hier meine sachen
        client.print("?TEMP=");
        client.print(TEMP);
    
        client.print("&key=");
        client.print(key);
        client.println(" HTTP/1.1");
        client.print("Host: ");
        client.println(host);
        client.println();
        Serial.println("fertig!");
      }
      else
      {
        Serial.println(" ***** VERBINDUNGSAUFBAU NICHT MOEGLICH *****");
      }    
    }
    /*---------------------------------------------------------------------*/
    
    
    /*-------------------------Temperatur berechnen-------------------------*/
    float temp(int rawadc)
    // Hilfsfunktion zur Umrechnung auf Grad Celsius
    {
      int r1 = 47000; // Wert des Festen Wiederstandes des sabbungsteiler
      int r2 = 47000; // Wiederstand des Thermristors bei 25grad
      int b = 4473;  // Fixwert aus Datenblatt
      float r_akt; // Aktueller Wiederstand
      float temp; //Temporäre Variable
      float ergebnis; //
      float tn = 25; //Basistemperatur in Grad Celsius
      // Wiederstand Therm ausrechnen
      //Widerstand auf Temperatur umrechnen
      tn = tn+273.15; // Basitemperatur auf Kelvin umrechnen
      r_akt = ((4.64/(4.64/1023*rawadc))*r1)-r2; //Aktuellen Widerstand ermitteln
      temp = b*tn/(b+log10((r_akt/r2))*tn);
      temp = temp - 273.15; //Ergebnis in Grad Celsius umwandeln
      ergebnis =temp;
      return ergebnis;
    }
    /*---------------------------------------------------------------------*/


    Das ist mein jetztiger Script. Der ließt die Temperatur aus einen Temperatursensor aus und schickt ihn an meinen Webserver. Kann ich jetzt dazu noch einen Webserver hosten, mitden ich z.B. LEDs durch Buttons aus und an mache ?

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. j**********i

    Da ich mir nicht sicher bin ob es eine einfache Prozedur gibt die Daten von Servern herunterläd, würde ich dir empfehlen die Buttons so zu gestalten, dass bei einem Klick die Werte in einer neuen PHP geändert werden.
    Beispiel:
    button.php --> hier deine buttons einbinden
    leds.php --> 3 zeilen mit werten von 0 bis eins für Led (Zeile) an/aus

    und die php lädst du runter und verarbeitest sie so, dass du die daten die du kriegst an die LED bringst...

    leider kann ich dir keinen guten Quelltext liefern, da ich mit C noch nie so etwas gemacht, habe...
  4. Am Beispiel von "zoomkat" kannst du sehen, dass es grundsätzlich möglich ist, Server und Client gleichzeitig laufen zu lassen, insbesondere wenn der Client du gelegentlich sich verbindet, weil in genau dem Moment der Server nicht funktioniert.

    Daher ein Tipp: Nimm die "delay"s raus:
    delay... if (client.available())

    ersetzen durch "while(!client.available)" , also warten bis der client verfügbar ist, sodass du auch wirklich nur solange wartest, wie es auch erforderlich ist.
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!