Arduino SIM900: controllo di un relè tramite SMS
In questo progetto utilizziamo Arduino Uno e un modulo GSM Shield SIM900 per ricevere messaggi SMS e controllare a distanza un relè collegato al pin 12.
Introduzione
In questo tutorial vediamo come programmare Arduino Uno per ricevere messaggi SMS tramite un GSM Shield SIM900.
Il progetto permette di controllare da remoto un relè collegato al pin 12 di Arduino.
ON → attiva il relè
OFF → disattiva il relè
STATO → richiede lo stato attuale del relè
Modulo GSM SIM900
Componenti necessari
🧰 Non hai ancora i componenti?
Un kit Arduino completo può essere utile per avere breadboard, cavetti, resistenze e molti altri componenti riutilizzabili.
Vedi il kit Arduino consigliato → Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza costi aggiuntivi per te.📘 Vuoi approfondire Arduino?
Puoi continuare con i miei libri dedicati ad Arduino, programmazione ed elettronica pratica.
Scopri i miei libri su Arduino → Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza costi aggiuntivi per te.Libreria GSM necessaria
Prima di compilare lo sketch è necessario installare la libreria GSM utilizzata dal progetto.
Nell’IDE Arduino puoi installarla tramite:
Schema dei collegamenti
Nel circuito originale il modulo relè viene collegato al pin digitale 12 di Arduino.
Codice Arduino
Lo sketch controlla continuamente la presenza di nuovi SMS sulla SIM. Quando viene ricevuto un comando valido, Arduino modifica lo stato del relè.
/*
Accende e spegne un RELE in base all'SMS inviato:
ON => Accende il RELE
OFF => Spegne il RELE
STATO => Restituisce lo stato del pin
Per maggiori info:
www.progettiarduino.com
*/
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;
int rele = 12;
int numdata;
boolean started = false;
char smsbuffer[160];
char Mittente[20];
void setup()
{
Serial.begin(9600);
Serial.println("ESEMPIO INVIO/RICEZIONE SMS");
pinMode(rele, OUTPUT);
digitalWrite(rele, LOW);
if (gsm.begin(2400))
{
Serial.println("STATUS Modulo GSM = PRONTO");
started = true;
}
else
{
Serial.println("STATUS Modulo GSM = INATTIVO");
}
}
boolean SerialRead(char s[])
{
int i = 0;
if (Serial.available() > 0)
{
while (Serial.available() > 0)
{
s[i] = Serial.read();
delay(10);
i++;
}
}
s[i] = '\0';
return (i != 0);
}
void loop()
{
char inSerial[50];
char position;
if (started)
{
position = sms.IsSMSPresent(SMS_ALL);
if (position)
{
sms.GetSMS(
position,
Mittente,
smsbuffer,
160
);
Serial.print(
"Comando Ricevuto [tel. "
+ String(Mittente)
+ String("]: ")
+ String(smsbuffer)
);
if (strcmp(smsbuffer, "ON") == 0)
{
digitalWrite(rele, HIGH);
Serial.println(
" => Accendo il RELE"
);
}
else if (strcmp(smsbuffer, "OFF") == 0)
{
digitalWrite(rele, LOW);
Serial.println(
" => Spengo il RELE"
);
}
else if (strcmp(smsbuffer, "STATO") == 0)
{
if (digitalRead(rele) == HIGH)
{
sms.SendSMS(
Mittente,
"STATUS: RELE Acceso"
);
Serial.println(
" => il RELE e' Acceso"
);
}
else
{
sms.SendSMS(
Mittente,
"STATUS: RELE Spento"
);
Serial.println(
" => il RELE e' Spento"
);
}
}
else
{
Serial.println(
" => non riconosciuto!"
);
}
sms.DeleteSMS(position);
}
delay(1000);
}
}
Come modificare i comandi SMS
I comandi ricevuti vengono confrontati con le stringhe presenti nel codice.
Per esempio:
if (strcmp(smsbuffer, "ON") == 0)
Puoi sostituire ON,
OFF e STATO
con altri testi, purché lo stesso comando venga poi
inviato tramite SMS.
Controllo tramite SMS
File da scaricare
Cosa hai imparato
Con questo progetto hai visto come Arduino può ricevere comandi da remoto tramite rete GSM e utilizzare un messaggio SMS per controllare un’uscita digitale.
Lo stesso principio può essere esteso al controllo di più relè, sistemi di allarme, automazioni e dispositivi remoti.

