📡 Progetto Arduino #65

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.

Difficoltà Intermedia
Comunicazione GSM / SMS
Comandi ON · OFF · STATO

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.

Comandi SMS utilizzati:
ON → attiva il relè
OFF → disattiva il relè
STATO → richiede lo stato attuale del relè

Modulo GSM SIM900

GSM Shield SIM900 per Arduino
Modulo SIM900 Arduino

Componenti necessari

🔵 Arduino Uno
📡 GSM Shield SIM900
⚡ Modulo relè
🔌 Cavetti di collegamento
🧩 Breadboard

🧰 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:

Sketch → #include libreria → Aggiungi libreria da file .ZIP
Nota importante: questo progetto utilizza una libreria GSM specifica per il modulo SIM900. Installa il file ZIP indicato nella sezione download prima di compilare.

Schema dei collegamenti

Nel circuito originale il modulo relè viene collegato al pin digitale 12 di Arduino.

Schema Arduino SIM900 relè controllo SMS

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

Arduino GSM SIM900 controllo tramite SMS

File da scaricare

Sketch_sms_sim900_ok.ino Sketch Arduino originale del progetto
⬇ Scarica sketch
Libreria GSM File ZIP necessario per il progetto SIM900
⬇ Scarica libreria

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.