Come inviare e ricevere SMS con Arduino

In questo articolo vedremo come interfacciare un modulo GSM con Arduino. Esistono diversi tipi di moduli GSM disponibili sul mercato. Per questo tutorial usiamo il modulo più popolare: SIM900. L’interfacciamento di un modulo GSM con Arduino è piuttosto semplice. Hai solo bisogno di effettuare 3 connessioni tra il modulo GSM e Arduino. Dopodiché potrai ad esempio inviare SMS sul tuo smartphone (e viceversa), cosa utile se vuoi realizzare un allarme o altre applicazioni domotiche. Puoi perfino usare il modulo GSM per telefonare o ricevere telefonate, sebbene ciò sia in pratica meno utile.

Un modulo GSM è fondamentalmente un modem GSM (come SIM900) collegato a un PCB con diversi tipi di output prelevati dalla scheda – diciamo output TTL (per Arduino, 8051 e altri microcontrollori) e output RS232 per interfacciarsi direttamente con un PC (personal computer). La scheda avrà anche pin o disposizioni per collegare microfono e altoparlante, per estrarre + 5 V o altri valori di alimentazione e connessioni di terra. Questo tipo di disposizioni varia a seconda dei diversi moduli.

Un modulo GSM, o shield GSM per Arduino, è particolarmente utile in quanto consente di: connetterti a Internet tramite la rete GPRS; inviare e ricevere SMS; effettuare e ricevere chiamate telefoniche Le sue capacità la rendono perfetta per progetti con Arduino come:

  • Controllo remoto di apparecchi elettronici – invio di un SMS per accendere qualcosa;
  • Ricevere notifiche: inviare SMS sul tuo cellulare se viene rilevato un movimento in casa;
  • Ricevere dati da un sensore: invia SMS periodici al tuo cellulare con dati meteorologici giornalieri.

Il più comune modulo GSM per Arduino, il SIM900, che puoi trovare ad es. qui.

La scelta del modulo GSM per Arduino

Molte varietà di modem GSM e moduli GSM tra cui scegliere sono oggi disponibili sul mercato. Per il nostro progetto di connessione di un modem o modulo GSM ad Arduino – e quindi di inviare e ricevere SMS usando Arduino – è sempre bene scegliere un modulo GSM compatibile Arduino – che è un modulo GSM con disposizioni di uscita TTL. Utilizziamo il modulo GSM SIM900 – Ciò significa che il modulo supporta la comunicazione nella banda 900 MHz (o similare) e utilizza una connessione 2G.

Controlla i requisiti di alimentazione del modulo GSM: i moduli GSM sono prodotti da diverse società. Tutti hanno specifiche di alimentazione in ingresso diverse. Devi ricontrollare i requisiti di alimentazione dei moduli GSM. Il nostro modulo GSM richiede un input di 12 V. Quindi lo alimento usando un alimentatore 12V, 1A DC. Ho visto moduli GSM che richiedono 15 V e alcuni altri tipi che richiedono solo 5 V di input. Se hai un modulo 5V, puoi alimentarlo direttamente dall’uscita 5V di Arduino.

Prima di acquistare un modulo GSM, verifica inoltre la presenza di pin di uscita TTL nel modulo: è possibile inviare i dati dal modulo GSM direttamente ad Arduino solo se il modulo è abilitato con pin di uscita TTL. Altrimenti devi convertire i dati RS232 in TTL usando MAX232 IC e inviarli ad Arduino. La maggior parte dei moduli GSM presenti sul mercato sono dotati di pin di uscita TTL. Assicurati solo di acquistare quello giusto. Se scegli il SIM900, vai già sul sicuro (sappi che la rete 2G non verrà smantellata).

Caratteristiche del modulo GSM SIM 900.

Ecco alcune delle caratteristiche più importanti della shield GSM SIM900:

  • Compatibile con Arduino e suoi cloni
  • Basata sul modulo SIM900 di SIMCOM
  • Consente di inviare SMS, MMS, GPRS e audio tramite UART utilizzando i comandi AT.
  • Dispone di 12 GPIO, 2 PWM e ADC integrato del modulo SIM900
  • Quad Band: 850; 900; 1800 e 1900 MHZ, funziona in tutti i paesi con reti GSM (2G)
  • Controllo tramite comandi AT
  • Supporta RTC (orologio in tempo reale) – ha un supporto per una batteria CR1220 da 3 V sul retro
  • Dispone di prese per microfono e cuffie per le telefonate.

Assicurati di avere una copertura su una rete GSM (2G). Si consiglia di utilizzare una SIM con piano prepagato o un piano con SMS illimitati a scopo di test. Altrimenti, se qualcosa va storto, potresti dover pagare una grossa fattura per centinaia di messaggi SMS inviati per errore. La shield utilizza la dimensione della carta SIM originale, non micro o nano. Se si dispone di micro o nano, è possibile prendere in considerazione l’acquisto di un adattatore per dimensioni della scheda SIM.

Avvio del modulo e connessione ad Arduino

