Ardino Webserver

Hi Leute
also ich bin ziemlich neu was so arduino sachen angeht aber ich habe gehört das man die digitalen pins des arduinos über eine website steuern kann
ich habe mich dann mal mit dem thema ein bissl auseinander gesetzt und habe so einige codes gefunden und selber geschrieben.
Letztendlich habe ich 10 sketches auf meinem rechner aber keiner funktioniert ich bekomme bei jeden umm die 100 fehler meldungen.
ich würde mich sehr freunen wenn sich einer von euch damit aus kennt und mir weiterhelfen kann egal wie :smiley:
Mit freundlichen Grüßen
Manu

Bitte Fehlermeldungen posten, wir können nicht Hellsehen!

Achtung CODE brackets verwenden.

Was er braucht, ist einfach ein Ansatz.
Lade einfach TinyWebServer Library, da sind Beispiele.
Es gibt auch Webduino. Auch eine Library downloaden.

Wie man es findet, solltest du mal selber drum bemühen.

Website:28: error: no matching function for call to 'Server::Server(int)'

Seit Arduino 1.0 wurde die Klasse Server zu EthernetServer umbenannt.

D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Server.h:4: note: candidates are: Server::Server()
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Server.h:4: note: Server::Server(const Server&)
Website:28: error: cannot declare variable 'server' to be of abstract type 'Server'
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Server.h:4: note: because the following virtual functions are pure within 'Server':
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Print.h:48: note: virtual size_t Print::write(uint8_t)
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Server.h:6: note: virtual void Server::begin()
Website.ino: In function 'void loop()':
Website:50: error: 'class Server' has no member named 'available'
Website:50: error: cannot declare variable 'client' to be of abstract type 'Client'
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:7: note: because the following virtual functions are pure within 'Client':
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:12: note: virtual size_t Client::write(uint8_t)
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:13: note: virtual size_t Client::write(const uint8_t*, size_t)
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:14: note: virtual int Client::available()
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:15: note: virtual int Client::read()
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:17: note: virtual int Client::peek()
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:18: note: virtual void Client::flush()
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:10: note: virtual int Client::connect(IPAddress, uint16_t)
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:11: note: virtual int Client::connect(const char*, uint16_t)
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:16: note: virtual int Client::read(uint8_t*, size_t)
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:19: note: virtual void Client::stop()
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:20: note: virtual uint8_t Client::connected()
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:21: note: virtual Client::operator bool()
Website:61: error: 'c' was not declared in this scope
Website:65: error: 'c' was not declared in this scope
Website:101: error: expected primary-expression before ')' token
Website:101: error: expected `;' before ')' token

hi skorpi08
danke für die info und mit dem tiny Web user kann man sowas kann einfach machen oder gibt es dar sogar beispiele für

Seit Arduino 1.0 wurde die Klasse Server zu EthernetServer umbenannt.

Welchen Sketch benutzt du und welche Arduino IDE?

ich benutz das IDE 1.0.4 hahaha habs auchgerade gemerkt steht sogar genau in der fehlermeldung drinne :smiley:

weist du vielleicht was es sich mit den ganzen fehlermeldungen auf sich hat

D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:7: note:   because the following virtual functions are pure within 'Client':
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:12: note:    virtual size_t Client::write(uint8_t)
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:13: note:    virtual size_t Client::write(const uint8_t*, size_t)
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:14: note:    virtual int Client::available()
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:15: note:    virtual int Client::read()
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:17: note:    virtual int Client::peek()
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:18: note:    virtual void Client::flush()
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:10: note:    virtual int Client::connect(IPAddress, uint16_t)
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:11: note:    virtual int Client::connect(const char*, uint16_t)
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:16: note:    virtual int Client::read(uint8_t*, size_t)
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:19: note:    virtual void Client::stop()
D:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/Client.h:20: note:    virtual uint8_t Client::connected()

Poste hier am besten mal deinen Sketch, bei dem diese Fehlermeldungen auftreten !

Weil die Ethernet Lib hat sich nämlich mal vor etwas längerer Zeit verändert, wodurch auch einige Befehle sich geändert haben.

Zum Beispiel hat sich Client client zu EthernetClient client verändert.

Gruß
Lorenz

hi lorenz
hier ist der sketch bie dem die fehlermeldungen kommen

#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
#include <util.h>

/*

Original Version by Poldi
modified by Katsu

the functions readString.append() and readString.contains() where replaced

*/

#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, 177, 232 };                  // IP-Adresse
byte gateway[] = { 192, 168, 178, 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;
void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
pinMode(Pin3, OUTPUT);
pinMode(Pin4, OUTPUT);
pinMode(Pin5, 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=einschalten") > -1) {
 digitalWrite(Pin3, HIGH);
 Serial.println("Pin 3 eingeschaltet!");
 Pin3ON = true;
}
if(readString.indexOf("3=ausschalten") > -1){
 digitalWrite(Pin3, LOW);
 Serial.println("Pin 3 ausgeschaltet!");
 Pin3ON = false;
}
if(readString.indexOf("4=einschalten") > -1) {
 digitalWrite(Pin4, HIGH);
 Serial.println("Pin 4 eingeschaltet!");
 Pin4ON = true;
}
if(readString.indexOf("4=ausschalten") > -1){
 digitalWrite(Pin4, LOW);
 Serial.println("Pin 4 ausgeschaltet!");
 Pin4ON = false;
}
if(readString.indexOf("5=einschalten") > -1) {
 digitalWrite(Pin5, HIGH);
 Serial.println("Pin 5 eingeschaltet!");
 Pin5ON = true;
}
if(readString.indexOf("5=ausschalten") > -1){
 digitalWrite(Pin4, LOW);
 Serial.println("Pin 5 ausgeschaltet!");
 Pin5ON = false;
)
if(readString.indexOf("all=Alles+aus") > -1){
 digitalWrite(Pin3, LOW);
 digitalWrite(Pin4, LOW);
 digitalWrite(Pin5, LOW);
 Serial.println("Alles ausgeschaltet");
 Pin3ON = false;
 Pin4ON = false;
 Pin5ON = false;
}
//--------------------------HTML------------------------
client.println("HTTP/1.1 200 OK");

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

client.println();

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

client.print("<title>Arduino Webserverschaltung PicProProjects</title>");

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

client.print("<body bgcolor='#444444'>");

//---Überschrift---
client.println("
<hr />");

client.println("<h1><div align='center'><font color='#2076CD'>Arduino Webserverschaltung von PicProProjects</font color></div></h1>");

client.println("<hr />
");
//---Überschrift---

//---Ausgänge schalten---
client.println("<div align='left'><font face='Verdana' color='#FFFFFF'>Ausg&auml;nge schalten:</font></div>");

client.println("
");

client.println("<table border='1' width='500' cellpadding='5'>");

client.println("<tr bgColor='#222222'>");

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Ausgang 3
</font></td>");
 
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=3 value='einschalten'></form></td>");
 
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=3 value='ausschalten'></form></td>");
 
 if (Pin3ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");
   
client.println("</tr>");

client.println("<tr bgColor='#222222'>");

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Ausgang 4
</font></td>");
 
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=4 value='einschalten'></form></td>");
 
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=4 value='ausschalten'></form></td>");
 
 if (Pin4ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");
   
client.println("</tr>");

client.println("<tr bgColor='#222222'>");

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Ausgang 5
</font></td>");
 
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=5 value='einschalten'></form></td>");
 
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=5 value='ausschalten'></form></td>");
 
 if (Pin5ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");
   
client.println("</tr>");

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

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


client.println("
");

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

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

//---Ausgänge schalten---

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

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

Genau mit dem Sketch hatte ich damals auch meine Probleme. Leider habe ich die veränderte Version nicht mehr. Aber das ist auch nicht allzu kompliziert.

Also folgendes musst du ändern:

Server server(80);
zu

EthernetServer server(80);
Client client = server.available();

zu

EthernetClient = server.available();

Ich kann den Sketch jetzt zur Zeit leide nicht testen. Bin noch an einem anderen Computer.
Aber probier das einfach mal aus. Denke da sollten schon weniger Fehlermeldungen auftreten !

danke lorenz
ich habs mal ge'andert hab jetyt nur noch die par meldungen hier

Website.ino: In function 'void loop()':
Website:61: error: 'c' was not declared in this scope
Website:65: error: 'c' was not declared in this scope
Website:101: error: expected primary-expression before ')' token
Website:101: error: expected `;' before ')' token

