Emuliamo i telecontrolli della serie TDG utilizzando il GSM Shield. Seconda e ultima puntata.
Ci siamo lasciati, il mese scorso, dopo aver presentato il progetto del telecontrollo 2IN/2 OUT che emula il funzionamento del nostro TDG133 con un hardware rivisitato e basato sul GSM Shield descritto nel fascicolo n° 231 e su una scheda Arduino Mega 2560. La particolarità di tale sistema è che offre versatilità e flessibilità, consentendo, rispetto al TDG133 originario -dotato di due ingressi optoisolati a livello di tensione e altrettante uscite a relé- di implementare la gestione di un massimo di 8 ingressi (non optoisolati ma comunque digitali) e 8 uscite (assegnabili a schede relé modulari) semplicemente personalizzandone il firmware e sfruttando la grande disponibilità di I/O che la Arduino Mega 2560 offre.
Dopo aver spiegato l’hardware (che vedete richiamato nella Fig. 1 privo dello shield che realizza le interconnessioni e nella Fig. 2 dotato di tale shield…) e descritto l’architettura del firmware e dello sketch che ne governano il funzionamento, riprendiamo il discorso da dove lo avevamo lasciato, vale a dire dalla spiegazione relativa ai parametri predefiniti in fabbrica.


Parametri di fabbrica
Quando si programma la EEPROM con l’apposito sketch o quando si ripristinano i parametri di fabbrica con l’apposita stringa di comando i dati necessari a compiere queste due operazioni vengono prelevati sia tramite delle direttive al compilatore di tipo “#define”, sia dalla Flash del microcontrollore dove sono salvati in modo permanente.
Questi dati si trovano in testa al file “GSM_TDG133.ino”, e sono, in sequenza, questi:
1. blocco con le direttive “#define” inerenti agli indirizzi base dei dati contenuti in EEPROM e identificabile dal commento “EEPROM FACTORY PARAMETERS ADDRESS”;
2. blocco con le direttive “#define” inerenti i parametri con i propri valori predefiniti; il blocco è identificabile dal commento “EEPROM DEFAULT FACTORY PARAMETERS”; in questa sezione trovano posto i seguenti:
• flag generici;
• abilitazione notifiche via SMS e chiamate vocali;
• tempo di inibizione;
• tempo di osservazione;
• numero massimo di SMS in caso di allarme;
• timeout invio SMS con stato ingressi e uscite;
• timeout funzione apricancello.
3. blocco con le direttive “const char” per la definizione in Flash dei parametri stringa come gli SMS da inviare in caso di allarme.
Vediamo in dettaglio:
• blocco della nostra libreria GSM contenente i codici PIN, PUK ecc. identificabile dal commento “GSM Library PIN, PUK etc”; l’utente dovrà inserire il codice PIN e il codice PUK della propria SIM, mentre tutti gli altri codici non sono usati in questa applicazione, tuttavia non devono essere rimossi perché facenti parte della nostra libreria di gestione del modulo GSM;
• blocco con le stringhe usate nel telecontrollo, identificabile dal commento “SYSTEM PASSWORD; SMS TEXT FOR ALARM, START-UP etc”; vi troviamo la password di sistema (cinque caratteri numerici, predefinita 12345″), le stringhe per allarme ingresso 1, le stringhe per allarme ingresso 2, la stringa per SMS inviato allo start-up dello sketch; stringa per SMS mancanza alimentazione; stringa per l’SMS di ritorno alimentazione.
Più avanti nel codice ritroviamo tutte le stringhe di comando usate nello sketch e sono tutte memorizzate nella Flash del microcontrollore. Tutte queste stringhe non devono subire modifiche da parte dell’utente pena il mancato funzionamento dei comandi di configurazione. Se si aggiungono nuovi comandi è necessario aggiungere il codice per gestirli.
Configurazione parametri della libreria GSM
Due parole sulla configurazione di alcuni parametri della nostra libreria GSM e relativa board: prima di tutto ricordarsi di impostare i jumper della board GSM al fine di instradare correttamente le linee TX e RX della UART di comunicazione tra ATMEGA 2560 e modulo GSM. Lo sketch utilizza la UART 1 software con possibilità di spiare la comunicazione seriale tra il modulo GSM e la scheda Arduino Mega 2560. Quindi i jumper da JP1 a JP7 presenti sulla board GSM devono essere posizionati in posizione 1-2 come spiegato negli articoli dedicati alla board GSM. Comunque sia il file “Io_GSM.h” in testa ha una tabella con indicato come devono essere configurati i jumper.
Detto ciò di seguito le impostazioni da apportare per il corretto funzionamento della libreria (i parametri da configurare sono tutti nel file “Io_GSM.h”):
• selezionare il modulo GSM che si intende usare tra quelli supportati (per l’applicazione abbiamo usato il SIMCOM SIM800C) e commentare tutte le altre direttive sui motori GSM;
• selezionare la board Arduino da abbinare, in questo caso Arduino Mega 2560;
• selezionare la revisione hardware della board GSM; selezionare la revisione R.1.3 attualmente in produzione;
• selezionare per la comunicazione seriale UART 1 la modalità di funzionamento software; volendo, potete anche selezionare la seriale UART 1 in hardware, ricordatevi però di configurare i jumper in modo corretto;
• commentare la direttiva di attivazione del jack audio per gli auricolari “EARPHONES_JACK “;
• infine le macchine a stati da abilitare per il nostro telecontrollo:
– comandi AT generici → “ENABLE_ANSWER_GENERIC_AT_CMD_STATE”
– comandi AT sicurezza → “ENABLE_ANSWER_SECURITY_AT_CMD_STATE”
– comandi AT rubrica telefonicai → “ENABLE_ANSWER_PHONEBOOK_AT_CMD_STATE”
– comandi AT invio e ricezione SMSi → “ENABLE_ANSWER_SMS_AT_CMD_STATE”
– comandi AT chiamate vocalii → “ENABLE_ANSWER_PHONIC_CALL_AT_CMD_STATE”;
• il codice di debug è disabilitato, quindi commentare la direttiva “DEBUG_MODE”.
Stringhe di comando supportate
Lo sketch supporta innumerevoli stringhe di comando ereditate dall’attuale TDG133. Quasi tutte le stringhe di comando sono state importate in questo sketch e ne sono state aggiunte di nuove appositamente pensate per questa applicazione. Le stringhe possono essere inviate da SMS o Monitor Seriale.
Per le principali daremo una breve descrizione proponendo un esempio di utilizzo. I comandi stringa trattati, per comodità, saranno tutti inviati al telecontrollo tramite il monitor seriale di Arduino IDE. Nel caso in cui le stringhe vengano inviate via SMS ci si dovrà aspettare una eventuale risposta da parte del telecontrollo, sempre via SMS. Quando si inviano i comandi via SMS sul monitor seriale verranno comunque stampate delle stringhe di testo ad indicare l’esecuzione o meno del comando.
La password di sistema
Iniziamo la trattazione con il comando per l’impostazione della password di sistema, che è il seguente:
PWDxxxxx;pwd
Le password sono solo di tipo numerico e sono composte da cinque numeri. Non sono ammessi caratteri alfanumerici. Il codice comando è “PWD” seguito da “xxxxx” che identifica la nuova password che si vuole impostare, ad esempio “33225”. In coda si deve inserire obbligatoriamente la password di sistema in uso preceduta dal carattere “;”. Quindi il comando diventa:
PWD3325;12345
Eseguito il comando, quello che si vede sul monitor seriale in risposta è:
# Command received by user -> PWD33225;12345
# Command “PWD” processed successfully
Questo indica che il comando è stato recepito ed eseguito correttamente. Ora la nuova password di sistema è “33225”.
Salvare e cancellare i numeri in rubrica
Passiamo al comando per memorizzare un numero di telefono nella rubrica alla locazione desiderata:
NUMx+39nnnnnnnnnnn;text;pwd
Il codice comando è “NUM” e memorizza il numero di telefono “nnnnnnnnnnn” nella locazione di memoria indicata da “x” (1 ≤ x ≤ 255). La stringa “text” serve per associare un testo al numero di telefono inserito. Il testo al massimo può essere lungo quattordici caratteri, ed è obbligatorio. Infine segue la password di sistema. Un possibile utilizzo del comando potrebbe essere il seguente:
NUM2+393474131177;”Rossi”;33225
In questo caso nella locazione 2 della rubrica telefonica della SIM verrà salvato il numero di telefono “3474131177” con prefisso internazionale “+39” abbinato al signor “Rossi”. Quello che si vede sul monitor seriale come risposta da parte dello sketch è:
# Command received by user -> NUM2+393474131177;ROSSI;33225
# Command “NUM” processed successfully
Andiamo al comando di rimozione di un numero telefonico dalla rubrica:
NUMx;pwd
Il codice comando è lo stesso di prima ovvero “NUM” seguito dalla locazione di memoria della rubrica che si vuole cancellare. Ovviamente è necessario inserire la password. Quindi la sintassi diventa:
NUM2;33225
Consultare la rubrica telefonica
Andiamo ora al comando di richiesta della lista dei primi otto numeri in rubrica:
NUM?;pwd
Il codice comando in questo caso è “NUM?” seguito come sempre dalla password. Eseguendo il comando seguente:
NUM?;33225
Si ottiene la seguente risposta:
# Command received by user -> NUM?;33225
# Command “NUM?” processed successfully
# The phone number read at the location: 1 is -> “+393491544888”
# The text associated to the phone number is: “ADMIN”
# The phone number read at the location: 2 is -> “+393474131177”
# The text associated to the phone number is: “ROSSI”
# The phone number read at the location: 3 is -> “+393474331076”
# The text associated to the phone number is: “BIANCHI”
# The phone number read at the location: 4 is empty
# The phone number read at the location: 5 is empty
# The phone number read at the location: 6 is empty
# The phone number read at the location: 7 is empty
# The phone number read at the location: 8 is empty
Come si può notare, la stringa di comando inviata ha ritornato lo stato delle prime otto locazioni di memoria della rubrica telefonica evidenziando che ci sono le prime tre celle occupate. Le restanti cinque sono libere.
Se si desidera leggere tutte le locazioni di memoria in rubrica si può usare la seguente stringa di comando:
ANUM?;pwd
Eseguendo il comando si ottiene la seguente risposta:
# Command received by user -> ANUM?;33225
# Command “ANUM?” processed successfully
# The phone number read at the location: 1 is -> “+393491544888”
# The text associated to the phone number is: “ADMIN”
# The phone number read at the location: 2 is -> “+393474131177”
# The text associated to the phone number is: “ROSSI”
# The phone number read at the location: 3 is -> “+393474331076”
# The text associated to the phone number is: “BIANCHI”
# The phone number read at the location: 4 is empty
# The phone number read at the location: 5 is empty
…….
…….
# The phone number read at the location: 249 is empty
# The phone number read at the location: 250 is empty
La stringa di comando inviata ha ritornato lo stato di tutte le locazioni di memoria della rubrica telefonica; infine è stato implementato un comando per ricercare un numero di telefono in rubrica conoscendo il testo associato. Ad esempio se si vuole verificare che il numero di telefono del Sig. Rossi è presente in rubrica e facente parte delle prime otto locazioni di memoria si può eseguire la seguente stringa di comando:
FNUM?;text;pwd
Il codice comando diventa “FNUM?” seguito dal testo che si vuole ricercare nella rubrica “text” e ovviamente dalla password. Quindi il comando potrebbe essere il seguente:
FNUM?;Rossi;33225
Si ottiene la seguente risposta:
# Command received by user -> FNUM?;ROSSI;33225
# Command “FNUM?” processed successfully
# Found the phone number into the phonebook. The location is: 2
Notare che il numero di telefono del Sig. Rossi è presente in rubrica e occupa la seconda locazione di memoria. Se invece cerchiamo il Sig. Brambilla, aggiunto in seguito, troveremo che occupa la locazione dieci in rubrica e quindi abilitato alle sole funzioni di apricancello.
# Command received by user -> FNUM?;BRAMBILLA;33225
# Command “FNUM?” processed successfully
# Found the phone number into the phonebook. The location is: 10
Con questo sono concluse le stringhe di comando per la configurazione e verifica dei numeri di telefono da salvare in rubrica.
Cancellazione degli SMS in memoria
Abbiamo implementato due stringhe di comando utili per cancellare rispettivamente un SMS dalla memoria della SIM o di cancellare tutti gli SMS presenti nella memoria della SIM. Solitamente sono a disposizione fino a 30 locazioni di memoria per gli SMS in ingresso.
Queste funzioni sono utili nel caso siano memorizzati vecchi SMS sulla SIM che si intende riutilizzare con il sistema ci controllo remoto. La sintassi dei due comandi è rispettivamente:
DSMSx;pwd
DASMS;pwd
Il codice comando per cancellare un singolo SMS è “DSMS” seguito dalla locazione di memoria “x”. Come sempre segue la password di sistema. Mentre per cancellare tutti gli SMS il codice comando è “DASMS” seguito dalla password.
Notifiche SMS e chiamate vocali per ingresso
Passiamo ora ai comandi di configurazione delle funzioni del sistema di controllo remoto cominciando dai comandi di abilitazione/disabilitazione invio SMS di allarme o chiamata vocale ai primi otto numeri in rubrica. Quindi al verificarsi di un evento sugli ingressi digitali avremo la possibilità di decidere a chi verranno recapitati gli SMS di allarme e relative chiamate vocali. Cominciamo con la stringa di comando di configurazione invio SMS che si può presentare nei due modi seguenti a seconda che si attivi o disattivi l’invio dell’SMS:
SMSxxxxxxxx:ON;pwd
SMSxxxxxxxx:OFF;pwd
Il codice comando è “SMS” seguito dalle locazioni che si vuole attivare tra le prime otto a disposizione “xxxxxxxx”. Segue la stringa “ON” attiva o “OFF” disattiva. Ovviamente il comando necessita della password per essere eseguito. Per impostazione predefinita le otto locazioni di memoria sono attive.
Quindi supponendo di volere attivare le locazioni 1, 3, 5 e 7 si dovrà inviare la seguente stringa di comando:
SMS1357:ON;33225
Mentre per disattivare le locazioni 2, 4, 6 e 8 si invierà:
SMS2468:OFF;33225
Quanto detto è valido anche per le chiamate vocali con la sola differenza che il codice comando è “VOC”:
VOCxxxxxxxx:ON;pwd
VOCxxxxxxxx:OFF;pwd
Per ognuno dei seguenti comandi si riceverà la consueta risposta da parte del sistema:
# Command received by user -> SMS1357:ON;33225
# Command “SMS” processed successfully
# Command received by user -> SMS2468:OFF;33225
# Command “SMS” processed successfully
# Command received by user -> VOC1357:ON;33225
# Command “VOC” processed successfully
# Command received by user -> VOC2468:OFF;33225
# Command “VOC” processed successfully
Livello di attivazione degli ingressi
Parliamo ora del comando per configurare la gestione degli ingressi digitali di allarme. Gli ingressi possono essere considerati attivi quando si legge un livello di tensione “HIGH” o un livello di tensione “LOW” oppure sulla variazione “TOGGLE”. Quindi le tre possibili stringhe di configurazione saranno le seguenti:
LIVx:A;pwd
LIVx:B;pwd
LIVx:V;pwd
Il codice comando in questo caso è “LIV” seguito dall’ingresso che si vuole configurare “x” e dal relativo stato stabile “A” (HIGH), “B” (LOW) e “V” (TOGGLE). Come al solito segue in coda la password. Quindi supponendo di volere impostare l’ingresso 1 attivo alto si può così procedere:
LIV1:A;33225
Volendo è possibile sapere come sono configurati gli ingressi, per fare ciò è sufficiente inviare la stringa di comando:
LIV?
Il codice comando è “LIV?”, nessuna password è richiesta. La risposta da parte del sistema sarà:
# Command received by user -> LIV?
# Alarm activation level for input 1: HIGH
# Alarm activation level for input 2: HIGH
# Command “LIV?” processed successfully
Entrambi gli ingressi sono configurati per essere attivi con livello logico alto.
Tempo di inibizione e di osservazione
Sempre per gli ingressi digitali è possibile configurare un tempo “di inibizione” che indica al sistema di ignorare le variazioni dell’ingresso per un periodo di tempo pre-impostato successivamente ad una attivazione dello stesso. Questo aiuta ad evitare attivazioni spurie e quindi invio di SMS di allarme non voluti. Il tempo è impostabile da un minimo di 0 minuti a un massimo di 59 minuti. Il valore predefinito è 5 minuti. La stringa di comando da utilizzare è:
INIx:mm;pwd
Il codice comando è “INI” seguito dall’ingresso che si vuole configurare “x” e dal tempo di inibizione “mm”. Per sapere come sono configurati i tempi di inibizione degli ingressi, si può inviare la stringa di comando:
INI?
Il codice comando è “INI?” e ritorna la seguente:
# Command received by user -> INI?
# Alarm inhibition time for input 1: 10
# Alarm inhibition time for input 2: 5
# Command “INI?” processed successfully
Esiste un ulteriore comando di configurazione dei tempi di inibizione degli ingressi digitali il quale ci permette di ignorare tale configurazione se necessario. In altre parole quando l’ingresso torna a riposo è possibile trascurare il tempo di mascheramento dell’ingresso impostato dalla precedente stringa di comando appena descritta. Quindi per ignorare i tempi di inibizione si possono sfruttare le seguenti:
TIZ1x;pwd
TIZ2x;pwd
Il codice comando è “TIZ1” o “TIZ2” seguito dal parametro “x” che identifica se ignorare o no il tempo di inibizione. Se al parametro si assegna il valore “1” il sistema ignorerà il tempo di inibizione viceversa se si assegna “0” il sistema sarà obbligato a considerare il tempo di inibizione.
Ultimo parametro di configurazione degli ingressi è il cosiddetto tempo di osservazione che può essere visto come una specie di debouncing. In altre parole lo stato dell’ingresso si ritiene valido per l’invio di un eventuale SMS di allarme se questo rimane stabile per un tempo prefissato. I tempi impostabili vanno da 1 secondo a 59 secondi. Il valore predefinito per questo parametro è 1 secondo. La stringa di comando da utilizzare è:
OSSx:ss;pwd