Per utilizzare la carta SIM con un modulo GSM, è necessario disattivare il blocco pin. Il modo più semplice per farlo è inserire la carta SIM nello smartphone e disattivare il blocco pin nelle impostazioni di sicurezza del telefono. Nel mio caso, dovevo passare attraverso: Impostazioni> Impostazioni avanzate> Sicurezza> Blocco SIM e disattiva la scheda SIM di blocco con il pin. Il modulo GSM SIM900 ha una presa DC per l’alimentazione, come mostrato nella figura seguente.

La presa DC per l’alimentazione del modulo GSM SIM900.

Nel SIM900, accanto al jack di alimentazione è presente un interruttore a levetta per selezionare la fonte di alimentazione. Accanto all’interruttore a levetta sulla scheda, c’è una freccia che indica la posizione dell’interruttore per utilizzare un alimentatore esterno: sposta l’interruttore a levetta per utilizzare l’alimentatore esterno come mostrato sopra. Per alimentare la shield, si consiglia di utilizzare un alimentatore da 5 V in grado di fornire 2 A (oppure da 9V 1A o da 12V 1A).

Per avviare il modulo GSM segui la seguente procedura:

  1. Inserisci la scheda SIM nel modulo GSM e bloccala.
  2. Assicurati che l’antenna GSM sia inserita e ben connessa.
  3. Collega l’alimentatore al modulo GSM.
  4. Accendi il modulo. Nel caso della SIM900, per accendere / spegnere basta premere il tasto di accensione per circa 2 secondi.
  5. Ora attendi un po ‘di tempo (diciamo 1 minuto) e vedrai lampeggiare il “LED di stato” o “LED di rete” (il modulo GSM impiegherà del tempo per stabilire la connessione con la rete mobile). Il led lampeggerà ogni 800 ms fino a quando non trova la rete.
  6. Una volta stabilita la connessione, il LED di stato / rete lampeggerà ogni 3 secondi. Puoi provare a effettuare una chiamata al numero di cellulare della scheda SIM all’interno del modulo GSM. Se si sente uno squillo, il modulo GSM ha stabilito correttamente la connessione di rete.

Un programmatore FTDI, utile per testare la shield GSM inviando i comandi AT dal monitor seriale IDE Arduino. Nella figura, sono mostrati i relativi collegamenti.

Puoi verificare se il modulo GSM SIM900 funziona correttamente inviando comandi AT dall’IDE di Arduino utilizzando un programmatore FTDI, che è un modulo ad hoc (lo puoi trovare qui).

  • Collega il programmatore FTDI alla shield GSM come mostrato nella figura.
  • Apri l’IDE Arduino e seleziona la porta COM corretta.
  • Apri il monitor seriale
  • Seleziona 19200 baud rate – l’impostazione predefinita dello scudo è 19200 – e Ritorno a capo. Scrivi AT nella casella evidenziata in rosso, quindi premi Invio.

Il risultato del test della shield GSM SIM900.

Esistono due modi per collegare il modulo GSM ad Arduino. In ogni caso, la comunicazione tra Arduino e il modulo GSM è seriale. Quindi dovremo usare i pin seriali di Arduino (Rx e Tx). Perciò, se stai seguendo questo metodo, puoi collegare il pin Tx del modulo GSM al pin Rx di Arduino e il pin Rx del modulo GSM al pin Tx di Arduino: GSM Tx -> Arduino Rx e GSM Rx -> Arduino Tx. Ora collega il pin di terra di Arduino al pin di terra del modulo GSM. Questo è tutto: hai effettuato 3 collegamenti e il cablaggio è terminato!

Ora puoi caricare diversi programmi per comunicare con il modulo GSM e farlo funzionare. Il problema con questa connessione è che, durante la programmazione, Arduino usa le porte seriali per caricare il programma dall’IDE di Arduino. Se questi pin vengono usati nel cablaggio, il programma non verrà caricato correttamente su Arduino. Quindi devi scollegare i cavi in Rx e Tx ogni volta che carichi il programma su Arduino, dopodiché è possibile ricollegare questi pin e far funzionare il sistema.

Per evitare questa difficoltà, puoi usare un metodo alternativo in cui due pin digitali di Arduino sono impiegati per la comunicazione seriale. Per questo metodo dobbiamo selezionare due pin di Arduino abilitati per il PWM. Quindi puoi scegliere i pin 9 e 10 (che sono pin abilitati per PWM). Questo metodo è reso possibile con la libreria SoftwareSerial di Arduino, che replica le funzioni hardware e consente la comunicazione seriale di dati tramite altri pin digitali di Arduino.

La connessione ad Arduino con il metodo alternativo illustrato nel testo.

Qui sopra è riportato lo schema circuitale per collegare il modulo GSM ad Arduino con questo secondo metodo,e quindi utilizzare il circuito per inviare sms e ricevere sms usando Arduino e modem GSM. Effettua i collegamenti come mostrato. Ora andiamo alla parte di codifica, cioè allo sketch per Arduino. Puoi trovare qui il programma per fare in modo che Arduino invii sms e riceva sms usando il modulo GSM. Ovviamente, affinché funzioni, dovrai prima installare la libreria SoftwareSerial.

