Un articol pentru cei care vor să forțeze Arduino să trimită SMS prin aceasta modul GSM . Modulul NEOWAY M590 bazat pe cipul SIM900 este potrivit pentru creare sistem de alarma de casa, casă inteligentă. Există, de asemenea, un modul GSM alternativ care se conectează direct la Arduino prin 5 Volți: Sim800L EVB v2.0
Formularea problemei
- Folosind numai Arduino și un modul GSM, controlați LED-ul printr-un apel de pe telefon.
- Trimiteți SMS (în timp ce printr-o comandă care vine prin monitorul portului din Arduino IDE)
Conectarea la Arduino
Conectăm modulul GSM la Arduino.
Modul 5V -> 5V Arduino
Modul GND -> Arduino GND
Modul TX -> digital pin2 Arduino
Modul RX -> digital pin3 Arduino
Pinout-ul poate fi văzut în fotografie. Ordinea contactelor este următoarea: 1 - +5V, 2 - GND, 7 - TX, 8 - RX.
Modulul poate fi alimentat de la 4V la 5V, eu am folosit ieșirea de 5 volți.
Modulul necesită alimentare separată deoarece consumă până la 2A la vârf. Cel mai probabil, un condensator nu va ajuta. Prin urmare, atunci când este alimentat de Arduino, este posibil să nu funcționeze sau să eșueze.
Masa Arduino și modulul GSM cu sursă de alimentare separată trebuie conectată, dar mai întâi trebuie să măsurați tensiunea dintre aceste „împământări” cu un multimetru. niste blocuri de calculatoare Sursele de alimentare au o scădere potențială pe carcasă și masă USB de până la 100V. Curentul de acolo este mic și nu poate ucide, dar este ușor să distrugi un Arduino sau un modul GSM sau ambele împreună.
Schiță
#include< SoftwareSerial. h> SoftwareSerial mySerial(2, 3); // RX, TX int ch = 0 ; int led = 13 ; String val = "" ; void setup() (întârziere (2000); //timpul de inițializare a modulului pinMode (led, OUTPUT) ; digitalWrite(led, LOW); Serial. începe(9600); //viteza portului Serial. println ("Tester GSM v1.0"); mySerial. începe(9600); mySerial. println ("AT+CLIP=1"); //activează întârzierea ID apelant (100); mySerial. println ("AT+CMGF=1"); //Mod de codare SMS - normal (pentru engleză)întârziere (100); mySerial. println("AT+CSCS=\"GSM\"" ); //modul de codare a textuluiîntârziere (100); ) bucla nulă () ( if (mySerial . available () ) ( //dacă modulul GSM ne-a trimis ceva, atunciîn timp ce (mySerial.available()) ( //salvați șirul de intrare în variabila val ch = mySerial. citit(); val += char (ch); întârziere (10); ) dacă (val . indexOf ( „RING”) > - 1 ) ( //dacă este detectat un apel, atunci verificați numărul dacă (val . indexOf ( "71234567890" ) > - 1 ) ( //dacă numărul apelantului este al nostru. Introduceți numărul fără „+” Serial. println( "--- INEL MASTER DETECTAT ---"); mySerial. println("ATH0"); //întrerupe conexiunea digitalWrite(led, HIGH); //aprinde LED-ul timp de 3 secundeîntârziere (3000); digitalWrite(led, LOW); //oprește releul ) ) altfel Serial. println(val); //tipărește linia primită pe monitorul portului val = "" ; ) dacă ( Serial. disponibil () ) ( //dacă este introdus ceva în monitorul portului in timp ce ( Serial. disponibil () ) ( //salvează șirul în variabila val ch = Serial. citit(); val += char (ch); întârziere (10); ) //mySerial.println(val); //transferul tuturor comenzilor introduse în monitorul portului către modulul GSM dacă (val . indexOf ( „sendsms”) > - 1 ) ( //dacă vedeți comanda pentru a trimite SMS sms(String("bună lume"), String("+71234567890")); //trimite SMS la numărul +71234567890) val = "" ; //clear ) ) void sms (String text , String phone ) //procedura de trimitere SMS { Serial. println("Trimitere SMS a început"); mySerial. println ("AT+CMGS=\"" + telefon + "\"" ); întârziere (500); mySerial. print(text); întârziere (500); mySerial. imprimare ((car ) 26 ); întârziere (500); Serial. println („SMS trimitere completă”); întârziere (2000); )
Examinare
GPRS
În versiunea de modul 1.30 în curs de revizuire, suportul GPRS este redus. Nu am putut să mă conectez la server după numele lui DNS (de exemplu mysite.ru), am reușit doar prin adresa lui IP. Nu au existat astfel de probleme în celălalt modul SIM800L.
Lista unor comenzi AT:
AT+CMGF=1 | Pe modul text(SMS numai în latină) | |||
AT+CSCS= „GSM” | Pe regim | |||
AT+CLIP=1 | activați identificarea numărului de apel primit Dacă trimiteți o comandă cu 0, identificarea numărului va fi dezactivată și modulul va trimite doar mesajul „SONERI” în loc de numărul apelantului. |
|||
AT+CMGS="+79123456789" | Se trimite SMS | |||
ATI | Obțineți informații despre dispozitiv | |||
AT+IPR=19200 | setarea vitezei portului | |||
AT+GSN | va returna IMEI-ul modulului | |||
AT+CCLK? | citiți ora din modul | |||
AT+CCLK=„aa/ll/zz,hh:mm:ss+zz” | unde comanda este „an/lună/data, oră: minute: secunde + fus orar” Datele trebuie trimise cu zerouri la început, adică, de exemplu, dacă luna noastră este „4”, atunci trebuie trimis „04” . Ia-l înapoi ora curentă iar data se poate trimite prin trimiterea aceleiași comenzi, doar cu semnul „?”: |
|||
AT+CMEE=0 | nivelul de informații despre eroare. Poate fi de la 0 la 2. 0 - dezactivat. Va scrie pur și simplu EROARE. 1 - cod de eroare. Va reveni cod digital erori. 2 - descrierea erorii. Va scrie exact ce nu-i place la echipă. Pentru a lucra cu modulul prin terminal, modurile ATV1, ATE1 AT+CMEE=2 sunt mai convenabile; pentru comunicarea cu microcontrolerul, este mai bine să utilizați ATV0, ATE0 și AT+CMEE=0 - acest lucru va ușura procesează răspunsurile primite. Aceste setări nu sunt salvate după repornirea modulului, așa că trebuie să includeți aceste comenzi în codul programului. |
|||
AT+CSQ | informații despre calitatea semnalului. Modulul va returna două numere +CSQ: 17.0 17 - nivelul semnalului. Poate fi în intervalul 0..31 sau 99. Cu cât mai mult, cu atât mai bine, dar 99 înseamnă absența lui. 0 - rata de eroare de comunicare (așa-numita RXQUAL). Poate fi de la 0 la 7, cu cât numărul este mai mic, cu atât calitatea comunicării este mai bună. |
|||
AT+COPS? | informații despre operatorul în a cărui rețea este înregistrat modulul | |||
ATD+79121234567; | formarea unui număr. (";" Neapărat) Modulul va apela numărul specificatși va returna una dintre opțiuni OCUP - numărul este ocupat FĂRĂ TON DE DIALTON - fără semnal pe linie FĂRĂ CARRIER - fără rețea sau altă problemă (de exemplu, fără bani în cont) RĂSPUNS NA - nici un răspuns CONECTARE - există un contact! |
|||
AT+CMGR=3,0 |
Modul KEYES SIM900 GSM GPRS de foarte înaltă calitate | Modul SIM800C pentru Arduino de la un furnizor de încredere |
Shield pentru dezvoltare, compatibil cu Arduino, bazat pe modulul SIM900 GPRS/GSM | Mini modul ieftin A6 GPRS GSM |
Conectarea scutului GSM GPRS la Arduino
În această secțiune vom analiza problemele legate de conectarea modulelor GSM la placa Aduino. Aproape toate exemplele se bazează pe Arduino Uno, dar majoritatea exemplelor vor fi folosite și pentru plăci Mega, Nano etc.
Conectarea modulului SIM800
Pentru a vă conecta, aveți nevoie de o placă Arduino, un modul SIM800L, un convertor de tensiune redus, fire de conectare și o baterie de 12V. Modulul SIM800L necesită o tensiune Arduino non-standard de 3,7 V; aceasta necesită un convertor de tensiune redus.
Pinout-ul modulului SIM800 este prezentat în figură.
Placa Arduino trebuie conectată la computer prin cablu USB. Conectați o baterie de 12V printr-un convertor: -12V la masă Arduino, de la masă la convertor negativ, +12V la convertor pozitiv. Ieșirile de la modulul TX și RX trebuie conectate la pinii 2 și 3 de pe Arduino. Mai multe module pot fi conectate la orice pin digital.
Modulul de conectare A6
Modulul A6 este mai ieftin decât SIM900 și este foarte ușor de conectat la Arduino. Modulul este alimentat de o tensiune de 5V, astfel încât conexiunea nu necesită elemente suplimentare de reducere a tensiunii.
Pentru a vă conecta veți avea nevoie de o placă Arduino (în în acest caz, revizuit Arduino UNO), modul GSM A6, fire de conectare. Schema de conectare este prezentată în figură.
Pinul RX de la modulul GSM trebuie conectat la TX de pe placa Arduino, pinul TX trebuie conectat la pinul RX de pe Arduino. Masa de la modul este conectata la masa de pe microcontroler. Pinul Vcc de pe modulul GSM trebuie conectat la PWR_KEY.
Conexiune folosind scutul GSM-GPRS
Înainte de conectare, este important să acordați atenție tensiunii de alimentare a scutului. Curentul la momentul unui apel sau trimitere de date poate atinge valori de 15-2 A, deci nu ar trebui să alimentați scutul direct de la Arduino.
Înainte de a vă conecta la Arduino, trebuie să instalați o cartelă SIM pe scutul GSM-GPRS. De asemenea, trebuie să instalați jumperii TX și RX, așa cum se arată în figură.
Conexiunea se face după cum urmează - primul contact (fir galben din figură) de la scut trebuie conectat la TX de pe Arduino. Al doilea pin (firul verde) se conectează la RX de pe Arduino. Terenul din scut este legat de pământul din aruino. Alimentarea microcontrolerului este furnizată printr-un cablu USB.
Dispunerea conexiunii dintre scut și placa Arduino este prezentată în figură.
Pentru a funcționa, va trebui să instalați biblioteca GPRS_Shield_Arduino.
Pentru a verifica corectitudinea circuit asamblat trebuie să faceți următoarele: conectați RESET și GND pe Arduino (acest lucru va duce la transferul datelor direct de pe scut la computer), introduceți cartela SIM în scut și porniți puterea scutului. Placa Arduino trebuie conectată la computer și apăsat butonul de pornire. Dacă totul este conectat corect, LED-ul roșu se va aprinde și LED-ul verde va clipi.
Scurtă descriere a interacțiunii prin comenzi AT
Comenzile AT sunt un set echipe speciale pentru un modem, constând din scurt șiruri de text. Pentru ca modemul să recunoască comanda dată, liniile trebuie să înceapă cu literele la. Șirul va fi acceptat când modemul este conectat modul de comandă. Comenzile AT pot fi trimise folosind fie o comunicare software, și manual de la tastatură. Aproape toate comenzile pot fi împărțite în 3 moduri - test, în care modulul răspunde dacă acceptă comanda; citire – parametrii de comandă curent de ieșire; scrie – vor fi scrise valori noi.
Lista celor mai utilizate comenzi AT:
- AT – pentru a verifica dacă modulul este conectat corect. Dacă totul este OK, se întoarce OK.
- A/ – repetă comanda anterioară.
- AT+IPR? – obținerea de informații despre viteza portului. Răspunsul va fi +IPR: 0 OK (0 în acest caz este automat).
- AT+ICF? – setarea transmisiei. Răspunsul va fi +ICF: bit, paritate.
- AT+IFC? – controlul transmisiei. Răspunsul va fi +IFC: terminal de la modul, modul de la terminal (0 – fără control, 1 – controlul programului, 2 – hardware).
- AT+GCAP – arată capabilitățile modulului. Un exemplu de răspuns este +GCAP:+FCLASS,+CGSM.
- AT+GSN – obținerea modulului IMEI. Exemplu de răspuns 01322600XXXXXXX.
- AT+COPS? – arată operatorii disponibili.
- AT+CPAS – stare modul. Răspuns +CPAS: 0. 0 – gata de muncă, 3 – apel primit, 4 – conexiune vocală, 2 – necunoscut.
- AT+CCLK? – informații despre ora și data curente.
- AT+CLIP=1 – activați/dezactivați ID apelant. 1 – activat, 0 – dezactivat.
- AT+CSCB=0 – primirea de mesaje SMS speciale. 0 – permis, 1 – dezactivat.
- AT+CSCS= „GSM” – codificarea mesajelor SMS. Puteți selecta una dintre următoarele codificări: IRA, GSM, UCS2, HEX, PCCP, PCDN, 8859-1.
- AT+CMEE=0 – primirea informațiilor de eroare.
- AT+CPIN=XXXX – introduceți codul PIN al cartelei SIM.
- AT&F – resetează la setările din fabrică.
- AT+CPOWD=1 – oprire urgentă (0) sau normală (1) a modulului.
- ATD+790XXXXXXX – apelați la numărul +790XXXXXXXXX.
- ATA – răspuns la apel.
- AT+CMGS="+790XXXXXXXXX">Test sms – trimiterea unui mesaj SMS la numărul +790XXXXXXXX.
În acest caz, am luat în considerare comenzi de bază pentru modulul SIM900. Pentru module diferite comenzile pot varia ușor. Datele pentru modul vor fi furnizate prin program special„terminal” care trebuie instalat pe computer. De asemenea, puteți trimite comenzi către modul prin monitorul portului din Arduino IDE.
Schițe pentru lucrul cu modulul GSM
Trimiterea de SMS folosind SIM900 ca exemplu
Înainte de a trimite un mesaj, trebuie să configurați modulul. În primul rând, trebuie să vă convertiți în format text mesaj transmis. Există o comandă AT+CMGF=1 pentru aceasta. Trebuie să convertiți codificarea în GSM utilizând comanda AT+CSCS="GSM". Această codificare este cea mai convenabilă, deoarece caracterele sunt reprezentate în cod ASCII, care este ușor de înțeles de către compilator.
Apoi trebuie să formați un mesaj SMS. Pentru a face acest lucru, este trimisă o comandă cu numărul de abonat AT+CMGS=»+79XXXXXXXXXX» r, ca răspuns vi se cere să introduceți un text SMS. Trebuie să trimiteți un mesaj. La finalizare, trebuie să trimiteți codul combinat Ctrl+Z, modulul va permite trimiterea textului către destinatar. Când mesajul este trimis, va fi returnat OK.
Interacțiunea cu modulul se bazează pe indici care sunt alocați fiecărui mesaj nou. Folosind acest index, puteți specifica ce mesaj să ștergeți sau să citiți.
Primirea SMS-urilor. Pentru a citi un mesaj SMS, utilizați comanda AT + CNMI = 2,2,0,0,0. Când va sosi modulul? mesaj text, va trimite către portul serial +CMTI: „SM”,2 (în acest caz 2 este număr de serie mesaje). Pentru a-l citi, trebuie să trimiteți comanda AT+CMGR=2.
Recepţie apel voce. În primul rând, pentru a avea o conversație, trebuie să conectați un difuzor și un microfon la modul. Când se primește un apel, va fi afișat numărul de la care a fost efectuat. Pentru a funcționa, trebuie să activați biblioteca GSM:
#include
Dacă cartela SIM este blocată, trebuie să introduceți codul PIN al acesteia. Dacă nu este necesar un cod PIN, acest câmp trebuie lăsat necompletat.
#define PINNUMBER „”
În setup(), transferul de date către computer trebuie inițializat. Urmatorul pas va crea o variabilă locală pentru a urmări starea conexiunii la rețea. Schița nu va rula până când cartela SIM este conectată la rețea.
boolean notConnected = adevărat;
Funcția gsmAccess.begin() este utilizată pentru a vă conecta la rețea. Când conexiunea este stabilită, va fi returnată valoarea GSM_READY.
vcs.hangCall(); – o funcție care indică faptul că modemul este pregătit pentru a primi apeluri.
getvoiceCallStatus() – determină starea schiței. Dacă cineva sună, returnează RECEIVINGCALL. Pentru a înregistra un număr, trebuie să utilizați funcția retrieveCallingNumber(). Când se răspunde la apel, TALKING va reveni. Schița va aștepta apoi personajul linie nouă pentru a întrerupe conversația.
Stabiliți o conexiune GPRS și trimiteți date către un server de la distanță
Mai întâi trebuie să instalați biblioteca SoftwareSerial, care vă permite să oferiți transfer de informații seriale și să conectați modulul GSM și microcontrolerul Arduino.
Pentru a trimite date către server, trebuie să trimiteți următoarele comenzi:
AT+SAPBR=1,1 – Carrier de deschidere.
Următoarele trei comenzi sunt legate de setarea setărilor de conexiune la rețea.
AT+SAPBR=3,1,\”APN\”,\”internet.mts.ru\” – alegere operator mts, numele punctului de acces.
AT+SAPBR=3,1,\”USER\”,\” mts \” – selectați utilizatorul mts.
AT+SAPBR=3,1,\”PWD\”,\”mts\”
AT+SAPBR=1,1 – stabilirea conexiunii.
AT+HTTPINIT – inițializare http.
AT+HTTPPARA=”URL”, – adresa URL.
AT+HTTPREAD – în așteptarea unui răspuns.
AT+HTTTERM – opriți http.
Dacă totul este făcut corect, liniile cu comenzi AT vor apărea în monitorul portului. Dacă nu există nicio conexiune cu modemul, acesta va afișa câte o linie odată. Când conexiunea GPRS este stabilită cu succes, LED-ul de pe modul va începe să clipească.
Vreau să vă prezint un mod foarte simplu telecomandă alimentare electrică
Vom folosi prize RC gata făcute, așa că nu va trebui să lipim nimic. Acest lucru este foarte tare, pentru că este mai bine să nu atingeți 220 V (pentru începători).
Cod
Dacă nu utilizați GSMSHIELD, ci o altă bibliotecă, atunci codul va fi desigur diferit, dar principiul va fi același. La anumite intervale, verificăm dacă avem vreun SMS necitit, le analizăm, iar dacă a venit o comandă validă de la un număr autorizat, trimitem un semnal radio cu funcțiile mySwitch.switchOff sau mySwitch.switchOn, trecându-le adresa priză.Notă in cazul meu, pentru scutul de la Seeedstudio, a trebuit sa intru in GSM.cpp si sa schimb pinii specificati la 7 si 8./* Arduino GSM-switch exemplu cod Pornire/oprire prize controlate radio Autor: Vladislav Ross, 2014 Contact: [email protected] Trebuie să descărcați: 1. rc-switch https://code.google.com/p/rc-switch/ 2. GSMSHIELD http://www.gsmlib.org/ Pentru GSMSHIELD: * Pentru a schimba pinii pentru Software Serial, utilizați cele două linii din GSM.cpp. *Dacă tu esti folosind Mega, decomentează linia „#define MEGA” în HWSerial.h * Puteți activa mesajele de depanare pe portul serial definind DEBUG_ON */ #include „SIM900.h” #include
Probleme?
Dacă prizele nu doresc să treacă la niciuna, puteți încerca să primiți un semnal de la telecomanda originală la receptor. rc-switch are cod exemplu.Ce urmeaza?
Cum se poate dezvolta acest proiect în continuare?În primul rând, mai avem o grămadă de pini pe Arduino în sine și pe scutul GSM. Puteți conecta unii senzori sau dispozitive la ei. De exemplu, faceți monitorizarea temperaturii de la distanță sau udați flori.
În al doilea rând, am folosit doar SMS-uri, iar modulul poate transmite și voce și GPRS. GPRS poate transfera mult mai multe date. În plus, nu trebuie să închizi când apelezi, ci, de exemplu, să accepți apelul și să-i lași să asculte ce se întâmplă pe loc.
De asemenea, este posibil să doriți să primiți SMS-uri de control nu de la un număr, ci de la mai multe. În acest caz, aș recomanda stocarea numerelor în agendă; biblioteca are funcțiile corespunzătoare.