Go Down

Topic: Ethernet Shield: Arduino über Website steuern? (Read 17 times) previous topic - next topic

janwil

Hallo,
ich habe am WE mein Ethernet-Shield bekommen und kann es auch als Webserver nutzen.
Aber eigentlich möchte ich einen Button auf meiner Homepage haben und damit eine Aktion auf dem Arduino starten.

Also Web-->Eingabe-->Arduino liest das aus--> Arduino setzt bspw. einen Pin HIGH

Wer kann mir hierzu einen Hinweis geben? Ich finde kein passendes Tutorial.

Gruß
Jan

Poldi

Guten Morgen Jan, Moin Forum ;-)

Manchmal braucht man nur Glück! Schau mal, was ich gestern Abend gemacht habe:

http://web27.server43.campusspeicher.de/wordpress/2010/08/10/arduino-als-webserver/#more-210

Hoffe es hilft Dir weiter!

Bei Fragen einfach hier oder auf meiner Webseite schreiben!

Gruß
Poldi

Webmeister

Ein recht cooles Beispiel welches für viele Anwendungen verwendet werden kann.

Zu beachten dabei ist nur, dass man im Browser direkt die Website auf dem Arduino aufruft. Möchte man über Internet die Ausgänge des Arduino-Boards schalten, muss entweder der Arduino-Webserver im Internet verfügbar sein oder eine zusätzliche Anwendung macht die Verbindung zwischen Internet-Server und dem Arduino-Board.

Poldi

Hallo Webmeister,

vielen Dank für die richtige Ergänzung.

In Verbindung mit dem kostenlosen Dienst DynDNS und entsprechenden Einstellungen meiner Fritzbox, war dies nur eine kleine Hürde.

Aber richtig, sie besteht ;-)

Gruß
Poldi

janwil

Hi,
das scheint genau das zu sein, was ich machen will.
Fritzbox und dyndns funktionieren ja schon.
Jetzt nur noch 2 mal arbeiten und dann werde ich mir mal den Code am WE genauer ansehen und anpassen - danke dafür

Viele Grüße

Jan

Poldi


janwil

Hallo und danke nochmal,

du hast mir eine Menge grübeln erspart ;-)
Ich glaube, du musst den Code noch neu verlinken...

Aber jetzt zu dem, was ich gemacht habe: http://tinyurl.com/36yy8dq
Man kann meinen M&M-Spender, den ich mittels eines Servos über das Arduino automatisiert habe nun direkt von meiner Homepage aus steuern.
Er wirft bis zu 15 Smarties in der Stunde aus, danach ist erstmal Diät angesagt ;-)

Viele Grüße
Jan

ponzelar

Hallo, janwill hat Recht, der Link zum Code geht ins Leere. Ich würde gerne auf der vorhandenen Arbeit aufbauen, wenn ich denn darf. Das Thema steht für den kommenden Winter auf dem Programm.
Gruß ponzelar

Poldi

Hallo zusammen,

