Le basi del funzionamento con i Comandi AT.

Per funzionare pienamente con i moduli della serie SIM800 GSM/GPRS, avrai bisogno di un manuale di riferimento dei comandi AT:

Prima di iniziare a programmare l'interazione con il modulo GSM, è necessario familiarizzare con i tipi di comandi AT.

Sintassi del comando AT.

Come accennato in precedenza, la comunicazione con il modulo avviene utilizzando i comandi AT. Ogni comando AT deve iniziare con due lettere AT, digitato in qualsiasi registro: AT, aT, At, at. Il comando deve iniziare su una nuova riga (parametro Newline nella finestra Serial).
Tutti i comandi AT sono sintatticamente divisi in 3 gruppi principali: base, con il parametro S ed estesi.
I comandi di base hanno la seguente sintassi: AT<x><n> o AT&<x><n>, dove <x> è il comando e <n> è il parametro(i) passato(i). I parametro(i) <n> sono facoltativi e, se mancanti, verrà utilizzato il valore predefinito. 
Ad esempio, comando ATI che restituisce i dati identificativi del modulo, oppure comando AT&V, che restituisce la configurazione corrente del modulo.
I comandi con il parametro S hanno questo aspetto: ATS<i>=<m>, dove <i> è l'indice del registro S e <m> è il valore che deve essere assegnato ad esso. Se manca il valore <m>, verrà assegnato il valore predefinito. Ad esempio, il registro ATS0 è responsabile del numero di segnali acustici prima di rispondere automaticamente a una chiamata in arrivo e, di conseguenza, il comando ATS0 imposterà il valore predefinito su 0 (non rispondere alla chiamata) e il comando ATS0=2 farà sì che il modulo risponda automaticamente dopo il 2° segnale acustico.
I comandi estesi possono essere richiamati in diverse modalità:
Modalita Sintassi Descrizione
Riferimento AT+<x>=? Il modulo restituisce un elenco di possibili parametri e l'intervallo di valori che accettano.
Lettura dello stato AT+<x>? Il modulo restituisce lo stato corrente dei parametri.
Comando di scrittura AT+<x>=<...> Il comando imposta i valori dei parametri definiti dall'utente.
Esecuzione AT+<x> Esecuzione del comando.

Un esempio di questo gruppo di comandi è il comando AT+IPR. Comando AT+IPR=? puoi scoprire i valori che un parametro può assumere. Comando AT+IPR? è possibile scoprire la velocità corrente di scambio dati con il modulo e utilizzare il comando AT+IPR=<...> per impostare una velocità diversa (Figura 1).

È possibile specificare più comandi su una stringa. Tutti i comandi successivi (escluso il primo) vengono scritti senza il prefisso AT. Ogni comando esteso deve essere seguito da un punto e virgola (;). Dopo i comandi di base o i comandi con il parametro S, non è necessario il punto e virgola (;). La lunghezza dell'intera stringa multi comando non deve superare i 556 caratteri (escluso il prefisso AT iniziale).

Esempio: ATE0V0+CMEE=1;&W

Il comando AT A/ può ripetere il comando precedente.

Il parametro Echo Mode è responsabile della duplicazione del comando inviato nel terminale. Per modificare il valore di questo parametro, esiste il comando ATE<value>, dove <value> è il valore del parametro, 0 è disabilitato, 1 è abilitato (per impostazione predefinita). Ad esempio, il comando ATE0 disabiliterà questa modalità e il comando ATE1 la abiliterà.

Esiste anche il comando ATV<value>, che è responsabile del formato delle risposte del modulo ai comandi inviati: testo (<value>=1, per impostazione predefinita, risposte come OK, CONNECT, RING, ERROR, ecc.) e digitale codice (<valore>=0, risposte come 0, 1, 2, 3, ecc.). Ad esempio, il comando ATV0 abiliterà il formato di risposta digitale e il comando ATV1 abiliterà il formato testo.

Gestire gli errori.

Di norma, in risposta ai comandi inviati, se vengono eseguiti con successo, il modulo restituisce OK. Ma se il comando non è stato eseguito, il modulo segnalerà un errore di esecuzione. I moduli della serie SIM800 hanno un parametro che imposta il livello di contenuto informativo degli errori.
Comando Descrizione Struttura della risposta Risposta
AT+CMEE? Ottenere il valore corrente del parametro. +CMEE:<n>
OK
<n>
- segnalazione errori.
0 - messaggio relativo all'effettiva presenza di un errore (ERROR).
1 - risposta contenente un codice di errore digitale
(decrittazione dei codici nella sezione 19 del riferimento al comando AT).
2 - risposta contenente la descrizione dell'errore.
+CMEE: 0
OK
AT+CMEE=<n> Comando per scrivere il nuovo valore. OK OK

Per lavorare da terminale in modalità manuale è conveniente utilizzare il parametro 2 - AT+CMEE=2. Ora, dopo aver installato la segnalazione estesa degli errori, potete provare a inviare un comando inesistente ATE?, al quale il modem risponderà in modo dettagliato: +CME ERROR: unknown (comando sconosciuto).

Notifiche non richieste.

Esiste un'altra categoria di messaggi ricevuti dal modulo - notifiche non richieste. Si tratta di messaggi che, come suggerisce il nome, possono arrivare senza che l'utente faccia alcuna azione. Gli esempi più comuni di notifiche non richieste sono:
Avviso Descrizione Esempio
RING Notifica chiamata in arrivo. RING
+CMTI Notifica dell'arrivo di un nuovo messaggio (SMS). +CMTI: "SM",2
+CLIP Identificazione automatica del numero durante una chiamata in arrivo. +CLIP: "",,"",,"",
+CUSD Ricezione di una risposta a una richiesta USSD inviata. +CUSD: 0, ""
UNDER-VOLTAGE
POWER DOWN
UNDER-VOLTAGE
WARNNING
OVER-VOLTAGE
POWER DOWN
OVER-VOLTAGE
WARNNING
Messaggi di tensione del modulo errata. UNDER-VOLTAGE WARNNING
+CMTE Messaggi relativi alla temperatura errata del modulo. +CMTE: 1

Salvataggio dei parametri impostati.

Nonostante il modulo della serie SIM800 sia un dispositivo complesso dotato di una propria memoria non volatile, non tutti i parametri impostati da qualsiasi comando AT possono essere memorizzati al suo interno. Nella documentazione del comando AT, ogni comando ha una modalità di salvataggio (Parameter Saving Mode), che fornisce all'utente informazioni su cosa accadrà al parametro impostato dopo il riavvio del dispositivo. Questa è una proprietà molto importante dei comandi AT che deve essere presa in considerazione quando si scrivono programmi. Ad esempio, il programma utilizza АОН (identificazione automatica del numero), che viene attivato dal comando AT+CLIP=1. Ma questo parametro non viene salvato, il che significa che devi attivarlo ogni volta che avvii il programma. Allo stesso tempo, la modalità DTMF (attivata dal comando AT+DDET=1) può essere salvata e il suo valore non cambierà dopo un riavvio. Il comportamento di ciascun parametro è caratterizzato da uno dei tre valori della proprietà Parameter Saving Mode:

  1. NO_SAVE - parametro(i) del comando non vengono salvati.
  2. AT&W_SAVE - parametro(i) del comando vengono salvati dal comando AT&W.
  3. AUTO_SAVE - parametro(i) di comando vengono salvati automaticamente.

Come programmare correttamente l'interazione con un modem - comandi e risposte.

Programmare l'interazione con un modulo non è un compito così ovvio come sembra a prima vista.
Nei progetti finiti, per risparmiare memoria, si consiglia di utilizzare una combinazione di parametri: Echo Mode (ATE0), formato digitale delle risposte del modulo (ATV0), codice di errore digitale (AT+CMEE=1) e salvataggio dal comando AT&W. Per impostare tutti i parametri contemporaneamente, è possibile eseguire il seguente comando:  ATE0V0+CMEE=1;&W
Per test del software - abilitata (per impostazione predefinita) Echo Mode (ATE1), formato di risposta del modulo testo (per impostazione predefinita) (ATV1), codice di errore testo (AT+CMEE=2e salvataggio dal comando AT&W. Tutti i test del programma vengono quindi eseguiti dopo, una volta eseguito nel terminale, il comando: ATE1V1+CMEE=2;&W.

Esecuzione del comando.

Il modulo impiega tempo per eseguire ciascun comando. Inviando diversi comandi al modulo in successione, farà un ottimo lavoro e segnalerà il completamento con successo. Ma dopo un attento esame, è chiaro che l'ordine delle risposte non coincide con l'ordine dei comandi inviati, il che significa che è impossibile identificare in modo inequivocabile la corrispondenza della risposta in arrivo al comando inviato. 
Ma cosa succede se nell'elenco dei comandi è presente un comando che verrà eseguito con un errore (AT+DDET=1,0,3 - un errore intenzionale in questo comando, un parametro non valido). È improbabile che qualcuno possa dire con certezza al 100% in risposta all'esecuzione di quali comandi il modulo ha risposto correttamente, quale comando conteneva un errore e quale è stato il destino dell'ultimo comando.
Il primo pensiero che potrebbe venire in mente è attendere il completamento di ogni comando e quindi inviare quello successivo. E possiamo mettere in pausa usando la funzione delay(). Dopo aver avviato il programma, potresti essere sorpreso di scoprire che dopo il comando errato arriva una profonda incertezza sul suo ulteriore destino e sul destino dell'ultimo comando. La maggior parte degli esempi su Internet di invio di SMS presentano lo stesso errore. Non è corretto impostare delle pause per consentire al modulo di eseguire un comando. Il fatto è che durante l'attesa il microcontrollore è "paralizzato" e ignora tutte le informazioni inviate dal modulo.
Un approccio più corretto prevede che il microcontrollore interrompa l'esecuzione del programma finché non viene ricevuta una risposta al comando inviato, questo verrà discusso nel seguente articolo, Moduli GSM serie SIM800 - FLProg.
Crea il tuo sito web gratis! Questo sito è stato creato con Webnode. Crea il tuo sito gratuito oggi stesso! Inizia