Webserver e Ethernet shield

Salve a tutti, cerco aiuto per compilare il mio arduino uno con eth shield, in buona sostanza vorrei comandare 4 rele da pagina web, visualizzarne lo stato e in seguito, magari, implementare anche sensore temp-hum dht11 con lettura in tempo reale quando la pagina web viene aperta, in rete ho trovato questo code ma mi retituisce un bel po di errori, chi è cosi gentile da aiutarmi?

#include <Ethernet.h>
#include <SPI.h>
#include <WebServer.h> //libreria webduino

//variabili statiche per il mac address e lìip address
static byte mac_Add[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//cambiare l’ip in funzione della propria rete
static byte ip_Add[] = {192, 168, 0, 220 };
//creazione oggetto Webduino
WebServer webserver("", 80);

//Variabili booleane che memorizzano
//lo stato delle uscite collegate ai relè
boolean Rele1 = false;
boolean Rele2 = false;
boolean Rele3 = false;
boolean Rele4 = false;

//=============================================================================
//funzione pagina Start
void Start(WebServer &server, WebServer::ConnectionType type,
char *url_param, bool param_complete)
{
//restituisce al browser l’intestazione http 200 OK
server.httpSuccess();

//gestisco il tipo di richiesta HEAD
if (type != WebServer::HEAD)
{
String s = "";

if (param_complete == true)
{
s = url_param;

if ( s == "R1=ON")
{
Rele1 = true;
digitalWrite(2, HIGH);
}
else if ( s == "R1=OFF")
{
Rele1 = false;
digitalWrite(2, LOW);
}

if ( s == "R2=ON")
{
Rele2 = true;
digitalWrite(3, HIGH);
}
else if ( s == "R2=OFF")
{
Rele2 = false;
digitalWrite(3, LOW);
}

if ( s == "R3=ON")
{
Rele3 = true;
digitalWrite(4, HIGH);
}
else if ( s == "R3=OFF")
{
Rele3 = false;
digitalWrite(4, LOW);
}
if ( s == "R4=ON")
{
Rele4 = true;
digitalWrite(5, HIGH);
}
else if ( s == "R4=OFF")
{
Rele4 = false;
digitalWrite(5, LOW);
}
}

//gestisco la pagina html in base allo stato delle uscite di Arduino
P(htmlHead) =
"<html>"
"<head>"
"<title>Arduino Scheda Rele</title>"
"</head>"
"<body>";

server.printP(htmlHead);

server.print("<table border=\"1\">");
server.print("<tr><td>Stato Rele</td><td>Comandi</td></tr>");

if(Rele1 == true)
server.print("<tr><td style=\"color: red;\">RELE 1 ON</td><td>");
else
server.print("<tr><td style=\"color: black;\">RELE 1 OFF</td><td>");

if(Rele1 == false)
server.print("<input type=\"button\" value=\"PUSH\"
onclick=\"location.href=’index.htm?R1=ON’\">");
else
server.print("<input type=\"button\" value=\"PUSH\"
onclick=\"location.href=’index.htm?R1=OFF’\">");

server.print("</td></tr>");

if(Rele2 == true)
server.print("<tr><td style=\"color: red;\">RELE 2 ON</td><td>");
else
server.print("<tr><td style=\"color: black;\">RELE 2 OFF</td><td>");

if(Rele2 == false)
server.print("<input type=\"button\" value=\"PUSH\"
onclick=\"location.href=’index.htm?R2=ON’\">");
else
server.print("<input type=\"button\" value=\"PUSH\"
onclick=\"location.href=’index.htm?R2=OFF’\">");

server.print("</td></tr>");

if(Rele3 == true)
server.print("<tr><td style=\"color: red;\">RELE 3 ON</td><td>");
else
server.print("<tr><td style=\"color: black;\">RELE 3 OFF</td><td>");

if(Rele3 == false)
server.print("<input type=\"button\" value=\"PUSH\"
onclick=\"location.href=’index.htm?R3=ON’\">");
else
server.print("<input type=\"button\" value=\"PUSH\"
onclick=\"location.href=’index.htm?R3=OFF’\">");

server.print("</td></tr>");

if(Rele4 == true)
server.print("<tr><td style=\"color: red;\">RELE 4 ON</td><td>");
else
server.print("<tr><td style=\"color: black;\">RELE 4 OFF</td><td>");

if(Rele4 == false)
server.print("<input type=\"button\" value=\"PUSH\"
onclick=\"location.href=’index.htm?R4=ON’\">");
else
server.print("<input type=\"button\" value=\"PUSH\"
onclick=\"location.href=’index.htm?R4=OFF’\">");

server.print("</td></tr>");

server.print("</table></body></html>");

}
}
//=============================================================================

void setup()
{
//inizializzo l’ethernet shield con il mac e il address
Ethernet.begin(mac_Add, ip_Add);

//definisci l’azione di default che verrà eseguita quando l’utente
//naviga nella root del sito
webserver.setDefaultCommand(&Start);
webserver.addCommand("index.htm", &Start);

//avvia il web server
webserver.begin();

delay(100);

//definisci i pin 2 3 4 5 in uscita
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);

//inizializza i le uscite
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);

}