stimmt! Auch hier hat sich leider der Link geändert. Hätte ich gleich dran denken können  :-[

Nun stimmt er wieder.

Gruß
Poldi


Berry07

Hallo Poldi,

ich habe Dein Beispiel hier im Forum gefunden und gleich ausprobiert, Änderungen wegen neuer Arduino-Version0021 vorgenommen und klappt wunderbar. Aber wehe, ich nehme eine Änderung vor, dann spinnt das HTML Ergebnis im Firefox.
Ich sitze seit zwei Tagen dran und habe mein Problem jetzt einkreisen können, weiß aber nicht weiter. Ich hoffe, Du kannst mein Hirn auf Trapp bringen.
Ich wollte zwei weitere Ausgänge hinzufügen und das HTML-Script lief nicht mehr. Ich habe zuletzt alle font, color, size anderen Zusätze rausgenommen und es ging. Also wollte wissen, was es ist.

Dann habe ich in Deinem Code die Zeile "Client.println(??Ausgänge schalten??..)" komplett kopiert und direkt darunter eingefügt. Klappt super, Firefox zeigt zweimal die Zeile und alles funktioniert, dann habe ich in der neuen Zeile nur das Wort "Test" vor "Ausgänge schalten" gesetzt, also "TestAusgänge schalten" und die Buttons machen nichts mehr??
Schreibe ich aber stattdessen das "Test" in der Originalzeile vor "Ausgände schalten", geht alles????
Ich glaube, ich spinne -- ich kriegs nicht raus. Bitte HILF!!!

Gruß Andreas

Arduino0021, seeeduino 326, Ethernet-Shield neueste Version von Watterott, WinXP, Firefox 3.6.13

PS:

Es hat mir keine Ruhe gelassen und ich habe eine lauffähige Version Deines Webservers hinbekommen.
Ich habe alles, was mit Font, Farbe und Größe zu tun hatte, im HTML-Teil rausgeschmissen und siehe da, es funktioniert stabil. Den Grund, woran es aber lag, habe ich nicht herausgefunden.
Laut "de.selfhtml.org" ist der FONT-Befehl
eine der "schlimmsten Verunreinigung von HTML" ?? Vielleicht kann ein HTML-Programmierer mal etwas dazu
sagen. Anscheinend hat es daran gelegen!?!?

Liebe Grüße von Andreas

Und hier noch der Code
Code: [Select]

/*   Hallo Poldi,
Hier also meine Version.
Gruß Andreas
*/

#include <SPI.h>  // insert by Katsu
// #include <WString.h> removed by Katsu
#include <Ethernet.h>


byte mac[] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24 };  // entspricht einer MAC von 84.85.88.16.0.36
byte ip[]  = { 192, 168, 0, 99 };                  // IP-Adresse
byte gateway[] = { 192, 168, 0, 1 };                // Gateway
byte subnet[]  = { 255, 255, 255, 0 };

Server server(80);

int Pin3 = 3;
int Pin4 = 4;
int Pin5 = 5;
int Pin6 = 6;

String readString = String(100);      // string for fetching data from address
boolean Pin3ON = false;                  // Status flag
boolean Pin4ON = false;
boolean Pin5ON = false;                  // Status flag
boolean Pin6ON = false;


void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
pinMode(Pin3, OUTPUT);
pinMode(Pin4, OUTPUT);
pinMode(Pin5, OUTPUT);
pinMode(Pin6, OUTPUT);

Serial.begin(9600); }

void loop(){

// Create a client connection
Client 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.append(c);  removed by Katsu
readString = readString + c; // insert by Katsu
// very simple but it works...
}

Serial.print(c);  //output chars to serial port

if (c == '\n') {  //if HTTP request has ended

// readString.contains() replaced with readString.indexOf(val) > -1  by Katsu
// indexOf locates a character or String within another String.
// Returns the index of val within the String, or -1 if not found.
if(readString.indexOf("3=ein") > -1) {
digitalWrite(Pin3, HIGH);
Serial.println("Pin 3 eingeschaltet!");
Pin3ON = true;
}
if(readString.indexOf("3=aus") > -1){
digitalWrite(Pin3, LOW);
Serial.println("Pin 3 ausgeschaltet!");
Pin3ON = false;
}
if(readString.indexOf("4=ein") > -1) {
digitalWrite(Pin4, HIGH);
Serial.println("Pin 4 eingeschaltet!");
Pin4ON = true;
}
if(readString.indexOf("4=aus") > -1){
digitalWrite(Pin4, LOW);
Serial.println("Pin 4 ausgeschaltet!");
Pin4ON = false;
}
///////////

if(readString.indexOf("5=ein") > -1) {
digitalWrite(Pin5, HIGH);
Serial.println("Pin 5 eingeschaltet!");
Pin5ON = true;
}
if(readString.indexOf("5=aus") > -1){
digitalWrite(Pin5, LOW);
Serial.println("Pin 5 ausgeschaltet!");
Pin5ON = false;
}
if(readString.indexOf("6=ein") > -1) {
digitalWrite(Pin6, HIGH);
Serial.println("Pin 6 eingeschaltet!");
Pin6ON = true;
}
if(readString.indexOf("6=aus") > -1){
digitalWrite(Pin6, LOW);
Serial.println("Pin 6 ausgeschaltet!");
Pin6ON = false;
}
//////////
if(readString.indexOf("allon=Alles+ein") > -1){
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, HIGH);
digitalWrite(Pin5, HIGH);
digitalWrite(Pin6, HIGH);

Serial.println("Alles eingeschaltet");

Pin3ON = true;
Pin4ON = true;
Pin5ON = true;
Pin6ON = true;
}
//////////
if(readString.indexOf("alloff=Alles+aus") > -1){
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
digitalWrite(Pin5, LOW);
digitalWrite(Pin6, LOW);

Serial.println("Alles ausgeschaltet");

Pin3ON = false;
Pin4ON = false;
Pin5ON = false;
Pin6ON = false;
}

