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?
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.
- Per attivare le impostazioni, tenere premuto il pulsante "Setting" per 3 secondi.
- Successivamente, seleziona la voce di menu per le impostazioni utilizzando il pulsante "Menu".
- Per selezionare il valore utilizzare il pulsante "Select".
- Per rispondi premere il pulsante "Send".
- Per annullare/eliminare premere il pulsante "Cancel".
- Tenendo premuto il pulsante "Menu" o "Select" per un secondo cambia la direzione della selezione.
