Salve,
pur senza conoscenze di programmazione, con un po' di pazienza sono alfine arrivato a far funzionare un codice per Arduino UNO che mi consente di azionare tre relè, agendo sui rispettivi pulsanti in una pagina web su browser, che ho denominato ALLARME, LUCI e CANCELLO.
Poi ho voluto integrarla con un'autenticazione con codifica base64 utilizzando la libreria Webduino e... qui son cominciati i problemi. O meglio, il codice tutto sommato funziona, faccio il mio bel login ed accedo all'interfaccia con i pulsanti, però poi, cliccando sui pulsanti, evidentemente la pagina si aggiorna e mi fa tornare al login.
Ovviamente io vorrei fare il login una sola volta e poi poter usare quanto voglio i pulsanti, magari ripetendo il login solo se chiudo e riapro il browser, ma evidentemente devo inserire nel codice qualcosa che ora ignoro (forse in void loop?).
Ecco il codice completo:
#include <SPI.h>
#include <Ethernet.h>
#include "WebServer.h"
int ALLARME = 4;
int LUCI = 5;
int CANCELLO = 6;
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
static uint8_t ip[] = { 192, 168, 178, 32 };
//creo un oggetto webduino
WebServer webserver("", 5050);
EthernetServer server(5050);
String readString;
//funzione che crea la pagina principale del sito
void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
server.httpSuccess();
if (type != WebServer::HEAD)
{
//invio al browser la pagina principale
P(helloMsg) = "<h4>Accedi:</h4><a href=\"private.html\">Pagina Privata</a>";
server.printP(helloMsg);
}
}
//questa funzione permette di verificare il nome utente e la password
//e in caso di successo di visualizzare la pagina privata
void privateCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
//user= ******
//password= ******
//verifico nome utente e password
if (server.checkCredentials("******************"))
{
//in caso affermativo…
server.httpSuccess();
}
else
{
//creo una risposta http
//nel caso in cui si tenta un accesso
//non autorizzato
server.httpUnauthorized();
}
}
void setup() {
// Apro la comunicazione seriale:
Serial.begin(9600);
//Imposto i pin come OUTPUT e li inizializzo su HIGH (in questo caso = spento)
pinMode(ALLARME, OUTPUT);
digitalWrite(ALLARME, HIGH);
pinMode(LUCI, OUTPUT);
digitalWrite(LUCI, HIGH);
pinMode(CANCELLO, OUTPUT);
digitalWrite(CANCELLO, HIGH);
//inizializzo la ethernet shield
Ethernet.begin(mac, ip);
//definisco funzione che gestisce
//la pagina principale del sito
webserver.setDefaultCommand(&defaultCmd);
webserver.addCommand("index.html", &defaultCmd);
//definisco la funzione che gestisce la pagina privata
webserver.addCommand("private.html", &privateCmd);
//inizializzo la libreria webduino
webserver.begin();
}
void loop()
{
char buff[64];
int len = 64;
webserver.processConnection(buff, &len);
// Creo una connessione al client
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//Leggo i caratteri da HTTP
if (readString.length() < 100) {
//Inserisco i caratteri nella stringa
readString += c;
//Serial.print(c);
}
//Se la richiesta HTTP è andata a buon fine
if (c == '\n') {
Serial.println(readString); //scrivi sul monitor seriale per debugging
client.println("HTTP/1.1 200 OK"); //Invio nuova pagina
client.println("Content-Type: text/html");
client.println();
client.println("<HTML>");
client.println("<HEAD>");
client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
client.println("<link rel='stylesheet' type='text/css' href='http://www.progettiarduino.com/uploads/8/1/0/8/81088074/style3.css' />");
client.println("<TITLE>Controllo Dispositivi da Remoto</TITLE>");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<H1>Controllo Dispositivi da Remoto</H1>");
client.println("<hr />");
client.println("
");
client.println("<H2>Arduino UNO con Ethernet Shield</H2>");
client.println("
");
client.println("<a href=\"/?button1on\"\">ALLARME</a>
");
client.println("
");
client.println("
");
client.println("<a href=\"/?button2on\"\">LUCI</a>
");
client.println("
");
client.println("
");
client.println("<a href=\"/?button3on\"\">CANCELLO</a>
");
client.println("
");
client.println("
");
client.println("</BODY>");
client.println("</HTML>");
delay(1);
client.stop();
//Controlli su Arduino: Se è stato premuto il pulsante sul webserver
if (readString.indexOf("?button1on") >0){
digitalWrite(ALLARME, LOW);
delay(1200);
digitalWrite(ALLARME, HIGH);
}
if (readString.indexOf("?button2on") >0){
digitalWrite(LUCI, LOW);
delay(400);
digitalWrite(LUCI, HIGH);
}
if (readString.indexOf("?button3on") >0){
digitalWrite(CANCELLO, LOW);
delay(400);
digitalWrite(CANCELLO, HIGH);
}
//Cancella la stringa una volta letta
readString="";
}
}
}
}
}
Naturalmente per voi non dovrebbe essere difficile, mi aiutate?
Fabio