Stampa

 

                  

 EspDomo01S

 Evoluzione del programma accende led in cui ho inserito la modalità AP_Station
 e settato gli ip fissi sia in station che ap poi ho inserito la modalità pulse
 con la possibilità di usare l'uscita impulsiva temporizzata, infine ho inserito
 la possibilità di vedere lo stato dell'uscita gpio tramite digitalRead con stato.
 Tutto è compatibile con l'app android espdomo01S fatta apposita ed esp-domo.

Le app le ho fatte grazie all'applicazione MitAppInventor  applicazione che funziona sia da pc che da android, nel pc non c'è da scaricare niente basta registrarsi e tramite una pagina web possiamo creare tutte le app android che vogliamo, è una funzione di google molto semplice e con tantissimi esempi dimostrativi.

 

Vi faccio vedere cosa c'è dietro al programma fatto con l'ide di arduino:

/*
* EspDomo02S con stato
*
* Evoluzione del programma accende led in cui ho inserito la modalità AP_Station
* e settato gli ip fissi sia in station che ap poi ho inserito la modalità pulse
* con la possibilità di usare l'uscita impulsiva temporizzata, infine ho inserito
* la possibilità di vedere lo stato dell'uscita gpio tramite digitalRead con stato.
* Tutto è compatibile con l'app android espdomo01S fatta apposita.
* Ho aggiunto un secondo led relay led1 e provato a sdoppiare tutte le funzioni
* ad ora da testare sembra che non ci siano errori nella compilazione ma va provato online......
* forse la funzione stato farà casino? bho vediamo.....
* By Iw5ek Andrea
*/
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
ESP8266WebServer server(8007); //Setto la porta del serverweb di default è 80
const char WiFiSSID[] = "ssid"; //Setto l'ssid dell'ap a cui mi collego
const char WiFiPSK[] = ""; //Setto la password dell'ap collegato
const char ap_ssid[] = "EspDomo02S"; //setto l'ssid dell'ap della scheda esp
const char ap_password[] = "passwd"; //Setto la password dell'ap scheda esp
const int util = 0; //led di stato che dovrebbe essere collegato tra GPIO0 e GND per mostrare l'utilizzo dell'ESP8266, ma che non ho utilizzato.
const int led = 2; // led da controllare via Wifi, collegato GPIO2
const int led1 = 5; // led da controllare via Wifi, collegato GPIO5
const int DELAY_RELE = 700; // ritardo in millisecondi
// IP statico
IPAddress ip(192, 168, x, x); //ip ap remoto da collegare
IPAddress gateway(192, 168, x, x); // gateway ap remoto da collegare
IPAddress subnet(255, 255, 255, 0); // subnet ap remoto da collegare
IPAddress ipAP(192, 168, x, x); // ip ap locale dell'esp
IPAddress gatewayAP(192, 168, x, x); // gateway ap locale dell'esp
IPAddress subnetAP(255, 255, 255, 0); // subnet ap locale dell'esp
void handleRoot() {
digitalWrite(util, 1);
server.send(200, "text/plain", "Benvenuto sull'EspDomo02S!");
digitalWrite(util, 0);
}
void digitalWritePulse1(int pin, int delayMilliseconds){ //creo la funzione pulse per il led
digitalWrite(led, LOW);
delay(delayMilliseconds);
digitalWrite(led, HIGH);

}
void digitalWritePulse2(int pin, int delayMilliseconds){ //creo la funzione pulse per il led1
digitalWrite(led1, LOW);
delay(delayMilliseconds);
digitalWrite(led1, HIGH);

}
void handleNotFound(){
digitalWrite(util, 1);
String message = "File non trovato\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
digitalWrite(util, 0);
}
void setup(void){
WiFi.mode(WIFI_AP_STA); // Setto la modalità AP e Station
WiFi.softAPConfig(ipAP, gatewayAP, subnetAP); //Configuro AP locale
WiFi.softAP(ap_ssid, ap_password); //Configuro ssid e password
// Mi connetto alla WIFI ( WPA/WPA2 )
WiFi.begin(WiFiSSID, WiFiPSK);
// setto l'IP statico per il collegamento all'AP remoto
WiFi.config(ip,gateway,subnet);
pinMode(led, OUTPUT); // configuro il pin del led
digitalWrite(led, HIGH); // imposto lo stato del led alto cioè spento
pinMode(led1, OUTPUT); // configuro il pin del led1
digitalWrite(led1, HIGH); // imposto lo stato del led1 alto cioè spento
pinMode(util, OUTPUT);
digitalWrite(util, 0);
Serial.begin(115200);
Serial.println(""); // Serial.print continua sulla stessa riga mentre Serial.println va a capo a ogni riga
Serial.println("ESP8266 avviato, collegati alla rete Wifi EspDomo02S");
Serial.println("tramite qualsiasi dispositivo ed apri la pagina 192.168.x.x");
Serial.println("oppure collegati allarete ssid con l'indirizzo IP:");
Serial.println("192.168.x.x:8007/");
server.on("/", handleRoot);
server.on("/inline", [](){
server.send(200, "text/plain", "Funziona anche questa pagina");
});
server.on("/rele/on", [](){ //Se viene richiamata la pagina 'on'…
digitalWrite(led, 0); //...accende il led...
server.send(200, "text/plain", "Acceso"); //...e scrive che il led è stato acceso
});
server.on("/rele/off", [](){ //Se viene richiamata la pagina 'off'…
digitalWrite(led, 1); //...spegne il led...
server.send(200, "text/plain", "Spento"); //...e scrive che il led è stato spento
});
server.on("/rele1/on", [](){ //Se viene richiamata la pagina 'on'…
digitalWrite(led1, 0); //...accende il led1...
server.send(200, "text/plain", "Acceso1"); //...e scrive che il led è stato acceso
});
server.on("/rele1/off", [](){ //Se viene richiamata la pagina 'off'…
digitalWrite(led1, 1); //...spegne il led1...
server.send(200, "text/plain", "Spento1"); //...e scrive che il led è stato spento
});
server.on("/rele/pulse", [](){ //Se viene richiamata la pagina 'pulse'
digitalWritePulse1(led, DELAY_RELE); //...Accende per 700 millisecondi il led...
server.send(200, "text/plain", "Pulse-On/Off"); //..e scrive che il led è pulse
});
server.on("/rele/pulse1", [](){ //Se viene richiamata la pagina 'pulse1'
digitalWritePulse2(led1, DELAY_RELE); //...Accende per 700 millisecondi il led1...
server.send(200, "text/plain", "Pulse1-On/Off"); //..e scrive che il led è pulse
});
/*
* Volendo controllare lo stato dell'uscita digitale led ho pensato a digitare
* la richiesta con stato dopo l'url il quale comando confronta se la sua
* uscita è == ad 0 lo comunica scrivendo a schermo ON altrimenti scrive OFF
*/
server.on("/stato", [](){ //Se viene richiamata la pagina 'stato'…
if (digitalRead(led) == 0) { //...controlla l'uscita del led con digitalRead
server.send(200, "text/plain", "Acceso"); // e se 0 scrive Acceso altrimenti scrive Spento
} else {
server.send(200, "text/plain", "Spento");
}
if (digitalRead(led1) == 0) { //...controlla l'uscita del led con digitalRead
server.send(200, "text/plain", "Acceso1"); // e se 0 scrive Acceso altrimenti scrive Spento
} else {
server.send(200, "text/plain", "Spento1");
}
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println("Server HTTP avviato");

}
void loop(void){
server.handleClient();


}

// fine del programma

all'inizio c'è una descrezione che viene commentata tra /* e */  il linguaggio è c++ con tutte le sue regole e dopo molte

funzioni ho inserito un commento preceduto da //  per far capire meglio. Il file una volta verificato con arduino ide lo possiamo compilare ed inserire dentro il microcontrollore da dove non sarà più possibile estrapolarlo (è possibile ma molto complicato). Cmq lo sketch rimane in memoria salvato sul programma stesso, l'unica accortezza è quella di scrivere su un foglietto quello che è stato inserito dentro l'esp in modo che quando come me si ha molti microcontrollori programmati per fare testare i vari progetti riconosco quello che contengono senza andare per tentativi.


 By Iw5ek Andrea