🧠 Introduzione
Nel progetto precedente abbiamo controllato un singolo relè tramite browser, realizzando un primo sistema domotico base.
In questo progetto estendiamo il concetto per controllare più luci contemporaneamente, utilizzando più relè gestiti da Arduino tramite il modulo ESP8266.
L’obiettivo è simulare una piccola smart home, in cui ogni uscita rappresenta una stanza o una luce diversa, controllabile direttamente da una pagina web.
Questa evoluzione permette di comprendere come gestire più dispositivi nello stesso sistema, mantenendo un’interfaccia semplice e intuitiva accessibile da qualsiasi browser.
Nel progetto precedente abbiamo controllato un singolo relè tramite browser, realizzando un primo sistema domotico base.
In questo progetto estendiamo il concetto per controllare più luci contemporaneamente, utilizzando più relè gestiti da Arduino tramite il modulo ESP8266.
L’obiettivo è simulare una piccola smart home, in cui ogni uscita rappresenta una stanza o una luce diversa, controllabile direttamente da una pagina web.
Questa evoluzione permette di comprendere come gestire più dispositivi nello stesso sistema, mantenendo un’interfaccia semplice e intuitiva accessibile da qualsiasi browser.
🧰 Materiale necessario
- Arduino UNO
- Modulo ESP8266
- Modulo relè 2 canali (o 3/4 canali)
- Breadboard
- Cavi jumper
🛒 Componenti e risorse consigliate
👉 Kit Arduino consigliato: https://amzn.to/41fmFNK
💡 Con un solo kit puoi realizzare la maggior parte dei progetti presenti nel sito.
📚 I miei libri consigliati
👉 Arduino per tutti – Volume 1: https://amzn.to/4rGNxB9
👉 Arduino per tutti – Volume 2: https://amzn.to/4bkfaey
👉 Arduino per tutti – Volume 3: https://amzn.to/4bogjAg
👉 Kit Arduino consigliato: https://amzn.to/41fmFNK
💡 Con un solo kit puoi realizzare la maggior parte dei progetti presenti nel sito.
📚 I miei libri consigliati
👉 Arduino per tutti – Volume 1: https://amzn.to/4rGNxB9
👉 Arduino per tutti – Volume 2: https://amzn.to/4bkfaey
👉 Arduino per tutti – Volume 3: https://amzn.to/4bogjAg
🔌 Schema di collegamento
Modulo relè (2 canali)
Modulo ESP8266
⚠️ Tutti i GND devono essere collegati tra loro.
Modulo relè (2 canali)
- VCC → 5V Arduino
- GND → GND Arduino
- IN1 → Pin 7 Arduino
- IN2 → Pin 8 Arduino
Modulo ESP8266
- VCC → 3.3V Arduino
- GND → GND Arduino
- TX → Pin 10 Arduino
- RX → Pin 11 Arduino (consigliato partitore di tensione)
- CH_PD → 3.3V
⚠️ Tutti i GND devono essere collegati tra loro.
📚 Librerie necessarie
Questo progetto utilizza solo librerie già presenti nell’IDE Arduino.
Questo progetto utilizza solo librerie già presenti nell’IDE Arduino.
💻 Codice Arduino
Inserisci nome WiFi e password prima di caricare il codice.
Inserisci nome WiFi e password prima di caricare il codice.
// ============================================
// Progetto 90 - Controllo luci da web
// Controllo multi-relè via browser
// ============================================
#include <SoftwareSerial.h>
SoftwareSerial esp(10, 11);
String ssid = "NOME_WIFI";
String password = "PASSWORD_WIFI";
int rele1 = 7;
int rele2 = 8;
void setup() {
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
digitalWrite(rele1, LOW);
digitalWrite(rele2, LOW);
Serial.begin(9600);
esp.begin(115200);
sendCommand("AT", 2000);
sendCommand("AT+CWMODE=1", 2000);
String cmd = "AT+CWJAP=\"" + ssid + "\",\"" + password + "\"";
sendCommand(cmd, 6000);
sendCommand("AT+CIPMUX=1", 2000);
sendCommand("AT+CIPSERVER=1,80", 2000);
}
void loop() {
if (esp.available()) {
String request = esp.readString();
// Controllo luce 1
if (request.indexOf("L1=ON") != -1) {
digitalWrite(rele1, HIGH);
}
if (request.indexOf("L1=OFF") != -1) {
digitalWrite(rele1, LOW);
}
// Controllo luce 2
if (request.indexOf("L2=ON") != -1) {
digitalWrite(rele2, HIGH);
}
if (request.indexOf("L2=OFF") != -1) {
digitalWrite(rele2, LOW);
}
String webpage =
"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"
"<html><head>"
"<meta name='viewport' content='width=device-width, initial-scale=1'>"
"<style>"
"body{font-family:Arial;text-align:center;background:#111;color:#fff;}"
"a{display:block;margin:15px;padding:15px;background:#00ffcc;color:#000;border-radius:10px;text-decoration:none;}"
"</style>"
"</head><body>"
"<h1>Controllo Luci</h1>"
"<h3>Luce 1</h3>"
"<a href='/?L1=ON'>ACCENDI</a>"
"<a href='/?L1=OFF'>SPEGNI</a>"
"<h3>Luce 2</h3>"
"<a href='/?L2=ON'>ACCENDI</a>"
"<a href='/?L2=OFF'>SPEGNI</a>"
"</body></html>";
String sendCmd = "AT+CIPSEND=0," + String(webpage.length());
sendCommand(sendCmd, 2000);
esp.print(webpage);
sendCommand("AT+CIPCLOSE=0", 2000);
}
}
void sendCommand(String cmd, int timeout) {
esp.println(cmd);
long int time = millis();
while ((time + timeout) > millis()) {
while (esp.available()) {
Serial.write(esp.read());
}
}
}
// Progetto 90 - Controllo luci da web
// Controllo multi-relè via browser
// ============================================
#include <SoftwareSerial.h>
SoftwareSerial esp(10, 11);
String ssid = "NOME_WIFI";
String password = "PASSWORD_WIFI";
int rele1 = 7;
int rele2 = 8;
void setup() {
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
digitalWrite(rele1, LOW);
digitalWrite(rele2, LOW);
Serial.begin(9600);
esp.begin(115200);
sendCommand("AT", 2000);
sendCommand("AT+CWMODE=1", 2000);
String cmd = "AT+CWJAP=\"" + ssid + "\",\"" + password + "\"";
sendCommand(cmd, 6000);
sendCommand("AT+CIPMUX=1", 2000);
sendCommand("AT+CIPSERVER=1,80", 2000);
}
void loop() {
if (esp.available()) {
String request = esp.readString();
// Controllo luce 1
if (request.indexOf("L1=ON") != -1) {
digitalWrite(rele1, HIGH);
}
if (request.indexOf("L1=OFF") != -1) {
digitalWrite(rele1, LOW);
}
// Controllo luce 2
if (request.indexOf("L2=ON") != -1) {
digitalWrite(rele2, HIGH);
}
if (request.indexOf("L2=OFF") != -1) {
digitalWrite(rele2, LOW);
}
String webpage =
"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"
"<html><head>"
"<meta name='viewport' content='width=device-width, initial-scale=1'>"
"<style>"
"body{font-family:Arial;text-align:center;background:#111;color:#fff;}"
"a{display:block;margin:15px;padding:15px;background:#00ffcc;color:#000;border-radius:10px;text-decoration:none;}"
"</style>"
"</head><body>"
"<h1>Controllo Luci</h1>"
"<h3>Luce 1</h3>"
"<a href='/?L1=ON'>ACCENDI</a>"
"<a href='/?L1=OFF'>SPEGNI</a>"
"<h3>Luce 2</h3>"
"<a href='/?L2=ON'>ACCENDI</a>"
"<a href='/?L2=OFF'>SPEGNI</a>"
"</body></html>";
String sendCmd = "AT+CIPSEND=0," + String(webpage.length());
sendCommand(sendCmd, 2000);
esp.print(webpage);
sendCommand("AT+CIPCLOSE=0", 2000);
}
}
void sendCommand(String cmd, int timeout) {
esp.println(cmd);
long int time = millis();
while ((time + timeout) > millis()) {
while (esp.available()) {
Serial.write(esp.read());
}
}
}
🌐 Come accedere alla pagina web
Dopo aver caricato il codice, il modulo ESP8266 si connette automaticamente alla rete WiFi configurata.
Apri il Monitor Seriale per individuare l’indirizzo IP assegnato dal router. Una volta ottenuto, inseriscilo nel browser di uno smartphone o computer collegato alla stessa rete.
La pagina mostrerà i controlli per gestire più luci in modo indipendente.
Dopo aver caricato il codice, il modulo ESP8266 si connette automaticamente alla rete WiFi configurata.
Apri il Monitor Seriale per individuare l’indirizzo IP assegnato dal router. Una volta ottenuto, inseriscilo nel browser di uno smartphone o computer collegato alla stessa rete.
La pagina mostrerà i controlli per gestire più luci in modo indipendente.
⚙️ Come funziona
Arduino riceve le richieste dal browser e analizza i comandi contenuti nell’URL.
Ogni comando corrisponde a una luce specifica, permettendo di accendere o spegnere i relè in modo indipendente.
Questo sistema dimostra come sia possibile gestire più dispositivi nello stesso progetto, creando una base solida per sistemi domotici più complessi.
Arduino riceve le richieste dal browser e analizza i comandi contenuti nell’URL.
Ogni comando corrisponde a una luce specifica, permettendo di accendere o spegnere i relè in modo indipendente.
Questo sistema dimostra come sia possibile gestire più dispositivi nello stesso progetto, creando una base solida per sistemi domotici più complessi.
🔁 Varianti possibili
- Aggiungere più relè (4–8 canali)
- Interfaccia grafica più avanzata
- Controllo da remoto via internet
- Automazioni con sensori