void loop()
{
//elabora costantemente tutte le richieste provenienti dal browser
webserver.processConnection();
}

Grazie e scusatemi se non sono proprio pratico :wink:

Questo fa esattamente quello che vuoi!

Ti riferisci a questo?

Mi riferivo al software. Funziona anche con un Arduino e dei relé "normali".

mmmm, cercavo di azionare i relè (scheda rele shield 4 channel) con pulsanti on-off da pagina web, il controllo della temperatura per il momento è a parte e vorrei solo monitorarla via web, secondo te quel code è modificabile in base a quello che vorrei fare?
Ti ringrazio e scusami perche sono davvero un neofita.

Come già detto, quel software fa esattamente quello che chiedi. Puoi accendere e spegnere da web o impostare una temperatura. Se inizialmente quest'ultima cosa non ti serve, basta non usarla.

Siccome ne sono io l'autore ti anticipo che presto potrai anche azionare i relé a tempo :D.

Arduino:1.6.9 (Windows 10), Scheda:"Arduino/Genuino Uno"

SmartStrip:36: error: 'WebServer' does not name a type

 WebServer webserver;

 ^

SmartStrip:63: error: 'Thermometer' does not name a type

 Thermometer thermometer;

 ^

SmartStrip:194: error: variable or field 'netconfig_func' declared void

 void netconfig_func (HTTPRequestParser& request) {

                     ^

SmartStrip:194: error: 'HTTPRequestParser' was not declared in this scope

SmartStrip:194: error: 'request' was not declared in this scope

 void netconfig_func (HTTPRequestParser& request) {

                                        ^

SmartStrip:235: error: variable or field 'relconfig_func' declared void

 void relconfig_func (HTTPRequestParser& request) {

                     ^

SmartStrip:235: error: 'HTTPRequestParser' was not declared in this scope

SmartStrip:235: error: 'request' was not declared in this scope

 void relconfig_func (HTTPRequestParser& request) {

                                        ^

SmartStrip:252: error: variable or field 'sck_func' declared void

 void sck_func (HTTPRequestParser& request) {

               ^

SmartStrip:252: error: 'HTTPRequestParser' was not declared in this scope

SmartStrip:252: error: 'request' was not declared in this scope

 void sck_func (HTTPRequestParser& request) {

                                  ^

SmartStrip:194: error: variable or field 'netconfig_func' declared void

 void netconfig_func (HTTPRequestParser& request) {

                      ^

SmartStrip:194: error: 'HTTPRequestParser' was not declared in this scope

SmartStrip:194: error: 'request' was not declared in this scope

 void netconfig_func (HTTPRequestParser& request) {

                                         ^

exit status 1
'WebServer' does not name a type

Questo report potrebbe essere più ricco di informazioni con l'opzione
"Mostra un output dettagliato durante la compilazione"
abilitata in File -> Impostazioni

probabilmente sbaglio in qualcosa

Devi scaricare anche questo e mettere le cartelle Webbino e Thermometer nella cartella libraries della tua cartella degli sketch.

Inoltre in thermometer_common.h devi commentare USE_DALLAS_THERMO e scommentare USE_DHT_THERMO.

Infine in webbino_common.h devi commentare WEBBINO_USE_ESP8266 e scommentare WEBBINO_USE_WIZ5100, presupponendo che usi un Ethernet Shield simile a quello ufficiale.

ok le librerie ma mi sa che abbandono il code, verificando mi da altri 750 errori e non voglio far perdere tempo inutilmente, ti ringrazio comunque

Ma no, che errori ti dà? Copia anche solo le prime 10 righe.

Arduino:1.6.9 (Windows 10), Scheda:"Arduino/Genuino Uno"

SmartStrip:36: error: 'WebServer' does not name a type

 WebServer webserver;

 ^

SmartStrip:63: error: 'Thermometer' does not name a type

 Thermometer thermometer;

 ^

SmartStrip:194: error: variable or field 'netconfig_func' declared void

 void netconfig_func (HTTPRequestParser& request) {

                     ^

SmartStrip:194: error: 'HTTPRequestParser' was not declared in this scope

SmartStrip:194: error: 'request' was not declared in this scope

 void netconfig_func (HTTPRequestParser& request) {

                                        ^

SmartStrip:235: error: variable or field 'relconfig_func' declared void

 void relconfig_func (HTTPRequestParser& request) {

                     ^

SmartStrip:235: error: 'HTTPRequestParser' was not declared in this scope

SmartStrip:235: error: 'request' was not declared in this scope

 void relconfig_func (HTTPRequestParser& request) {

                                        ^

SmartStrip:252: error: variable or field 'sck_func' declared void

 void sck_func (HTTPRequestParser& request) {

               ^

SmartStrip:252: error: 'HTTPRequestParser' was not declared in this scope

SmartStrip:252: error: 'request' was not declared in this scope

 void sck_func (HTTPRequestParser& request) {

                                  ^

SmartStrip:194: error: variable or field 'netconfig_func' declared void

 void netconfig_func (HTTPRequestParser& request) {

                      ^

SmartStrip:194: error: 'HTTPRequestParser' was not declared in this scope

SmartStrip:194: error: 'request' was not declared in this scope

 void netconfig_func (HTTPRequestParser& request) {

                                         ^

exit status 1
'WebServer' does not name a type

Questo report potrebbe essere più ricco di informazioni con l'opzione
"Mostra un output dettagliato durante la compilazione"
abilitata in File -> Impostazioni

:o :o :o

Non hai messo le librerie nel posto giusto, o non hai chiuso e riaperto Arduino dopo averlo fatto, visto che l'errore è sempre lo stesso...

Arduino:1.6.9 (Windows 10), Scheda:"Arduino/Genuino Uno"

In file included from C:\Users\Desktop\SmartStrip-master\SmartStrip\SmartStrip.ino:51:0:

C:\Program Files (x86)\Arduino\libraries\Webbino/WebServer_ESP8266.h:27:21: fatal error: WiFiEsp.h: No such file or directory

 #include <WiFiEsp.h>

                     ^

compilation terminated.

Più di una libreria trovata per "debug.h"
Usata: C:\Program Files (x86)\Arduino\libraries\debug
Non usata: C:\Program Files (x86)\Arduino\libraries\Thermometer
exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Uno.

Questo report potrebbe essere più ricco di informazioni con l'opzione
"Mostra un output dettagliato durante la compilazione"
abilitata in File -> Impostazioni

sta diventando un parto :smiley:

SukkoPera:
Infine in webbino_common.h devi commentare WEBBINO_USE_ESP8266 e scommentare WEBBINO_USE_WIZ5100, presupponendo che usi un Ethernet Shield simile a quello ufficiale.

Arduino:1.6.7 (Windows 7), Scheda:"Arduino/Genuino Uno"

SmartStrip:42: error: 'NetworkInterfaceWIZ5100' does not name a type

  NetworkInterfaceWIZ5100 netint;

  ^

C:\Users\user\Desktop\SmartStrip\SmartStrip.ino: In function 'char* evaluate_ip(void*)':

SmartStrip:451: error: 'netint' was not declared in this scope

   return ip2str (netint.getIP ());

                  ^

C:\Users\user\Desktop\SmartStrip\SmartStrip.ino: In function 'char* evaluate_netmask(void*)':

SmartStrip:455: error: 'netint' was not declared in this scope

  return ip2str (netint.getNetmask ());

                 ^

C:\Users\user\Desktop\SmartStrip\SmartStrip.ino: In function 'char* evaluate_gw(void*)':

SmartStrip:459: error: 'netint' was not declared in this scope

  return ip2str (netint.getGateway ());

                 ^

C:\Users\user\Desktop\SmartStrip\SmartStrip.ino: In function 'void setup()':

SmartStrip:812: error: 'DSTART' was not declared in this scope

  DSTART ();

          ^

SmartStrip:845: error: 'netint' was not declared in this scope

    bool ok = netint.begin (mac, ip, mask, gw);

              ^

SmartStrip:867: error: 'netint' was not declared in this scope

    bool ok = netint.begin (mac);

              ^

SmartStrip:895: error: 'netint' was not declared in this scope

  if (!webserver.begin (netint)) {

                        ^


  Questo report potrebbe essere più ricco di informazioni con
  "Mostra un output dettagliato durante la compilazione"
  abilitato in "File > Impostazioni"

oh madonna

Ma sei sicuro di aver fatto quel che ti ho detto sopra? Sembra che tu abbia modificato qualcos'altro.

totonik
fidati, a usare webbino ci guadagni eccome e te lo dice uno che ha rifatto il codice da zero di 2000 righe solo per usare webbino :slight_smile: :slight_smile: E alla fine, dire che mi sono trovato bene è poco :smiley: