Ricezione SMS tramite modulo GSM serie SIM800 - FLProg.

Ricevere SMS non è semplice come inviare messaggi. Il fatto è che tutti i messaggi ricevuti vengono archiviati nella memoria della carta SIM. E questa memoria è limitata. La quantità di memoria può essere trovata utilizzando comando  AT+CPMS?. Se la memoria si riempie, i messaggi non potranno più arrivare. Pertanto, al fine di mantenere la funzionalità dell'applicazione, dopo aver ricevuto ciascun messaggio, è necessario elaborarlo ed eliminarlo. Il manuale fornisce un'ampia serie di comandi con i quali è possibile eseguire qualsiasi manipolazione con i messaggi ricevuti.

Comando Descrizione Struttura della risposta Risposta
AT+CPMS? Ottieni informazioni sull'archiviazione degli SMS. Risposta:
+CPMS: <mem1>,<used1>,<total1>,<mem2>,<used2>,<total2>,<mem3>,<used3>,<total3>

Parametri:
<mem1> - messaggi da leggere ed eliminare da questa memoria.
<mem2> - i messaggi verranno scritti e inviati a questa memoria.
<mem3> - I messaggi ricevuti verranno inseriti in questa memoria.
<mem1>, <mem2>, <mem3> possono assumere i seguenti valori:
"SM" - memoria della carta SIM.
"ME" - memoria del modem/telefono.
"SM_P" - è preferibile la memoria della scheda SIM.
"ME_P" - è preferibile la memoria del modem/telefono.
"MT" - memoria della scheda SIM e del modem/telefono (SM+ME).

<usedx> - numero di messaggi archiviati <memx>.
<totalx> - numero massimo di messaggi archiviati nella memoria <memx>.

Modalità di salvataggio dei parametri: NO_SAVE
OK

o

ERROR

Anche qui, prima di lavorare con gli SMS, per utilizzare il formato testo è necessario abilitarlo con il comando AT+CMGF=1.

Comando Descrizione Struttura della risposta Risposta
AT+CMGF=<mode> Impostazione del formato del messaggio SMS Risposta:

OK

Parametri:
<mode> - formato del messaggio:
0 - formato PDU (predefinito)
1 - formato testo

Modalità di salvataggio dei parametri: AT&W_SAVE
AT+CMGF=1

OK

All'arrivo di un SMS, il modulo genera una notifica non richiesta nella forma +CMTI: "SM",1.

Notifica non richiesta Descrizione Struttura della risposta Risposta
+CMTI: <mem>,<index> Notifica non richiesta sull'arrivo di un nuovo SMS. Parametri:
<mem3> - archiviazione dei messaggi:
"SM" - memoria SIM.
"ME" - memoria del modem/telefono.

<index> - indice del messaggio ricevuto.
+CMTI: "SM",1

Dopo l'arrivo di tale notifica è possibile avviare a livello di codice la procedura di lettura del messaggio ricevuto con il comando AT+CMGR=<index>,<mode>. Per parametro <index> è necessario specificare l'indice ricevuto nella notifica +CMTI: "SM",1

Comando Descrizione Struttura della risposta Risposta
AT+CMGR=<index>[,<mode>] Leggi il messaggio SMS Parametri:
<index> - numero di sequenza del messaggio.
<mode> - azione dopo la lettura, valori:
0 - cambia lo stato del messaggio in "letto" (predefinito).
1 - lasciare lo stato invariato.

Tempo di risposta massimo: 5 secondi
AT+CMGR=1,0 - leggere il messaggio con indice 1, modifica lo stato del messaggio in "letto"
+CMGR: "REC UNREAD","+39320xxxxxxx","","18/04/24,20:30:05+8"
Messaggio di prova ricevuto.

OK

Dopo aver ricevuto ed elaborato un messaggio in arrivo, per risparmiare memoria SIM, i messaggi devono essere eliminati con i comandi AT+CMGDA=<type> o AT+CMGD=<index>[, <delflag>]. Ad esempio: AT+CMGDA="DEL ALL" o AT+CMGD=0,4 per eliminare tutti i messaggi.

Comando Descrizione Struttura della risposta Risposta
AT+CMGD=<index>[,<delflag>] Elimina il messaggio SMS. Risposta:
Il modem elimina il messaggio dall'archivio dei messaggi preferiti <mem1> con l'indice <index>.

OK
o
ERROR

Se l'errore è correlato alla funzionalità del modulo:
+CME ERROR: <err>