Il codice comando è “OSS” seguito dall’ingresso che si vuole configurare “x” più il tempo di osservazione espresso in secondi “ss”. In coda la password come al solito. Se si vuole conoscere come sono configurati i tempi di osservazione si può usare la seguente stringa di comando:
OSS?
la quale restituisce:
# Command received by user -> OSS?
# Alarm observation time for input 1: 10
# Alarm observation time for input 2: 1
# Command “OSS?” processed successfully
Testo dei messaggi di allarme
Passiamo ora ai comandi per configurare il testo che si vuole inviare quando si verifica una condizione di allarme sugli ingressi digitali. Le stringhe di comando da usare sono:
TIN1A:xxxx;pwd
TIN1B:xxxx;pwd
TIN2A:xxxx;pwd
TIN2B:xxxx;pwd
I codici comando ci permettono di configurare la stringa di testo da inviare in caso di allarme. Abbiamo quindi:
• Ingresso 1 attivo alto (“1A”)
• Ingresso 1 attivo basso (“1B”)
• Ingresso 2 attivo alto (“2A”)
• Ingresso 2 attivo basso (“2B”)
La stringa di testo “xxxx” può avere una lunghezza massima di 100 caratteri e non possono essere usati i segni di interpunzione “,” e “;”. Un possibile esempio di utilizzo di tale stringa di comando potrebbe essere:
TIN1A:Allarme allagamento sentina!!;33225
Si è quindi configurata la stringa di allarme per l’ingresso 1 quando questo è attivo alto. La stringa associata allo stato di allarme è “Allarme allagamento sentina!!” Passiamo ad analizzare il comando per impostare il numero di SMS che il sistema deve inviare al persistere della condizione di allarme in ingresso. La stringa di comando è la seguente:
ALNy:xx;pwd
Il codice comando è “ALN” dove “y” indica l’ingresso che si sta configurando. Il parametro “xx” indica il numero di SMS che si devono inviare al persistere della condizione di allarme. I valori ammessi vanno da 0 a 99. Il valore 0 definisce nessun SMS mentre 99 indica infiniti SMS. Tutti gli altri valori compresi tra 0 e 99 indicano il numero massimo di SMS che il sistema invierà al persistere dell’allarme. Chiude la stringa di comando la password di sistema. Un esempio di configurazione potrebbe essere:
ALN1:5;33225
La stringa di comando così impostata indica che al persistere dell’allarme sull’ingresso 1 verranno inviati al massimo cinque SMS ai numeri di telefono selezionati. Invece per sapere quanti SMS il sistema invierà in caso di persistenza dell’allarme si può usare la stringa:
ALN?
In questo caso il codice comando è semplicemente “ALN?” senza nessuna password. L’esecuzione del comando ritorna la seguente:
# Command received by user -> ALN?
# Max num. of SMS to send if alarm occur (99 infinite; 0 nothing). Input 1: 5
# Max num. of SMS to send if alarm occur (99 infinite; 0 nothing). Input 2: 10
# Command “ALN?” processed successfully
Gestione delle uscite digitali
Passiamo ad analizzare il comando per la gestione delle uscite digitali. Le possibili stringhe di comando sono le seguenti:
OUTx:ON;pwd
OUTx:OFF;pwd
OUTx:ss;pwd
Il codice comando è “OUT” dove “x” indica l’uscita digitale. Per portare a livello logico alto l’uscita aggiungere la stringa “ON” al comando altrimenti, per portarla a livello logico basso, la stringa “OFF”. Se invece si vuole invertire lo stato dell’uscita per un periodo di tempo al posto delle stringhe “ON” e “OFF” mettere un tempo in secondi “ss”. Il valore minimo accettato è 1 secondo mentre il valore massimo è 59 secondi. Facciamo il seguente esempio:
OUT1:ON;33225
La stringa di comando inviata accende l’uscita digitale 1. Se invece inviamo la stringa:
OUT1:30;33225
In questo modo abbiamo invertito lo stato di uscita portandolo a livello logico basso per un periodo di 30 secondi scaduti i quali lo stato ritorna alto.
Se si vuole richiedere lo stato delle uscite si deve inviare la stringa di comando seguente:
STA?
L’esecuzione del comando ritorna la seguente:
# Command received by user -> STA?
# Relé status for output 1: ON
# Relé status for output 1: OFF
# Command “STA?” processed successfully
SMS di report periodico
Passiamo alla descrizione del comando che si occupa di configurare quando inviare l’SMS di report ovvero ogni quanto mandare lo stato degli Ingressi/Uscite digitali (l’SMS viene inviato solo al primo numero presente nella rubrica telefonica). Le tre stringhe di comando sono le seguenti:
AUTOC:ON;pwd
AUTOC:OFF;pwd
AUTOC:hh:mm:ss;pwd
Il codice comando è “AUTOC” seguito dalla stringa di attivazione del servizio ovvero “ON” attivo; “OFF” non attivo. Oltre all’attivazione si può decidere ogni quanto inviare l’SMS di report usando la terza stringa di comando con il parametro “hh:mm:ss”. Tale parametro non identifica l’ora a cui si vuole mandare l’SMS ma l’intervallo temporale tra un invio e il successivo. Ovviamente in coda segue la password di sistema. Per fare un esempio se impostiamo “10:30:30” vuol dire che il messaggio di report viene mandato allo scadere del tempo di 10 ore, 30 minuti e 30 secondi o se preferite ogni 37830 secondi. Quindi una ipotetica stringa di comando potrebbe essere:
AUTOC:10:30:30;33225
AUTOC:ON;33225
Se si vuole sapere come è configurato il servizio dell’SMS di report si può usare la stringa di comando seguente:
AUTOC?
La quale se eseguita ritorna la seguente:
# Command received by user -> AUTOC?
# SMS report status: ON
# If enabled, the SMS report format is: TEXT
# If enabled, the SMS report of the Inputs/Outputs is sent every: 10:30:30
# Command “AUTOC?” processed successfully
Notare che esiste un altro parametro di configurazione per quanto riguarda l’SMS di report e riguarda come devono essere rappresentati gli stati degli ingressi e delle uscite quando si compone l’SMS da inviare. In altre parole possiamo scegliere se usare una rappresentazione binaria oppure testo. La stringa di comando che ci permette di configurare quanto appena detto è la seguente:
FORS:x;pwd
Il codice comando è “FORS” dove il parametro “x” indica il formato: “1” formato testo; “0” formato binario. In coda la password di sistema.
Ripristino stato uscite e SMS di avvio
Detto ciò possiamo passare al successivo comando il quale si occupa di configurare la possibilità di memorizzare lo stato delle uscite nel caso in cui venga a mancare l’alimentazione cosicché da poter riproporre lo stato ultimo al ritorno dell’alimentazione. La stringa di comando che si occupa di ciò è la seguente:
RIPx;pwd
Il codice comando è “RIP” e il parametro “x” indica se si vuole attivare la funzione “1” oppure disattivarla “0”. Per sapere com’è configurato tale parametro possiamo usare la seguente stringa:
RIP?
La quale se eseguita ritorna la seguente:
# Command received by user -> RIP?
# Recovery relé status: ON
# Command “RIP?” processed successfully
Passiamo al comando per abilitare l’invio dell’SMS di start-up (viene inviato al primo numero della rubrica telefonica). La stringa di comando è:
AVVx;pwd
Il codice comando è “AVV” dove “x” indica se la funzione è abilitata “1” o disabilitata “0”. Dato il comando precedente è possibile associargli una stringa di testo a piacere, quella di default è “SYSTEM STARTUP”. Quindi la stringa di comando per configurare il testo da usare per l’SMS di start-up è la seguente:
TSU:xxxxxxxxxxxx;pwd
Il codice comando è “TSU” e “xxxxxxxxxxxx” è il testo da salvare in EEPROM. Massimo 100 caratteri. Come al solito sono vietati i caratteri “,” e “;”. In coda al comando è necessaria la password di sistema. Quindi una possibile stringa di comando potrebbe essere:
TSU:StartUp telecontrollo! Buona Giornata;pwd
Funzione apricancello ed ECHO
Passiamo al comando di configurazione della sola uscita digitale 1 usata per funzione di apricancello. Questa è applicabile ai 200 numeri di telefono memorizzati a partire dalla nona locazione di memoria nella rubrica telefonica (in realtà anche i primi otto numeri in rubrica possono sfruttare questa funzione). La stringa di comando per configurare tale funzione è la seguente:
TAC:ss;pwd
Il codice comando è “TAC” seguito dal tempo “ss” di eccitazione dell’uscita 1, il tempo impostabile va da un minimo di “00” a un massimo di “59” secondi. Quindi ogni qual volta si riceve una chiamata vocale da parte di un numero di telefono presente in lista si ha che l’uscita digitale 1 verrà eccitata e rimarrà in tale stato fino allo scadere del tempo impostato. Se si imposta come valore “00” vuol dire che ad ogni chiamata si avrà un comportamento bistabile dell’uscita ovvero chiamo e eccito l’uscita, richiamo e diseccito l’uscita. Anche questa stringa di comando richiede la password di sistema in coda.
Passiamo alla funzione “ECHO” ovvero alla possibilità di selezionare a quale numero di telefono, memorizzato nella rubrica telefonica, si vuole inviare gli SMS ricevuti ma non facenti parte delle stringhe di comando supportate. La stringa di comando è la seguente:
ECHO:x;pwd
Il codice comando è “ECHO” seguito dalla locazione di memoria in rubrica “x”, identificando così il numero di telefono a cui si vuole inviare l’SMS. Se “x” valo zero significa che la funzione è disabilitata.
Comandi informativi di sistema
Il prossimo comando serve per chiedere al sistema la qualità del segnale GSM. La stringa da usare è:
QUAL?
la quale ritorna:
# Command received by user -> QUAL?
# GSM Quality signal (RSSI): 20
# GSM Channel bit error (BER): 0
# Command “QUAL?” processed successfully
Se invece si desidera sapere a quale operatore si è collegati si può usare la stringa:
OPER?
la quale ritorna:
# Command received by user -> OPER?
# The SIM operator is: “TELECOM ITALIA MOBILE”
# Command “OPER?” processed successfully
Mentre se si vuole sapere quale revisione dello sketch è caricata nello Arduino Mega 2560 si deve usare la seguente:
REV?
La quale ritorna:
# Command received by user -> REV?
# The TDG133 Rev: 1.0
# Manufacturer: SIMCOM_Ltd
# TA Model: SIMCOM_SIM800C
# TA Revision:1418B04SIM800C32_BT
# TA (IMEI): 866104027073389
# Command “REV?” processed successfully
La funzione, oltre a ritornare la revisione dello sketch ci da delle informazioni sul motore GSM utilizzato ovvero Marca, Modello, revisione FW e IMEI.
SMS di mancanza e ritorno alimentazione
Parliamo ora del comando usato per impostare l’invio dell’SMS di mancanza alimentazione. Il comando è implementato, quindi si può configurare, ma dato che il sistema attualmente non ha una batteria tampone per mantenere l’alimentazione necessaria all’invio dell’SMS perde di significato. Tuttavia non si esclude che in futuro verrà pienamente supportato. Quindi la stringa di comando da inviare è la seguente:
PWRFx;pwd
Il codice comando è “PWRF” e “x” indica se la funzione deve essere abilitata o disabilitata, in altre parole “1” attiva e “0” disattiva. Ovviamente esiste anche il comando per impostare l’invio dell’SMS di ritorno alimentazione. La stringa di comando in questo caso è:
PWRRx;pwd
Il codice comando è “PWRR” e “x” indica se la funzione deve essere abilitata o disabilitata, in altre parole “1” attiva e “0” disattiva. Ovviamente per entrambe le stringhe di comando appena discusse c’è la possibilità di configurare gli SMS che si desidera inviare in entrambi i casi. La stringa di comando per configurare SMS mancanza alimentazione è:
TPWPF:xxxxxxxxxxxx;pwd
Il codice comando è “TPWPF” e “xxxxxxxxxxxx” è la stringa da usare per comporre l’SMS. Come al solito massimo 100 caratteri esclusi la “,” e “;”. Ricordarsi la password di sistema in coda alla stringa di comando. Invece la stringa di comando per configurare SMS ritorno alimentazione è:
TPWPB:xxxxxxxxxxxx;pwd
Il codice comando è “TPWPB” e “xxxxxxxxxxxx” è la stringa da usare per comporre l’SMS. Come al solito massimo 100 caratteri esclusi la “,” e “;”.
Ripristino dei parametri di fabbrica
Infine vediamo l’ultimo comando, che è quello per ripristinare le condizioni di fabbrica. Ovvero riporta tutte le configurazioni di sistema allo stato iniziale compresi i testi degli SMS da inviare. Oltre a ciò CANCELLA tutti i numeri di telefono dalla rubrica telefonica. La stringa di comando da usare è:
RES;pwd
Il codice comando è “RES” seguito dalla password. Si ottiene come risposta la seguente lista di eventi (che abbiamo troncato per evidenti motivi):
# Command received by user -> RES;33225
# Command “RES” processed successfully
# Erased Phonebook memory entry: 1
# Erased Phonebook memory entry: 2
…….
…….
# Erased Phonebook memory entry: 250
Sia ben chiaro che una volta conclusa l’esecuzione del comando anche la password di sistema viene riportata al suo valore di fabbrica ovvero “12345”.
Comandi multipli e risposta silenziosa
Facciamo ancora alcune piccole considerazioni:
• È possibile inviare più comandi simultaneamente avendo accortezza di interporre una virgola tra un comando e il successivo. Ad esempio:
qual?,oper?,rev?
Si ottiene come risposta:
# Command received by user -> QUAL?,OPER?,REV?
# GSM Quality signal (RSSI): 20
# GSM Channel bit error (BER): 0
# Command “QUAL?” processed successfully
# The SIM operator is: “TELECOM ITALIA MOBILE”
# Command “OPER?” processed successfully
# The TDG133 Rev: 1.0
# Manufacturer: SIMCOM_Ltd
# TA Model: SIMCOM_SIM800C
# TA Revision:1418B04SIM800C32_BT
# TA (IMEI): 866104027073389
# Command “REV?” processed successfully
• Se i comandi vengono inviati da un telefono cellulare tramite SMS è possibile dire al sistema di non inviare nessuna risposta al mittente. Per fare ciò si deve mettere in testa al messaggio la stringa di comando “RISP” seguita da una virgola. In questo modo il sistema non invierà nessun SMS di risposta alle richieste fatte.
Gestione dei Led del GSM shield
Sul GSM Shield ci sono dei LED che vengono usati dallo sketch attuale per dare informazioni visive sullo stato dell’applicazione. Di seguito ne facciamo una breve descrizione:
• LED 12 Rosso [I/O 13 – Pin 14]; anche detto Trigger 3 ha il seguente comportamento:
– lampeggio veloce durante inizializzazione modulo GSM; periodo 250msc (25% ON/75% OFF);
– lampeggio lento a regime, inizializzazione GSM conclusa; periodo 2S (25% ON/75% OFF);
– se viene eseguito un comando stringa il LED si accende fisso per tutta la durata del comando e torna a lampeggiare lentamente a comando eseguito.
• LED 04 Rosso [I/O 37 – Pin 62]; acceso indica che l’uscita 1 è attiva, mentre è spento con l’uscita a riposo;
• LED 05 Rosso [I/O 36 – Pin 61]; acceso indica che l’uscita 2 è attiva, mentre è spento con l’uscita a riposo;
• LED 06 Giallo [I/O 35 – Pin 64]; si accende quando l’ingresso digitale 1, a seconda della configurazione fatta, attiva la condizione di allarme, viceversa è spento;
• LED 07 Giallo [I/O 34 – Pin 63]; si accende quando l’ingresso digitale 2, a seconda della configurazione fatta, attiva la condizione di allarme, viceversa è spento;
• LED 06 e LED 07 sono anche usati per indicare lo stato di attesa del primo numero di telefono da salvare in rubrica (Easy Setup); in tal caso lampeggiano in modo alternato con un periodo di 500mSec (50% ON/50% OFF);
• LED 08 Verde [I/O 33 – Pin 66]: segnala un SMS o una chiamata vocale in uscita:
– all’invio dell’SMS si accende, viceversa è spento;
– durante una chiamata vocale il led lampeggia, diversamente è spento.
• LED 09 Verde [I/O 32 – Pin 65]: indica la ricezione di un SMS o chiamata vocale in ingresso:
– quando si riceve un SMS il LED si accende, viceversa è spento;
– durante una chiamata vocale il led lampeggia, diversamente è spento.
Conclusioni
Finisce qui la descrizione del telecontrollo GSM basato su Arduino e GSM Shield; per gli scopi del progetto il firmware utilizza parte degli I/O disponibili, quindi chi desiderasse accrescerne le funzionalità potrà sfruttare tutti e 8 gli input digitali e le altrettante uscite mettendo mano allo sketch.


