Domotica Pro

Domotica Pro

Presentazione

Domotica Pro nasce per permettere a chiunque di creare dei web server e gestirli nella maniera più semplice.

In particolare questa applicazione è stata pensata e realizzata per potersi interfacciare con dei microcontrollori programmabili come Arduino e NodeMCU, e permettere a chiunque di creare la propria domotica, su misura delle singole persone e completamente open-source.

L'ambiente di lavoro si presenta minimale e pulito, così da renderlo facile da utilizzare anche per gli utenti meno esperti. La configurazione delle stanze e degli oggetti da comandare è altrettanto semplice, e in caso di errore si potrà modificare o cancellare l'oggetto creato.

Di seguito troverai i codici prefatti per programmare la tua scheda ed una breve introduzione al funzionamento dell'applicazione; per qualsiasi domanda o dubbio sarò a tua disposizione: domoticapro.app@gmail.com


Privacy policy

L'applicazione non agisce in alcun modo sul dispositivo dell'utente finale, salva tutti i dati in un database esterno dove i dati vengono crittografati per una maggior sicurezza.

L'applicazione quindi diventa disponibile per tutte le tipologie di pubblico senza limitazioni d'età.

Si nega la presenza di qualsiasi materiale vietato ed in caso di eventuali problemi saranno contattati gli utenti per la risoluzione di questi ultimi.

Codici

Ti progongo di seguito due varianti di codice

Questa è la prima variante, utilizza solamente una scheda programmabile per comandare dei relè, l'unico limite che ha è il numero di relè che puoi comandare: infatti hai a disposizioni tanti relè quante uscite possiede la scheda.

Fai attenzione: il sistema di feedback dello stato non è implementato

Questa è la seconda variante, utilizza due schede connesse tra di loro tramite comunicazione seriale, ciò ti permette di avere un numero di uscite elevato e la comodità di avere solo due cavi da collegare (TX ed RX).

Fai attenzione: il sistema di feedback dello stato è già implementato

#include <ESP8266WiFi.h>

#include <ESP8266Ping.h>

const char* ssid = "NOME RETE"; // SSID i.e. Service Set Identifier is the name of your WIFI

const char* password = "PSW"; // Your Wifi password, in case you have open network comment the whole statement.

IPAddress ip(XXX,XXX,XXX,XXX); // static IP adress of device

IPAddress gateway(XXX,XXX,XXX,XXX); // Gatway

IPAddress subnet(XXX,XXX,XXX,XXX); // Network mask es. 255,255,255,0


int RELE1 = D0;

int RELE2 = D1;

int RELE3 = D2;

int RELE4 = D3;

int RELE5 = D4;


int stato1 = HIGH;

int stato2 = HIGH;

int stato3 = HIGH;

int stato4 = HIGH;

int stato5 = HIGH;


unsigned long prevmillis;

WiFiServer server(80); // Creates a server that listens for incoming connections on the specified port, here in this case port is 80.


void setup() {

Serial.begin(115200);

delay(10);

pinMode(RELE1, OUTPUT);

pinMode(RELE2, OUTPUT);

pinMode(RELE3, OUTPUT);

pinMode(RELE4, OUTPUT);

pinMode(RELE5, OUTPUT);

digitalWrite(RELE1, stato1);

digitalWrite(RELE2, stato2);

digitalWrite(RELE3, stato3);

digitalWrite(RELE4, stato4);

digitalWrite(RELE5, stato5);

// Connect to WiFi network

Serial.println();

Serial.println();

Serial.print("Connessione a ");

Serial.println(ssid);

WiFi.begin(ssid, password);

WiFi.config(ip,gateway,subnet);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("WiFi connesso");

// Start the server

server.begin();

Serial.println("Server partito");

// Print the IP address

Serial.print("usa questo URL per le richieste: ");

Serial.print("http://");

Serial.print(WiFi.localIP());

Serial.println("/");

}

//---------------------------------

void loop() {

// Check if a client has connected

WiFiClient client = server.available();

if (!client) {

return;

}

// Wait until the client sends some data

int contatore=0;

Serial.println("nuovo cliente");

while(!client.available()){

delay(10);

contatore++;

if(contatore>=10000)return;

}

// Read the first line of the request

String request = client.readStringUntil('\r');

Serial.println(request);

client.flush();

// Match the request

//setup rele


if (request.indexOf("/Rele1") != -1) {

stato1 = !stato1;

digitalWrite(RELE1, stato1);

}


//----------------

if (request.indexOf("/Rele2") != -1) {

stato2 = !stato2;

digitalWrite(RELE2, stato2);

}


//-----------------

if (request.indexOf("/Rele3") != -1) {

stato3 = !stato3;

digitalWrite(RELE3, stato3);

}

//----------------

if (request.indexOf("/Rele4") != -1) {

stato4 = !stato4;

digitalWrite(RELE4, stato4);

}

//---------------

if (request.indexOf("/Rele5") != -1) {

stato5 = !stato5;

digitalWrite(RELE5, stato5);

}

//-------------

// Return the response

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

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

client.println(""); // do not forget this one

client.println("<!DOCTYPE HTML>");

client.println("<html>");

client.print("COMANDO RELE'");

client.println("<br><br>");

client.println("<a href=\"/Rele1\"\"><button>1</button></a><br /><br />");

client.println("<a href=\"/Rele2\"\"><button>2</button></a><br /><br />");

client.println("<a href=\"/Rele3\"\"><button>3</button></a><br /><br />");

client.println("<a href=\"/Rele4\"\"><button>4</button></a><br /><br />");

client.println("<a href=\"/Rele5\"\"><button>5</button></a><br /><br />");

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

delay(1);

//client.stop();

Serial.println("Client disonnected");

Serial.println("");

}

#include <ESP8266WiFi.h>

char c;

String conferma;

int conf;


String stato01 = "OFF";

String stato02 = "OFF";

String stato03 = "OFF";

String stato04 = "OFF";

String stato05 = "OFF";

String stato06 = "OFF";

String stato07 = "OFF";

String stato08 = "OFF";

String stato09 = "OFF";

String stato10 = "OFF";


const char* ssid = "nome rete"; // SSID

const char* password = "psw"; //PSW wifi


IPAddress ip(xxx,xxx,xxx,xxx); // static IP address of device

IPAddress gateway(xxx,xxx,xxx,xxx); // Gatway

IPAddress subnet(xxx,xxx,xxx,xxx); // Network mask


WiFiServer server(80); // crea server


void setup() {


Serial.begin(9600);

delay(10);

Serial.println();

Serial.println();

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.begin(ssid, password);

WiFi.config(ip,gateway,subnet);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("WiFi connected");

// Start the server

server.begin();

Serial.println("Server started");

// Print the IP address

Serial.print("Use this URL to connect: ");

Serial.print("http://");

Serial.print(WiFi.localIP()); //stampa ip preso dalla scheda

Serial.println("/");

}


void loop() {

WiFiClient client = server.available();

//RISPOSTE DALLA SCHEDA


conferma = "";

if(Serial.available()){

do{

if(Serial.available()){

c = Serial.read();

if (c != 0x0d){

conferma += c;

}

}

}while(c != 0x0d);

Serial.print("la variabile conferma è:");

Serial.println(conferma);

verificaConferma();

conferma = "";

}

else{

if (!client) {

return;

}

// aspetta finche il client non manda dati

//Serial.println("new client");


while(!client.available()){

delay(1);

}

// Read the first line of the request

String request = client.readStringUntil('\r');

//Serial.println(request);

client.flush();


if (request.indexOf("/A01") != -1){

chiamata('0','1');

}


if (request.indexOf("/A02") != -1) {

chiamata('0','2');

}


if (request.indexOf("/A03") != -1) {

chiamata('0','3');

}


if (request.indexOf("/A04") != -1) {

chiamata('0','4');

}


if (request.indexOf("/A05") != -1) {

chiamata('0','5');

}


if (request.indexOf("/A06") != -1) {

chiamata('0','6');

}


if (request.indexOf("/A07") != -1) {

chiamata('0','7');

}


if (request.indexOf("/A08") != -1) {

chiamata('0','8');

}


if (request.indexOf("/A09") != -1) {

chiamata('0','9');

}


if (request.indexOf("/A10") != -1) {

chiamata('1','0');

}

}

//sito web

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

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

client.println(""); // do not forget this one

client.println("<!DOCTYPE HTML>");

client.println("<html>");

client.println("<br>LED01" + stato01);

client.println("<br>LED02" + stato02);

client.println("<br>LED03" + stato03);

client.println("<br>LED04" + stato04);

client.println("<br>LED05" + stato05);

client.println("<br>LED06" + stato06);

client.println("<br>LED07" + stato07);

client.println("<br>LED08" + stato08);

client.println("<br>LED09" + stato09);

client.println("<br>LED10" + stato10);

client.println("<br><br>");

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

}



void chiamata(char n1,char n2){

Serial.write('a');

Serial.write('c');

Serial.write('c');

Serial.write(',');

Serial.write(n1);

Serial.write(n2);

Serial.write('@');

}


void verificaConferma(){

if (conferma == "on,01" ) stato01 = "ON"; else if(conferma == "of,01") stato01 = "OFF";

if (conferma == "on,02" ) stato02 = "ON"; else if(conferma == "of,02") stato02 = "OFF";

if (conferma == "on,03" ) stato03 = "ON"; else if(conferma == "of,03") stato03 = "OFF";

if (conferma == "on,04" ) stato04 = "ON"; else if(conferma == "of,04") stato04 = "OFF";

if (conferma == "on,05" ) stato05 = "ON"; else if(conferma == "of,05") stato05 = "OFF";

if (conferma == "on,06" ) stato06 = "ON"; else if(conferma == "of,06") stato06 = "OFF";

if (conferma == "on,07" ) stato07 = "ON"; else if(conferma == "of,07") stato07 = "OFF";

if (conferma == "on,08" ) stato08 = "ON"; else if(conferma == "of,08") stato08 = "OFF";

if (conferma == "on,09" ) stato09 = "ON"; else if(conferma == "of,09") stato09 = "OFF";

if (conferma == "on,10" ) stato10 = "ON"; else if(conferma == "of,10") stato10 = "OFF";

}