Se vuoi invece un programma solo per inviare SMS con il modulo SIM900, puoi copiare e incollare su Arduino IDE il relativo sketch da qui (aggiungi la solita libreria). Nota che questo sketch usa i pin 7 e 8, quindi dovrai collegare il modulo GSM ad Arduino tramite questi due pin digitali e non attraverso i pin 9 e 10. La figura qui sotto mostra lo schema del collegamento da effettuare.

Devi inoltre modificare, naturalmente, il numero di cellulare del destinatario (sostituisci i “+” con il numero di telefono del destinatario in formato internazionale). Aggiungi inoltre il testo dell’SMS che vuoi inviare, come mostrato nella figura qui sotto.

Le due righe di istruzioni dello sketch da editare.

Il programma di gestione del modulo GSM

Veniamo alla spiegazione del primo programma (quello che usa i pin 9 e 10). Il programma in questione ha due obiettivi, come descritto di seguito:

  1. Inviare SMS, utilizzando Arduino e il modulo GSM, a un numero di cellulare specificato all’interno del programma;
  2. Ricevere SMS, tramite Arduino e Modulo GSM, sulla scheda SIM caricata nel Modulo GSM.

Nel nostro codice, il pin numero 9 fungerà da Rx di Arduino e 10 fungerà da Tx di Arduino. Il primo compito è impostare la velocità di trasmissione della libreria SoftwareSerial per comunicare con il modulo GSM. Raggiungiamo questo obiettivo invocando la funzione mySerial.begin. Il secondo compito è impostare la velocità di trasmissione del monitor seriale di Arduino IDE. Lo facciamo invocando la funzione Serial.begin. Entrambi dovrebbero essere impostati alla stessa velocità di trasmissione (9600 bit).

Ora andiamo al programma reale all’interno di loop (). Per semplificare le cose, abbiamo sviluppato un programma basato sull’input dell’utente. Il programma cerca l’input dell’utente tramite il monitor seriale di Arduino. Se l’ingresso è “s”, il programma invocherà la funzione per inviare un sms dal modulo GSM. Se l’input dell’utente è “r”, il programma invocherà la funzione per ricevere un SMS live dal modulo GSM e visualizzarlo sul monitor seriale di Arduino. L’intero programma è così molto semplice!

Grazie al modulo GSM potrai ricevere informazioni dai tuoi sensori sullo smartphone.

Le funzioni SendMessage () e RecieveMessage () sono le funzioni in cui effettivamente inviamo comandi al modulo GSM da Arduino. Questi comandi per comunicare con il modulo GSM sono chiamati comandi AT. Esistono diversi comandi per eseguire diverse attività utilizzando il modulo GSM. Puoi leggere la libreria completa dei comandi AT per capire tutto ciò che è possibile con il modulo GSM.

SendMessage () è la funzione creata nello sketch Arduino per inviare un SMS. Per inviare un SMS, dovremo prima impostare il nostro modulo GSM in modalità Testo. Ciò si ottiene inviando un comando AT “AT + CMGF = 1”. Inviamo questo comando scrivendolo alla porta SoftwareSerial. Per raggiungere questo obiettivo utilizziamo la funzione mySerial.println (). mySerial.println scrive i dati sulla porta seriale del software (il pin Tx del nostro seriale software – ovvero il pin 10) e questo dato verrà acquisito dal modulo GSM (tramite il suo pin Rx). Dopo aver impostato il modulo GSM in modalità Testo, dovrai indicare il numero di cellulare a cui inviare l’SMS.

Ciò si ottiene con il comando AT “AT+CMGS=\”+91xxxxxxxxxx\”\r” – dove puoi sostituire tutte le x con il numero di cellulare. Poi dovremo inviare il contenuto effettivo dell’SMS. La fine del contenuto SMS è identificata dal simbolo CTRL + Z. Il valore ASCII di questo CTRL + Z è 26. Quindi inviamo un char (26) al modulo GSM usando la linea mySerial.println ((char) 26); ciascun comando AT può essere seguito da un ritardo di 1 secondo. Dobbiamo dedicare del tempo affinché il modulo GSM risponda correttamente. Una volta inviati questi comandi al modulo GSM, si riceverà un SMS al numero di cellulare impostato.

RecieveMessage (), invece, è la funzione per ricevere un SMS (un SMS live). Il comando AT per ricevere un SMS live è “AT + CNMI = 2,2,0,0,0” – dobbiamo solo inviare questo comando al modulo GSM e applicare un ritardo di 1 secondo. Una volta inviato questo comando, prova a inviare un SMS al numero della carta SIM inserito nel modulo GSM. Vedrai gli SMS che hai inviato visualizzati sul tuo monitor seriale Arduino. Esistono diversi comandi AT per compiti diversi. Se vuoi leggere tutti gli SMS memorizzati nella tua carta SIM, invia il seguente comando AT al modulo GSM: “AT + CMGL = \” ALL \ “\ r”.