Go Down

Topic: wie richte ich einen Webserver mit Buttons ein??? HILFE :-( (Read 1 time) previous topic - next topic

Tobias93

Hallo,

ich möchte gerne folgendes Projekt verwirklichen:
Ein Codeschloss mit Keypad und LCD Display. Das ist soweit auch alles schon funktionsfähig. Nun möchte ich mittels Eathernet Shield per Webseite auf den Arduino zugreifen und zum Beispiel sehen, ist die Tür aktuell geöffnet, wann war sie das letzte mal auf,... auch soll die Tür über einen Button auf der Webseite fern geöffnet werden. Die ganze Webseite soll natürlich noch Kennwortgeschützt sein.

Keypad und LCD Display funktionieren - mit Webserver ect. habe ich noch NIE gearbeitet, daher bin ich sehr dankbar für INFOS´s, Tutorials, Beispiel Codes, eigene Projektbeschreibungen, ect...

Vielen Dank schonmal im vorraus,

viele Grüße Tobias
Nobody is perfect but - impossible is nothing

Trib

Hallo Tobias93,

wo hast du denn schon überall selbst nach den Informationen gesucht?
Das Forum ist voll davon:
Tür Öffner - RFID, Bluetooth und Ethernet
   
Temperaturdaten (mit DS1820) von Arduino über Ethernet an FHEM übermitteln ?!
In Weiser Voraussicht schonmal das hier:
Mega 2560 + Ethernet Shield + LCD Shield
Und zu guter Letzt:
Funkschalter in Webserver einbinden

Damit solltest du alle nötigen Informationen haben um dein Projekt realisieren zu können.

Gruß,
trib

circuit99

Wenn das ganze halbwegs sicher sein soll brauchst du https zur Datenübertragung. Das ist meines Wissens mit mit dem Arduino nicht möglich. Ich denke bei deinem Projekt fährst du mit z.B. einem Raspberry Pi deutlich besser. Da hast du ei komplettes Linux was dir alle gängigen Serverdienste liefert. Und im Preis/Leistungsverhältnis ist der  Raspberry Pi doch deutlich besser als ein Mega + Ethernet Shield. Wenn du Doch zum Arduino Tendiers achte darauf, dass das Ethernet Shield einem W5100 und nicht mit einem enc28j60 ausgestattet ist.

Trib


Wenn das ganze halbwegs sicher sein soll brauchst du https zur Datenübertragung. Das ist meines Wissens mit mit dem Arduino nicht möglich.


Das möchte ich mit einem eindeutigen "Jein" beantworten.
Natürlich kann man seine eigenen Sicherheitsfeatures implementieren und diese auch so dynamisch gestalten, dass im Falle eines mitlesenden Dritten, aus den Daten kein Rückschluss auf die "Verschlüsselung" oder den Sicherheitskey gezogen werden kann.
Das erfordert natürlich ein bisschen Arbeit und wird nie 100%ig sicher sein.

Da das EthernetShield hinter einem Router hängen wird, kann man diesen natürlich auch ein bisschen Arbeit abnehmen lassen. Je nach Modell ist es dort möglich einige Sicherheitsfeatures für den Fernzugriff einzurichten.
Schlussendlich muss aber erstmal jemand die Adresse herausfinden, das Potential dahinter entdecken, die Verschlüsselung knacken, den Befehl an den Arduino herausfinden und dann noch wissen wo auf der Welt diese Tür überhaupt ist.

Um "nur" einen Türöffner zu bauen finde ich den Raspberry Pi etwas zu überdimensioniert.

Schlussendlich wäre ich natürlich sehr vorsichtig so einen Türöffner zu programmieren, halte es aber nicht für grundsätzlich unsicher.

COOL

Hallo Tobias,
zum Testen könnte vielleicht das erst einmal reichen

Code: [Select]
/*
  Web Server

A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)

created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe

*/

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

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,178, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
// Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
                    // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // output the value of each analog input pin
          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') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}


Gruß Gerd

Go Up