//--------------------------HTML------------------------
client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println();

client.print("<html><head>");

client.print("<title>Poldis Arduino Webserver in Andreas Version</title>");

client.println("</head>");


client.println("Poldis Arduino Webserver in Andreas Version");
//Tabelle
client.println("<table border=1 width=500 cellpadding=1>");

   client.println("<tr><td>Ausgang 3<br /></td>");

   client.println("<td><form method=get><input type=submit name=3 value='ein'></form></td>");

   client.println("<td><form method=get><input type=submit name=3 value='aus'></form></td>");

   if (Pin3ON)
    client.println("<td>ON</td>");
   else
    client.println("<td>OFF</td>");

 client.println("</tr>");


   client.println("<tr><td>Ausgang 4</td>");

   client.println("<td><form method=get><input type=submit name=4 value='ein'></form></td>");

   client.println("<td><form method=get><input type=submit name=4 value='aus'></form></td>");

   if (Pin4ON)
     client.println("<td>ON</td>");
   else
     client.println("<td>OFF</td>");
 
 client.println("</tr>");

 
    client.println("<tr><td>Ausgang 5</td>");

   client.println("<td><form method=get><input type=submit name=5 value='ein'></form></td>");

   client.println("<td><form method=get><input type=submit name=5 value='aus'></form></td>");

   if (Pin5ON)
     client.println("<td>ON</td>");
   else
     client.println("<td>OFF</td>");
 
 client.println("</tr>");

 
    client.println("<tr><td>Ausgang 6</td>");

   client.println("<td><form method=get><input type=submit name=6 value='ein'></form></td>");

   client.println("<td><form method=get><input type=submit name=6 value='aus'></form></td>");

   if (Pin6ON)
     client.println("<td>ON</td>");
   else
     client.println("<td>OFF</td>");
 
 client.println("</tr>");

client.println("</table>");

   client.println("<table><tr><td><form method=get><input type=submit name=allon value='Alles ein'></form></td>");
   client.println("<td><form method=get><input type=submit name=alloff value='Alles aus'></form></td></tr>");

client.println("</table>");

client.println("</body></html>");


//clearing string for next read
readString="";

//stopping client
client.stop();
}}}}}

Kalli

Hallo,
wirklich eine sehr schöne Sache. Nur noch ein kleiner Hinweis,
das neueste Ethernet Shield v5.0 benutzt PIN 4 anstatt PIN 2.
Man sollte dann wohl PIN 4 nicht benutzen.

Gruß Kalli

P.S. könnte mir bitte mal jemand erklären, wie ich hier im Forum ein Bild posten kann ?


sth77

Quote
P.S. könnte mir bitte mal jemand erklären, wie ich hier im Forum ein Bild posten kann ?
Geht nicht direkt. Als Alternative kannst du es entweder bei einem Freehoster hochladen und dann einbinden, eigenen webspace mieten und es dort hochladen oder aber freundliche Forenmitglieder bitten, es auf ihrem Webspace zu "uppen".
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

apogee

Quote
P.S. könnte mir bitte mal jemand erklären, wie ich hier im Forum ein Bild posten kann ?


Du nimmst das Bild und lädst es zb auf abload.de hoch

Den Link zum Bild fügst du dann im Editor mit dem dritten Button (Insert Image) ein.

Berry07

@ Kalli,

danke, das ist ein super Tipp. Vielleicht hatte ich deshalb solche Probleme.
Tolle Sache so ein Expertenforum. Ich bin total begeistert!

Andreas

Go Up