Parametri:
<index> - tipo intero, valore nell'intervallo di numeri di posizione supportati dalla memoria associata.
<delflag> - filtro per i messaggi eliminati (facoltativo), valori:
0 - elimina il messaggio specificato in <index>.
1 - elimina tutti i messaggi letti dall'archivio messaggi preferito, lasciando intatti i messaggi non letti e i messaggi archiviati originati da dispositivi mobili (inviati o meno).
2 - elimina tutti i messaggi letti dall'archivio messaggi preferito e i messaggi inviati originati da dispositivi mobili, lasciando intatti i messaggi non letti e i messaggi originati da dispositivi mobili non inviati.
3 - elimina tutti i messaggi letti dall'archivio messaggi preferito, i messaggi inviati e non inviati originati da dispositivi mobili lasciando intatti i messaggi non letti.
4 - elimina tutti i messaggi dall'archivio messaggi preferito, compresi i messaggi non letti.

Modalità di salvataggio dei parametri: NO_SAVE
Tempo di risposta massimo: 5 secondi - elimina 1 messaggio, 25 secondi - elimina fino a 150 messaggi
OK
AT+CMGDA=<type> Elimina tutti i messaggi SMS. Risposta:

OK
o
ERROR

Se l'errore è correlato alla funzionalità del modulo:
+CME ERROR: <err>

Parametri:
<type> - tipo di messaggi da eliminare, valori:
In modalità testo:
"DEL READ" - elimina tutti gli SMS letti.
"DEL UNREAD" - elimina tutti gli SMS non letti.
"DEL SENT" - elimina tutti gli SMS inviati.
"DEL UNSENT" - elimina tutti gli SMS non inviati.
"DEL INBOX" - elimina tutti gli SMS ricevuti.
"DEL ALL" - elimina tutti gli SMS.

In modalità PDU:
1 - elimina tutti gli SMS letti.
2 - elimina tutti gli SMS non letti.
3 - elimina tutti gli SMS inviati.
4 - elimina tutti gli SMS non inviati.
5 - elimina tutti gli SMS ricevuti.
6 - elimina tutti gli SMS.

Modalità di salvataggio dei parametri: NO_SAVE
Tempo di risposta massimo: 5 secondi - elimina 1 messaggio, 25 secondi - elimina fino a 150 messaggi.
OK

Implementazione nel programma FLProg. 

Cosa succede se il microcontrollore perde una notifica non richiesta sull'arrivo di un SMS?

Dovrà attendere l'arrivo del messaggio successivo, il che è uno scenario inaccettabile. E se vengono ricevuti più messaggi contemporaneamente, verrà elaborato solo l'ultimo. Per proteggersi da tali situazioni, è necessario introdurre un controllo per i messaggi non letti. Se ce ne sono, ogni messaggio dall'elenco verrà elaborato.

Se vogliamo ottenere l'elenco dei messaggi SMS non letti, utilizziamo il comando AT+CMGL=<stat>[,<mode>]. Ad esempio: AT+CMGL="REC UNREAD",1 ottenere messaggi SMS non letti, non modifica lo stato.

Comando Descrizione Struttura della risposta Risposta
AT+CMGL=<stat>[,<mode>] Ottieni l'elenco degli SMS. Risposta:
Restituisce i messaggi con valore di stato <stat> dall'archivio messaggi .

OK

Se l'errore è correlato alla funzionalità del modulo:
+CME ERROR: <err>

Parametri:
<stat> - filtro, valori:
In modalità testo:
"REC UNREAD" - messaggi non letti ricevuti.
"REC READ" - messaggi letti ricevuti.
"STO UNSENT" - messaggi non inviati memorizzati.
"STO SENT" - messaggi inviati memorizzati.
"ALL" - tutti i messaggi.

In modalità PDU:
0 - messaggi non letti ricevuti.
1 - messaggi letti ricevuti.
2 - messaggi non inviati memorizzati.
3 - messaggi inviati memorizzati.
4 - tutti i messaggi.

<mode> - filtro per i messaggi eliminati (facoltativo, utilizzato quando <index>=0), valori:
0 - cambia lo stato del messaggio in “letto”.
1 - non modificare lo stato del messaggio specificato.

Modalità di salvataggio dei parametri: NO_SAVE
Tempo massimo di risposta: 20 secondi fino a un elenco di 150 messaggi.
OK

Implementazione nel programma FLProg. 

Schema di collegamento per le prove.

  1. Per attivare le impostazioni, tenere premuto il pulsante "Setting" per 3 secondi.
  2. Successivamente, seleziona la voce di menu per le impostazioni utilizzando il pulsante "Menu".
  3. Per selezionare il valore utilizzare il pulsante "Select".
  4. Per rispondi premere il pulsante "Send".
  5. Per annullare/eliminare premere il pulsante "Cancel".
  6. Tenendo premuto il pulsante "Menu" o "Select" per un secondo cambia la direzione della selezione.
Crea il tuo sito web gratis! Questo sito è stato creato con Webnode. Crea il tuo sito gratuito oggi stesso! Inizia