Dann musst du noch das char c global definieren (nennt man doch so oder ? :grin:).
Das setzt du dann einfach in den Kopfteil, also irgendwo vor den setup() - Teil.
Also vor den Setup() - Teil:

char c;

und dort weiter unten wo es definiert wird, einfach das char entfernen.

Und dann musst du noch eine Klammer ändern.

if(readString.indexOf("5=ausschalten") > -1){
digitalWrite(Pin4, LOW);
Serial.println("Pin 5 ausgeschaltet!");
Pin5ON = false;
)

Da musst du die letzte Klammer zu einer } ändern.

Dann sollte eig. alles funktionieren :wink:

soo ok du bist der beste aber was bedeutet das was hab ich da falsch deklariert

Website:205: error: expected declaration before '}' token

Website:205: error: expected declaration before '}' token

Ich schätze mal damit ist die letzte Zeile gemeint.
Da ist eine } zuviel.

jaaaaaaaaaaaaaaaaaaaaaaaaaaa
Wir haben es geschafft :smiley: :smiley: :smiley:
bzw du hast es geschaft alles ist fehlerfrei

Freut mich :slight_smile:

Und funktioniert der Sketch auch so wie er soll ?

naja ich kann noch nicht auf die website zu greufen -.-

[code]byte ip[]  = { 192, 168, 177, 232 };                  // IP-Adresse
byte gateway[] = { 192, 168, 178, 1 };                // Gateway

[/code]

Deswegen?

Ändere mal so:

[code]byte ip[]  = { 192, 168, 178, 232 };                  // IP-Adresse
byte gateway[] = { 192, 168, 178, 1 };                // Gateway

[/code]

was soll ich zu was umschreiben