Un articolo per chi vuole obbligare Arduino a inviare SMS tramite questo Modulo GSM ... Il modulo NEOWAY M590 basato sul chip SIM900 è adatto per creare un allarme fatto in casa, una casa intelligente. Esiste anche un modulo GSM alternativo che si collega direttamente ad Arduino tramite 5 Volt: Sim800L EVB v2.0
Formulazione del problema
- Utilizzando solo Arduino e modulo GSM, controlla il LED tramite una telefonata.
- Invia SMS (mentre tramite il comando proveniente dal monitor della porta all'IDE di Arduino)
Connessione ad Arduino
Colleghiamo il modulo GSM ad Arduino.
Modulo 5V -> Arduino 5V
Modulo GND -> GND Arduino
Modulo TX -> digitale pin2 Arduino
Modulo RX -> digitale pin3 Arduino
Puoi vedere il pinout nella foto. L'ordine dei contatti è il seguente: 1 - + 5V, 2 - GND, 7 - TX, 8 - RX.
Puoi alimentare il modulo da 4V a 5V, io ho usato un'uscita a 5 volt.
Il modulo richiede un'alimentazione separata, poiché consuma fino a 2A di picco. Il condensatore molto probabilmente non ti salverà. Pertanto, se alimentato da Arduino, potrebbe non funzionare o presentare errori.
La massa di Arduino e del modulo GSM devono essere collegate con alimentazione separata, ma prima è necessario misurare la tensione tra queste "masse" con un multimetro. Alcuni alimentatori per computer hanno una caduta di tensione fino a 100 V attraverso lo chassis USB e la messa a terra. La corrente è scarsa e non può uccidere, ma è facile distruggere l'Arduino o il modulo GSM, o entrambi.
Schizzo
#includere< SoftwareSerial... h> SoftwareSerial mySerial (2, 3); // RX, TX int ch = 0; led int = 13; Stringa val = ""; configurazione nulla () (ritardo (2000); // tempo per inizializzare il modulo pinMode (led, OUTPUT); digitalWrite (led, LOW); Seriale... iniziare (9600); // velocità della porta Seriale... println ("Tester GSM v1.0"); mioSerial. iniziare (9600); mioSerial. println ("AT + CLIP = 1"); // attiva il ritardo AON (100); mioSerial. println ("AT + CMGF = 1"); // Modalità di codifica SMS - normale (per l'inglese) ritardo (100); mioSerial. println ("AT + CSCS = \" GSM \ ""); // modalità di codifica del testo ritardo (100); ) void loop() (if (mySerial. available()) ( // se il modulo GSM ci ha inviato qualcosa, allora mentre (mySerial. disponibile ()) ( // salva la stringa di input nella variabile val ch = mySerial. leggere (); val + = carattere (ch); ritardo (10); ) if (val. indexOf ("RING")> - 1) ( // se viene trovata una chiamata, controlla il numero if (val. indexOf ("71234567890")> - 1) ( // se il numero del chiamante è il nostro. Inserisci il tuo numero senza "+" Seriale... println ( "--- RILEVATO SQUILLO PRINCIPALE ---"); mioSerial. println ("ATH0"); // interrompe la connessione digitalWrite (led, HIGH); // accendi il LED per 3 sec ritardo (3000); digitalWrite (led, LOW); // spengo il relè)) else Seriale... println (val); // stampa la riga ricevuta sul monitor della porta val = ""; ) Se ( Seriale... a disposizione ()) ( // se viene inserito qualcosa nel monitor della porta mentre ( Seriale... a disposizione ()) ( // salva la stringa nella variabile val ch = Seriale... leggere (); val + = carattere (ch); ritardo (10); ) //mySerial.println(val); // trasferimento di tutti i comandi digitati nel monitor della porta al modulo GSM if (val. indexOf ("sendsms")> - 1) ( // se hai visto il comando per inviare SMS sms (String ("ciao mondo"), String ("+71234567890")); // invia SMS al numero +71234567890) val = ""; // chiaro)) void sms (stringa di testo, stringa di telefono) // procedura per l'invio di SMS { Seriale... println ("Invio SMS avviato"); mioSerial. println ("AT + CMGS = \" "+ telefono +" \ ""); ritardo (500); mioSerial. stampa (testo); ritardo (500); mioSerial. stampa ((carattere) 26); ritardo (500); Seriale... println ("Invio SMS completato"); ritardo (2000); )
Visita medica
GPRS
Nella versione considerata del modulo 1.30, il supporto GPRS è ridotto. Non sono riuscito a connettermi al server tramite il suo nome DNS (ad esempio mysite.ru), è risultato solo tramite l'indirizzo IP. Non ci sono stati tali problemi in un altro modulo SIM800L.
Elenco di alcuni comandi AT:
AT + CMGF = 1 | incl. modalità testo (SMS solo in latino) | |||
AT + CSCS = "GSM" | incl. regime | |||
AT + CLIP = 1 | abilitare l'identificazione del numero di chiamata in entrata Se si invia un comando con 0, l'identificazione del numero verrà disabilitata e il modulo invierà solo il messaggio "RING" al posto del numero del chiamante. |
|||
AT + CMGS = "+ 79123456789" | Invio di SMS | |||
ATI | Ottieni informazioni sul dispositivo | |||
AT + DPI = 19200 | impostazione della velocità della porta | |||
AT + GSN | restituirà l'IMEI del modulo | |||
AT + CCLK? | leggi l'ora dal modulo | |||
AT + CCLK = "aa / mm / gg, hh: mm: ss + zz" | dove va in ordine "anno/mese/data, ora:minuti:secondi+fuso orario". I dati devono essere inviati con degli zeri iniziali, cioè, ad esempio, se il mese che abbiamo è "4", allora "04" deve essere inviato. Puoi recuperare l'ora e la data correnti inviando lo stesso comando, solo con il segno "?": |
|||
AT + CME = 0 | livello di informazione sull'errore. Può essere da 0 a 2. 0 - disabilitato. Scriverà solo ERRORE. 1 - codice di errore. Restituirà un codice di errore numerico. 2 - descrizione dell'errore. Scriverà esattamente cosa non gli piace della squadra. Per lavorare con il modulo attraverso il terminale, è più conveniente utilizzare le modalità ATV1, ATE1 AT + CMEE = 2, per comunicare con il microcontrollore è meglio usare ATV0, ATE0 e AT + CMEE = 0 - questo lo farà più facile elaborare le risposte ricevute. Queste impostazioni non vengono salvate dopo il riavvio del modulo, quindi è necessario includere questi comandi nel codice del programma. |
|||
AT + CSQ | informazioni sulla qualità del segnale. Il modulo restituirà due numeri + CSQ: 17.0 17 - livello del segnale. Può essere nell'intervallo 0..31 o 99. Più sono e meglio è, ma 99 significa la sua assenza. 0 - tasso di errore di comunicazione (cosiddetto RXQUAL). Può essere compreso tra 0 e 7, più basso è il numero, migliore è la qualità della connessione. |
|||
AT + POLIZIOTTI? | informazioni sull'operatore nella cui rete è registrato il modulo | |||
ATD + 79121234567; | componendo un numero. (";" necessariamente) Il modulo chiamerà il numero specificato e restituirà una delle opzioni OCCUPATO - il numero è occupato NO DIALTONE - nessun segnale sulla linea NESSUN CARRIER - nessuna rete o altro problema (ad esempio, non ci sono soldi nel conto) NA RISPOSTA - nessuna risposta CONNETTI - c'è un contatto! |
|||
AT + CMGR = 3.0 |
Modulo GSM GPRS KEYES SIM900 di altissima qualità | Modulo SIM800C per arduino da un fornitore fidato |
Scudo di sviluppo compatibile con Arduino basato sul modulo SIM900 GPRS / GSM | Modulo GSM GPRS mini A6 economico |
Collegamento dello shield GSM GPRS ad Arduino
In questa sezione esamineremo le problematiche relative al collegamento dei moduli GSM alla scheda aduino. Quasi tutti gli esempi sono basati su Arduino Uno, ma la maggior parte degli esempi andrà per schede Mega, Nano, ecc.
Collegamento del modulo SIM800
Per il collegamento è necessaria una scheda Arduino, un modulo SIM800L, un convertitore di tensione step-down, cavi per il collegamento e una batteria da 12V. Il modulo SIM800L richiede una tensione di 3,7 V, che non è standard per Arduino, per questo è necessario un convertitore di tensione step-down.
Il pinout del modulo SIM800 è mostrato in figura.
La scheda Arduino deve essere collegata al computer tramite un cavo USB. Collegare una batteria da 12 V attraverso il convertitore: -12 V alla massa Arduino, dalla massa al convertitore al negativo, + 12V al convertitore al positivo. Le uscite del modulo TX e RX devono essere collegate ai pin 2 e 3 di Arduino. Più moduli possono essere collegati a qualsiasi pin digitale.
Collegamento del modulo A6
Il modulo A6 è più economico del SIM900 ed è molto facile da collegare ad Arduino. Il modulo è alimentato a 5V, quindi non sono necessari ulteriori riduttori di tensione per il collegamento.
Per connettersi, avrai bisogno di una scheda Arduino (in questo caso viene considerato Arduino UNO), modulo GSM A6, cavi di collegamento. Lo schema di collegamento è mostrato in figura.
Il pin RX del modulo GSM deve essere collegato al TX sulla scheda Arduino, il pin TX deve essere collegato al pin RX sull'Arduino. La massa del modulo è collegata alla massa del microcontrollore. Il pin Vcc del modulo GSM deve essere connesso a PWR_KEY.
Connessione tramite schermo GSM-GPRS
Prima di effettuare il collegamento è importante prestare attenzione alla tensione di schermatura. La corrente al momento di una chiamata o di invio dati può raggiungere valori di 15-2 A, quindi non bisogna alimentare lo shield direttamente dall'Arduino.
Prima di connettersi ad Arduino, è necessario installare una scheda SIM sullo shield GSM-GPRS. È inoltre necessario impostare i jumper TX e RX come mostrato in figura.
Il collegamento viene effettuato come segue: il primo contatto (filo giallo in figura) dallo shield deve essere collegato a TX sull'Arduino. Il secondo pin (filo verde) si collega a RX su Arduino. La terra dello scudo si collega alla terra dell'aruino. Il microcontrollore è alimentato tramite un cavo USB.
Lo schema della connessione tra lo shield e la scheda Arduino è mostrato in figura.
Per funzionare è necessario installare la libreria GPRS_Shield_Arduino.
Per verificare la correttezza del circuito assemblato, è necessario effettuare le seguenti operazioni: collegare RESET e GND sull'Arduino (questo porterà al fatto che i dati verranno trasmessi direttamente dallo shield al computer), inserire la SIM card lo scudo e accendere il potere dello scudo. La scheda Arduino deve essere collegata al computer e il pulsante di accensione deve essere premuto. Se tutto è collegato correttamente, il LED rosso si accenderà e il verde lampeggerà.
Breve descrizione dell'interazione tramite comandi AT
I comandi AT sono un insieme di comandi speciali per il modem, costituiti da brevi stringhe di testo. Affinché il modem riconosca il comando impartitogli, le righe devono iniziare con le lettere at. La stringa verrà accettata quando il modem è in modalità comando. I comandi AT possono essere inviati utilizzando il software di comunicazione o manualmente dalla tastiera. Quasi tutti i comandi possono essere suddivisi in 3 modalità: modalità test, in cui il modulo risponde se supporta il comando; lettura - emissione dei parametri di comando correnti; registrazione - verranno registrati nuovi valori.
Elenco dei comandi AT più utilizzati:
- AT - per verificare se il modulo è collegato correttamente. Se tutto è OK, restituisce OK.
- A / - ripeti il comando precedente.
- AT + DPI? - ottenere informazioni sulla velocità della porta. La risposta è + IPR: 0 OK (0 in questo caso è automatico).
- AT+ICF? - impostazione della trasmissione. La risposta sarà + ICF: bit, parità.
- AT + IFC? - controllo della trasmissione. La risposta sarà + IFC: terminale dal modulo, modulo dal terminale (0 - nessun controllo, 1 - controllo software, 2 - controllo hardware).
- AT + GCAP - mostra le capacità del modulo. Un esempio di risposta è + GCAP: + FCLASS, + CGSM.
- AT + GSN - ottenere il modulo IMEI. Esempio di risposta 01322600XXXXXXX.
- AT + POLIZIOTTI? - mostra gli operatori disponibili.
- AT + CPAS - stato del modulo. Risposta + CPAS: 0. 0 - pronto per il lavoro, 3 - chiamata in arrivo, 4 - connessione vocale, 2 - sconosciuto.
- AT + CCLK? - informazioni sull'ora e la data correnti.
- AT + CLIP = 1 - abilita / disabilita l'ID chiamante. 1 - abilitato, 0 - disabilitato.
- AT + CSCB = 0 - ricevi messaggi SMS speciali. 0 - abilitato, 1 - disabilitato.
- AT + CSCS = “GSM” - Codifica messaggi SMS. È possibile selezionare una delle seguenti codifiche: IRA, GSM, UCS2, HEX, PCCP, PCDN, 8859-1.
- AT + CMEE = 0 - ricezione di informazioni sull'errore.
- AT + CPIN = XXXX - inserisci il codice pin della carta SIM.
- AT&F - ripristina le impostazioni di fabbrica.
- AT + CPOWD = 1 - arresto urgente (0) o normale (1) del modulo.
- ATD + 790XXXXXXXX - chiamare al numero + 790XXXXXXXX.
- ATA - risposta alla chiamata.
- AT + CMGS = "+ 790XXXXXXXX"> Test sms - invio di un messaggio SMS al numero + 790XXXXXXXX.
In questo caso vengono considerati i comandi base per il modulo SIM900. Per moduli diversi, i comandi potrebbero differire leggermente. I dati per il modulo verranno alimentati tramite un apposito programma "terminale", che deve essere installato sul computer. Puoi anche inviare comandi al modulo attraverso il monitor della porta nell'IDE di Arduino.
Schizzi per lavorare con il modulo GSM
Invio SMS su esempio SIM900
Prima di inviare un messaggio, è necessario configurare il modulo. Prima di tutto, devi tradurre il messaggio trasmesso in formato testo. Per questo c'è un comando AT + CMGF = 1. È necessario trasferire la codifica al GSM con il comando AT + CSCS = "GSM". Questa codifica è la più conveniente, poiché i caratteri sono rappresentati in codice ASCII, che il compilatore comprende facilmente.
Quindi è necessario digitare un messaggio SMS. Per fare ciò, viene inviato un comando con il numero dell'abbonato AT + CMGS = "+ 79XXXXXXXXX" r, in risposta si suggerisce di digitare un testo SMS. Devi inviare un messaggio. Al termine, è necessario inviare il codice combinato Ctrl + Z, il modulo consentirà l'invio del testo al destinatario. Quando il messaggio è stato inviato, tornerà OK.
L'interazione con il modulo si basa su indici che vengono assegnati ad ogni nuovo messaggio. Questo indice può essere utilizzato per indicare quale messaggio eliminare o leggere.
Ricezione di SMS. Per leggere i messaggi SMS utilizzare il comando AT + CNMI = 2,2,0,0,0. Quando il modulo riceve un SMS, invierà alla porta seriale + CMTI: "SM", 2 (in questo caso 2 è il numero progressivo del messaggio). Per leggerlo è necessario inviare il comando AT + CMGR = 2.
Ricezione di una chiamata vocale. Prima di tutto, per una conversazione, è necessario collegare un altoparlante e un microfono al modulo. Quando si riceve una chiamata, verrà mostrato il numero da cui è stata effettuata. Per eseguire il lavoro è necessario abilitare la libreria GSM:
#includere
Se la carta SIM è bloccata, è necessario inserire il suo codice PIN. Se non è richiesto un codice PIN, questo campo deve essere lasciato vuoto.
#define PINNUMBER “”
In setup(), deve essere eseguita l'inizializzazione del trasferimento dei dati al computer. Il passaggio successivo consiste nel creare una variabile locale per tenere traccia dello stato della connessione di rete. Lo schizzo non verrà eseguito finché la carta SIM non sarà connessa alla rete.
booleano notConnected = vero;
La funzione gsmAccess.begin() viene utilizzata per connettersi alla rete. Una volta stabilita la connessione, verrà restituito il valore GSM_READY.
vcs.hangCall (); - una funzione che mostra che il modem è pronto a ricevere chiamate.
getvoiceCallStatus() - Determina lo stato dello schizzo. Se qualcuno chiama, restituisce RECEIVINGCALL. Per registrare il numero, è necessario utilizzare la funzione retrieveCallingNumber(). Quando si risponde alla chiamata, TALKING tornerà. Lo schizzo attenderà quindi una nuova riga per interrompere la conversazione.
Stabilisci una connessione GPRS e invia i dati a un server remoto
Innanzitutto, è necessario installare la libreria SoftwareSerial, che consente di fornire il trasferimento di informazioni seriali e collegare il modulo GSM e il microcontrollore Arduino.
Per inviare dati al server, è necessario inviare i seguenti comandi:
AT + SAPBR = 1.1 - Apertura del carrello.
I prossimi tre comandi riguardano l'impostazione delle impostazioni della connessione di rete.
AT + SAPBR = 3,1, \ ”APN \”, \ ”internet.mts.ru \” - seleziona operatore mts, nome punto di accesso.
AT + SAPBR = 3,1, \ ”USER \”, \ ”mts \” - la scelta dell'utente mts.
AT + SAPBR = 3,1, \ ”PWD \”, \ ”mts \”
AT + SAPBR = 1.1 - creazione della connessione.
AT + HTTPINIT - inizializza http.
AT + HTTPPARA = "URL", - indirizzo URL.
AT + HTTPREAD - in attesa di una risposta.
AT + HTTPTERM - interrompe http.
Se tutto è stato eseguito correttamente, nel monitor della porta appariranno le righe con i comandi AT. Se non c'è connessione con il modem, mostrerà una riga alla volta. Se la connessione GPRS è stata stabilita con successo, il LED sul modulo inizierà a lampeggiare.
Voglio presentarti un modo molto semplice per controllare l'alimentazione da remoto.
Utilizzeremo prese radiocomandate già pronte, quindi non dovremo saldare nulla. Questo è molto bello, perché è meglio lasciare 220V (per i principianti) da soli.
Il codice
Se non stai usando GSMSHIELD, ma qualche altra libreria, il codice ovviamente sarà diverso, ma il principio sarà lo stesso. A determinati intervalli di tempo, controlliamo se abbiamo SMS non letti, li analizziamo e se un comando valido proviene da un numero autorizzato, quindi inviamo un segnale radio utilizzando le funzioni mySwitch.switchOff o mySwitch.switchOn, passando loro l'indirizzo della presa.ca. Nel mio caso, per lo shield Seeedstudio, ho dovuto accedere a GSM.cpp e modificare i pin impostati su 7 e 8./ * Codice di esempio interruttore GSM Arduino Accendere/spegnere prese radiocomandate Autore: Vladislav Ross, 2014 Contatto: [e-mail protetta] Devi scaricare: 1. rc-switch https://code.google.com/p/rc-switch/ 2. GSMSHIELD http://www.gsmlib.org/ Per GSMSHIELD: * Per cambiare i pin per Software Serial, utilizzare le due linee in GSM.cpp. * Se stai usando Mega, decommenta la riga "#define MEGA" in HWSerial.h * Puoi abilitare i messaggi di debug sulla porta seriale definendo DEBUG_ON * / #include "SIM900.h" #include
I problemi?
Se le prese non vogliono passare a nessuna, puoi provare a ricevere un segnale dal tuo telecomando al ricevitore. C'è un codice di esempio in rc-switch.Qual è il prossimo?
Come può essere ulteriormente sviluppato questo progetto:Innanzitutto, abbiamo ancora un mucchio di pin rimasti sull'Arduino stesso e sullo shield GSM. È possibile collegare ad essi alcuni sensori o dispositivi. Ad esempio, fai il monitoraggio remoto della temperatura o innaffia i fiori.
In secondo luogo, abbiamo utilizzato solo SMS e il modulo può ancora trasmettere voce e GPRS. Il GPRS può trasferire molti più dati. Inoltre, non puoi riagganciare il telefono quando chiami, ma, ad esempio, rispondere a una chiamata e farti ascoltare cosa sta succedendo sul posto.
È anche possibile che tu voglia ricevere SMS di controllo non da un numero, ma da più. In questo caso, consiglierei di memorizzare i numeri nella rubrica, in libreria ci sono funzioni corrispondenti.