Moduli GSM serie SIM800 - FLProg.
Nel programma FLProg ho creato due blocchi per comunicare con i moduli GSM della serie SIM800. Il codice comune si basa su due funzioni - sendCommands() e waitAnswer():
- La prima funzione è progettata per inviare un comando al modulo. Nella funzione sendCommands(String command, bool waiting), il primo parametro contiene il comando da inviare, mentre il secondo parametro, bool waiting, specifica se il programma deve attendere o meno una risposta dal modulo GSM.
- La seconda funzione è progettata per attendere una risposta e restituire il risultato entro il periodo specificato dal parametro <PERIOD>.
Parametri generali:
- SERIAL_GSM - il parametro viene utilizzato per selezionare l'UART per la comunicazione con il modulo.
- WAITING_TIME - durata del timeout in millisecondi massimi per attendere i dati seriali. Il valore predefinito è 1000 millisecondi.
- SPEED - il parametro serve per selezionare la velocità di scambio dati con il modulo.
- PIN_TX - il parametro serve per assegnare il pin TX (SoftwareSerial), abilitato con la condizione COND_SSERIAL quando selezioniamo la porta UART - SoftwareSerial, dal parametro SERIAL_GSM.
- PIN_RX* - il parametro serve per assegnare il pin RX (SoftwareSerial), abilitato con la condizione COND_SSERIAL quando selezioniamo la porta UART - SoftwareSerial, dal parametro SERIAL_GSM.
- PERIOD - il parametro viene utilizzato per impostare il periodo di attesa per la risposta da parte del modulo. Per impostazione predefinita è impostato su 10 secondi.
- COND_SSERIAL - la condizione viene utilizzata per abilitare il protocollo UART - SoftwareSerial.
*Library SoftwareSerial presenta le seguenti limitazioni:
- Non è possibile ricevere dati contemporaneamente da più porte contemporaneamente. Solo un porto alla volta può farlo.
- Gli interrupt non sono supportati su tutti i pin Mega e Mega2560, quindi è possibile utilizzare solo i seguenti per RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 ( 63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
- Gli interrupt non sono supportati su tutti i pin Leonardo e Micro, quindi per RX è possibile utilizzare solo i seguenti: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
- Su Arduino/Genuino 101, la velocità massima di trasferimento dati tramite il pin RX è 57600 bps.
- Su Arduino/Genuino 101, RX sul pin 13 non funziona.
Codice comune:
Librery SoftwareSerial: #include <SoftwareSerial.h> //Dichiarazione della libreria per l'implementazione software dello scambio tramite il protocollo UART. Il codice viene abilitato con la condizione COND_SSERIAL quando selezioniamo la porta UART - SoftwareSerial, dal parametro SERIAL_GSM.
Object SoftwareSerial: SoftwareSerial SSerial(<PIN_RX>, <PIN_TX>); //Dichiarazione dell'oggetto software e assegnazione dei pin. Il codice viene abilitato con la condizione COND_SSERIAL quando selezioniamo la porta UART - SoftwareSerial, dal parametro SERIAL_GSM.
Function prototype: String sendCommands(String command, bool wait); String waitAnswer(); //Dichiarazione dei prototipi di funzioni. È buona norma dichiarare le funzioni separatamente dall'implementazione.
Module initialization: <SERIAL_GSM>.begin(<SPEED>); //Velocità di scambio dati con il modulo.
Set the maximum number of milliseconds to wait: <SERIAL_GSM>.setTimeout(<WAITING_TIME>); //Imposta i millisecondi massimi di attesa per i dati seriali.
Function sendCommand:
Blocchi di esecuzione.
Blocco "Send command".
Blocco "Get unsolicited notifications".
Blocchi per identificare la stringa per l'analisi.
{