Arduino SIM900: controllare un relè tramite SMS
Usiamo Arduino Uno e un modulo GSM SIM900 per ricevere comandi SMS, accendere o spegnere un relè sul pin 12 e richiederne lo stato da remoto.
Il modulo GSM SIM900
SIM900 consente ad Arduino di utilizzare la rete cellulare per funzioni come SMS e comunicazione dati. In questo progetto utilizziamo soltanto la gestione dei messaggi di testo.
Cosa può fare il sistema
| SMS | Funzione |
|---|---|
ON | Attiva il relè collegato al pin D12 |
OFF | Disattiva il relè |
STATO | Invia al mittente un SMS con lo stato del relè |
Materiale necessario
🧰 Kit Arduino consigliato
Un kit completo è utile per avere breadboard, cavetti, resistenze, LED e molti componenti di base per sperimentare con Arduino.
👉 Guarda il kit Arduino consigliatoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
📘 Vuoi imparare Arduino passo dopo passo?
Se vuoi approfondire e realizzare progetti più completi, puoi dare un’occhiata anche ai miei libri dedicati ad Arduino. All’interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.
👉 Scopri i miei libri su ArduinoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
Schema del circuito
Schema del controllo remoto del relè tramite SIM900. L’immagine mantiene una larghezza massima di 443 px.
Collegamento del relè
Nel programma il relè è associato al pin digitale D12:
const int rele = 12;
Il pin Arduino deve comandare l’ingresso di un modulo relè adatto, non direttamente la bobina di un relè privo di circuito di pilotaggio.
Installare la libreria GSM per SIM900
Questo sketch utilizza le librerie SIM900.h, SoftwareSerial.h e sms.h. È quindi necessario installare la libreria dedicata prima della compilazione.
⬇️ Scarica la libreria GSM SIM900
Codice Arduino commentato
/*
ARDUINO + SIM900: CONTROLLO DI UN RELÈ TRAMITE SMS
Comandi:
ON -> attiva il relè
OFF -> disattiva il relè
STATO -> invia un SMS con lo stato del relè
Relè -> D12
*/
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;
// Pin collegato al relè
const int rele = 12;
// Buffer per testo SMS e numero mittente
char smsbuffer[160];
char mittente[20];
bool started = false;
void setup() {
Serial.begin(9600);
pinMode(rele, OUTPUT);
// All'avvio il relè resta spento
digitalWrite(rele, LOW);
Serial.println("Avvio modulo GSM SIM900...");
// Inizializzazione GSM
if (gsm.begin(2400)) {
Serial.println("Modulo GSM pronto");
started = true;
} else {
Serial.println("Modulo GSM non disponibile");
}
}
void loop() {
if (!started) {
return;
}
// Cerca un SMS presente sulla SIM
char posizione = sms.IsSMSPresent(SMS_ALL);
if (posizione) {
// Legge mittente e contenuto del messaggio
sms.GetSMS(posizione, mittente, smsbuffer, 160);
// Converte il testo in String per semplificare il confronto
String comando = String(smsbuffer);
comando.trim();
comando.toUpperCase();
Serial.print("SMS da ");
Serial.print(mittente);
Serial.print(": ");
Serial.println(comando);
// ------------------------------------------------------
// COMANDO ON
// ------------------------------------------------------
if (comando == "ON") {
digitalWrite(rele, HIGH);
Serial.println("Relè acceso");
}
// ------------------------------------------------------
// COMANDO OFF
// ------------------------------------------------------
else if (comando == "OFF") {
digitalWrite(rele, LOW);
Serial.println("Relè spento");
}
// ------------------------------------------------------
// COMANDO STATO
// ------------------------------------------------------
else if (comando == "STATO") {
if (digitalRead(rele) == HIGH) {
sms.SendSMS(mittente, "STATUS: RELE Acceso");
Serial.println("Stato inviato: relè acceso");
}
else {
sms.SendSMS(mittente, "STATUS: RELE Spento");
Serial.println("Stato inviato: relè spento");
}
}
// ------------------------------------------------------
// COMANDO NON RICONOSCIUTO
// ------------------------------------------------------
else {
Serial.println("Comando SMS non riconosciuto");
}
// Elimina l'SMS appena elaborato
sms.DeleteSMS(posizione);
}
delay(1000);
}
Come funziona lo sketch
1. Avvio del modulo GSM
Nel setup() Arduino inizializza la comunicazione seriale e prova ad avviare il modulo con gsm.begin(2400). Se l’operazione riesce, il sistema entra nello stato operativo.
2. Ricerca degli SMS
sms.IsSMSPresent(SMS_ALL) controlla se sulla SIM è presente un messaggio. Se ne trova uno, restituisce la posizione in memoria.
3. Lettura del mittente e del testo
Con sms.GetSMS() vengono recuperati il numero telefonico del mittente e il contenuto del messaggio.
4. Comandi ON e OFF
Il comando ON porta D12 a HIGH, mentre OFF lo porta a LOW.
5. Comando STATO
Quando arriva STATO, Arduino legge l’uscita D12 e risponde allo stesso numero telefonico con un SMS che indica se il relè è acceso oppure spento.
6. Eliminazione del messaggio
Dopo aver elaborato il comando, lo sketch elimina l’SMS dalla memoria del modem per evitare di processarlo nuovamente.
Personalizzare i comandi
Puoi sostituire le parole ON, OFF e STATO con comandi differenti. Per esempio potresti usare LUCE ON, LUCE OFF oppure parole più adatte alla funzione controllata.
Esempio di modifica delle stringhe utilizzate come comandi SMS.
Alimentazione del SIM900
Il modem GSM può richiedere picchi di corrente importanti durante la registrazione alla rete e la trasmissione radio. Un’alimentazione insufficiente può causare riavvii, perdita della rete o SMS non inviati.
Verificare la rete cellulare
Prima di concentrarti sul codice assicurati che la SIM e il modulo riescano realmente a registrarsi sulla rete disponibile nella tua zona. SIM900 è un modem GSM/GPRS e la possibilità di utilizzarlo dipende dalla disponibilità di una rete cellulare compatibile con il modulo.
Scarica i file
⬇️ Scarica sms_sim900_ok.ino ⬇️ Scarica libreria GSM
Debug rapido
- verifica che SIM900 completi la registrazione alla rete;
- controlla che la SIM possa ricevere e inviare SMS;
- verifica l’alimentazione del modem;
- controlla che il relè sia realmente collegato a D12;
- invia esattamente
ON,OFFoSTATO; - usa il Monitor Seriale a 9600 baud per leggere i messaggi di debug;
- se il relè lavora al contrario, controlla se il modulo è active LOW.
Varianti del progetto
- controllare più relè;
- autorizzare soltanto uno o più numeri telefonici;
- inviare una conferma anche dopo ON e OFF;
- leggere sensori e restituire i valori tramite SMS;
- creare un allarme che invia automaticamente un messaggio;
- salvare lo stato del relè in EEPROM;
- utilizzare un modem cellulare più recente se la rete GSM non è disponibile.
Cosa devi ricordare
- SIM900 riceve i comandi tramite SMS.
- Il relè viene comandato dal pin D12.
ONattiva l’uscita eOFFla disattiva.STATOrestituisce un SMS al mittente.- La libreria SIM900 deve essere installata nell’IDE.
- L’alimentazione del modem GSM è fondamentale per un funzionamento stabile.
Domande frequenti
Posso cambiare il pin del relè?
Sì. Modifica la costante rele e collega il modulo relè al nuovo pin scelto.
Posso usare parole diverse da ON e OFF?
Sì. Modifica le stringhe confrontate nello sketch mantenendo identico il testo che invierai tramite SMS.
Perché SIM900 si riavvia quando cerca la rete?
Una causa frequente è un’alimentazione incapace di sostenere i picchi di corrente del modem. Verifica alimentatore, cablaggio e tensione prevista dalla tua scheda SIM900.
Il progetto funziona con qualsiasi rete mobile?
No. Il modem SIM900 richiede una rete cellulare compatibile con la tecnologia supportata dal modulo. Verifica la disponibilità del servizio nella tua zona prima di realizzare il circuito.

