Tuttavia, per quanto mi riguarda, il suo funzionamento (lato software e lato hardware) non è stato facilissimo da apprendere: questo è il motivo per cui ora scrivo questa piccola guida.
Il modulo GPRS SIM900
Si tratta di un modem GSM seriale che permatte di:
- accedere ad internet tramite connessione GPRS
- inviare e ricevere SMS
- inviare e ricevere chiamate ed intercettare i toni DTMF
Applicazioni
E’ ottimo per accendere da remoto un dispositivo (un termostato, il cancello del garage…) in modo semplice e veloce.
Caratteristiche
- Compatibile con Arduino (e compatibili);
- Funziona attraverso comandi seriali AT
- Funziona con 4 frequenze: 850; 900; 1800 e 1900 MHz e quindi in tutte le nazioni
- Integra anche un orologio RTC
- Integra i jack per le cuffie e il microfono per gestire le chiamate
Configurazione hardware
Inserimento SIM
Il primo passo è quello di inserire una scheda SIM senza codice PIN nella parte inferiore del modulo.
Alimentazione
Dovrete poi procurarvi un Alimentatore per il modulo, da collegare al jack DC, come mostrato nell’immagine. L’alimentatore deve essere da 5V e almeno 2A. In alternativa potete usare un alimentatore da 9V o 12V e 1A.
Dovete inoltre posizionare l’interruttore vicino al jack sulla modalità “external power”, come mostrato nell’immagine.
Per accendere la shield bisogna premere il piccolo pulsante indicato nella foto seguente. Questa operazione può essere bypassata collegando il pulsante ad un pin digitale di Arduino e gestendone l’accensione da codice.
Jumper porta seriale
Assicuratevi poi che i due piccoli jumper che permettono di scegliere la porta seriale siano spostati su D8 e D7 invece che su D1 e D0. Questo è fondamentale per il funzionamento con la libreria SIM900.h.
Collegamento ad Arduino
Effettuate il collegamento con Arduino UNO come mostrato nell’immagine.
Software
Per programmare il modulo SIM900 ho usato la libreria SIM900.h, che potete scaricare dalla relativa pagina github, scegliendo la voce “Download ZIP”.
Questa libreria mette a disposizione classi e metodi che permettono di dialogare con il modulo GSM in modo chiaro e pulito.
Lo sketch che segue permette la gestione di un relè tramite comandi inviati tramite SMS:
- ON accende il relè
- OFF lo spegne
- STATUS risponde con lo stato attuale del relè
#include "SIM900.h" #include #include "sms.h" #define RELAY 11 /* *** GSM SIM900 Settings *** */ SMSGSM sms; int numdata; boolean GSMOK = false; char SMSBuffer[160]; char sender[20]; void setup() { Serial.begin(9600); // GSM setup digitalWrite(9, HIGH); delay(2000); digitalWrite(9, LOW); int trys = 0; Serial.println("SIM900 setup..."); if (gsm.begin(2400)) { Serial.println("SIM900 successfully initialized."); GSMOK=true; } else Serial.println("Unable to initialize SIM900."); // Initialize digital PIN pinMode(RELAY, OUTPUT); digitalWrite(RELAY, HIGH); } void loop() { if (GSMOK) { char position = sms.IsSMSPresent(SMS_ALL); if (position) { sms.GetSMS(position, sender, SMSBuffer, 160); Serial.print("\n--- New SMS ---\n\n"); Serial.println("Tel.:" + String(sender)); Serial.println("Content: " + String(SMSBuffer)); if(String(SMSBuffer) == "ON") digitalWrite(RELAY, HIGH); else if(String(SMSBuffer) == "OFF") digitalWrite(RELAY, LOW); else if(String(SMSBuffer) == "STATUS") { String response; if(digitalRead(RELAY)) response = "ON"; else response = "OFF"; sms.SendSMS(sender, const_cast<char*>(response.c_str())); } sms.DeleteSMS(position); Serial.print("\n--- SMS Deleted ---\n\n"); } } delay(150); }