Passiamo alla delicata fase di programming con il modulo SIM800L di AZ-Delivery, e produciamo un nuovo sketch funzionante per gestire gli SMS.
Abbiamo imparato cosa sia un modulo di comunicazione GSM per Arduino, come funziona la rete GSM-GPRS, come si configura l’hardware e come funziona il software su Arduino IDE dopo aver caricato le opportune librerie di programmazione per il nostro SIM800L.
Siamo finalmente pronti per capire come ottenere il meglio dal modulo di comunicazione attraverso la scrittura di semplici programmi applicativi.
L’articolo di oggi si occuperà della gestione del modulo per creare SMS, inviarli, leggerli, e persino eseguire brevi telefonate.
Si parte!
Creiamo uno sketch
Siamo giunti alla fase di programming del modulo SIM800L. Iniziamo con uno sketch vuoto. Per prima cosa occorre includere le librerie e impostare i pin. Le seguenti righe di codice mostrano come farlo. (Naturalmente i commenti sono opzionzali, ma con Arduino sono anche fortemente consigliati…)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//Includere le librerie: #include <GSMSim.h> #include <SoftwareSerial.h> #define RX 7 // definiamo il RX-Pin su Arduino #define TX 8 // definiamo il TX-Pin su Arduino //#define RESET 2 // definiamo il Pin di reset su Arduino GSMSim gsm(RX, TX); //Chiamiamo la libreria fornendo i pin di comunicazione /* * altre opzioni: * GSMSim gsm; //RX=D7|TX=D8|Reset=D2|LEDpin=D13 as standard * GSMSim gsm(RX, TX, RESET); * GSMSim gsm(RX, TX, RESET, LED_PIN, LED_FLAG); */ |
Successivamente sarà anche possibile impostare il pin RESET. La definizione è ancora commentata. E’ possibile usare altri pin per RX e TX, l’importante è che TX sia connesso a RX e RX a TX.
Inviamo il nostro primo SMS
Per inviare un SMS, aggiungiamo allo sketch le seguenti righe:
1 2 3 4 5 6 7 8 9 10 11 |
void setup() { gsm.start(); // Inizializziamo il codice della libreria gsm.smsTextMode(true); // Attiviamo il modulo SMS char* Number = "+393471234567"; // Stringa contenente il numero da chiamare Message = "Hello World!"; // Definiamo il testo del messaggio // Inviamo il messaggio al numero spefcificato: gsm.smsSend(Number, Message); } void loop() { // Qui inseriremo il codice da eseguire in loop: } |
Quindi tutto ciò che occorre fare ora è caricare lo sketch finito su Arduino.
Ogni volta che riavvierai il tuo Atmega328p, verrà inviato un SMS al numero specificato. In altre parole, in questo modo è possibile gestire un log degli errori (tipicamente: mancanza di corrente elettrica) del tutto automatizzato, e senza necessità di connessioni di rete.
Come leggere un SMS ricevuto
Il modulo memorizza i messaggi in arrivo sulla carta SIM. A seconda del provider, possono essere da 10 a 50 SMS. I seguenti comandi elencano gli SMS non letti e visualizzano il primo SMS in memoria tramite il monitor seriale. Nota: sostituire solo il contenuto della funzione di setup nel codice precedente.
1 2 3 4 5 6 7 8 9 10 11 12 |
void setup() { gsm.start(); // Inizializza le funzioni di libreria Serial.begin(9600); // Inizializza il serial monitor while (!Serial){ } // Attendi risposta dal serial monitor // Mostra la lista dei messaggi non letti: Serial.println("List unread messages:"); Serial.println(gsm.smsListUnread()); // Mostra il primo SMS in memoria: Serial.println("The first SMS in memory is:"); Serial.println(gsm.smsRead(1)); // Se la memoria è vuota, l'output sarà *INDEX_NO_ERROR } |
Eseguire una chiamata
Per effettuare una chiamata, il microfono e l’altoparlante devono essere collegati. Anche il numero di telefono è qui definito in una variabile di tipo char. Ad esempio così:
1 |
char* Numero = "+393471234567"; |
Si risponde alla chiamata con
1 |
gsm.call(Numero); |
La chiamata termina con il comando:
1 |
gsm.callHangoff(); |
Consigli utili
La libreria contiene ulteriori esempi per la gestione del modulo AZ-Delivery SIM800L GSM GPRS. Troveremo ad esempio la possibilità di recuperare i dati dal modulo, stabilire una connessione Internet o inviare un’e-mail.
In caso di problemi con il modulo, verificare sempre prima se tutte le connessioni siano buone e senza falsi contatti. La tensione di ingresso deve essere compresa tra 3,4 V e 4,4 V CC. Le schede plug-in sono particolarmente soggette a falsi contatti. In tali casi la comunicazione seriale è soggetta alla captazione di rumore, e può quindi essere difficile.
Per sperimentare è possibile utilizzare un alimentatore USB e un modulo DC-DC Step Down se non si dispone di una batteria adatta. Un modulo adatto di AZ-Delivery è il modulo step-down DC-DC LM2596S. Tuttavia, avrai anche bisogno di un multimetro per regolare la tensione sul modulo.
Per caricare la batteria agli ioni di litio è possibile utilizzare un controller di carica con chip TP4056 Micro-USB.
Con un adattatore FTDI e un programma terminale è infine possibile inviare comandi AT, anche senza Arduino, dal PC al modulo. Il bit rate del modulo in vrso il terminale è 115200 bit/s.
Considerazioni finali
Una volta apprese le basi della comunicazione GPRS e le funzioni offerte dalla libreria, vediamo che il passaggio alla fase di programming del SIM800L per accedere alle classiche funzioni di trasmissione di base è piuttosto agevole. Dal prossimo articolo presenteremo progetti un po’ più articolati, e sicuramente più interessanti a livello di utilizzo pratico. Non mancate, dunque, ci ritroviamo qui giovedì prossimo!
Link utili:
- AZ-Delivery SIM800L
- Arduino Uno R3 originale
- Arduino Uno R3 (clone)
- Altre schede compatibili
- Librerie per moduli SimCom
- Documentazione uso comandi AT
Articoli precedenti:
- Imparare ad usare la scheda AZ-Delivery SIM800L #1
- Imparare ad usare la scheda AZ-Delivery SIM800L #2
- Imparare ad usare la scheda AZ-Delivery SIM800L #3
Iscrivetevi ai nostri gruppi Telegram…