Një artikull për ata që duan të detyrojnë Arduino të dërgojë SMS përmes kësaj Moduli GSM ... Moduli NEOWAY M590 i bazuar në çipin SIM900 është i përshtatshëm për krijimin e një alarmi shtëpiak, shtëpi inteligjente. Ekziston gjithashtu një modul alternativ GSM që lidhet drejtpërdrejt me Arduino përmes 5 Volt: Sim800L EVB v2.0
Formulimi i problemit
- Duke përdorur vetëm modulin Arduino dhe GSM, kontrolloni LED përmes një telefonate.
- Dërgoni SMS (ndërsa përmes komandës që vjen përmes monitorit të portit në Arduino IDE)
Lidhja me Arduino
Ne lidhim modulin GSM me Arduino.
Moduli 5V -> 5V Arduino
Moduli GND -> GND Arduino
Moduli TX -> pin2 dixhital Arduino
Moduli RX -> pin3 dixhital Arduino
Ju mund të shihni pinout në foto. Rendi i kontakteve është si më poshtë: 1 - + 5V, 2 - GND, 7 - TX, 8 - RX.
Mund ta fuqizoni modulin nga 4V në 5V, unë përdora një dalje 5 volt.
Moduli kërkon një furnizim të veçantë me energji elektrike, sepse konsumon deri në 2A piku. Me shumë mundësi, kondensatori nuk do t'ju shpëtojë. Prandaj, kur mundësohet nga Arduino, ai mund të mos funksionojë ose të jetë me buggy.
Toka e Arduino dhe moduli GSM duhet të lidhen me furnizim të veçantë të energjisë, por së pari duhet të matni tensionin midis këtyre "bazave" me një multimetër. Disa furnizime me energji kompjuteri kanë një rënie të tensionit deri në 100 V nëpër shasinë USB dhe tokëzimin. Rryma atje është e pakët dhe nuk mund të vrasë, por është e lehtë të shkatërrosh Arduino ose modulin GSM, ose të dyja.
Skicë
#përfshi< SoftwareSerial... h> SoftwareSerial mySerial (2, 3); // RX, TX int ch = 0; int led = 13; String val = ""; konfigurimi i zbrazët () (vonesë (2000); // koha për të inicializuar modulin pinMode (led, OUTPUT); digitalWrite (led, LOW); Serial... fillimi (9600); // shpejtësia e portit Serial... println ("GSM testues v1.0"); mySeriali. fillimi (9600); mySeriali. println ("AT + CLIP = 1"); // aktivizoni vonesën AON (100); mySeriali. println ("AT + CMGF = 1"); // Mënyra e kodimit të SMS - normale (për anglisht) vonesë (100); mySeriali. println ("AT + CSCS = \" GSM \ ""); // modaliteti i kodimit të tekstit vonesë (100); ) void loop () (nëse (mySerial. disponohet ()) ( // nëse moduli GSM na ka dërguar diçka, atëherë ndërsa (mySerial. në dispozicion ()) ( // ruani vargun e hyrjes në variablin val ch = mySeriali. lexoni (); val + = char (ch); vonesë (10); ) if (val. indexOf ("UNAZE")> - 1) ( // nëse gjendet një telefonatë, atëherë kontrolloni numrin nëse (val. indexOf ("71234567890")> - 1) ( // nëse numri i telefonuesit është i yni. Fusni numrin tuaj pa "+" Serial... println ( "--- U Zbulua unaza KRYESORE ---"); mySeriali. println ("ATH0"); // prish lidhjen digitalWrite (led, LARTË); // ndizni LED-in për 3 sekonda vonesë (3000); digitalWrite (led, LOW); // fik rele)) tjetër Serial... println (val); // printoni linjën e marrë në monitorin e portit val = ""; ) nese ( Serial... në dispozicion ()) ( // nëse diçka është futur në monitorin e portit derisa ( Serial... në dispozicion ()) ( // ruajeni vargun në variablin val ch = Serial... lexoni (); val + = char (ch); vonesë (10); ) //mySerial.println(val); // transferimi i të gjitha komandave të shtypura në monitorin e portit në modulin GSM if (val. indexOf ("sendsms")> - 1) ( // nëse keni parë komandën për të dërguar SMS sms (String ("përshëndetje botë"), String ("+71234567890")); // dërgoni SMS në numrin +71234567890) val = ""; // e qartë)) sms e pavlefshme (teksti i vargut, telefoni i vargut) // procedura për dërgimin e SMS { Serial... println ("Dërgimi SMS filloi"); mySeriali. println ("AT + CMGS = \" "+ telefon +" \ ""); vonesë (500); mySeriali. print (tekst); vonesë (500); mySeriali. print ((char) 26); vonesë (500); Serial... println ("Dërgimi SMS përfundoi"); vonesë (2000); )
Ekzaminimi
GPRS
Në versionin e konsideruar të modulit 1.30, mbështetja GPRS është shkurtuar. Nuk munda të lidhesha me serverin me emrin e tij DNS (për shembull mysite.ru), doli vetëm nga adresa IP. Nuk kishte probleme të tilla në një modul tjetër SIM800L.
Lista e disa komandave AT:
AT + CMGF = 1 | Përfshirë modaliteti i tekstit (SMS vetëm në latinisht) | |||
AT + CSCS = "GSM" | Përfshirë regjimit | |||
AT + CLIP = 1 | mundësojnë identifikimin e numrit të thirrjes në hyrje Nëse dërgoni një komandë me 0, identifikimi i numrit do të çaktivizohet dhe moduli do të dërgojë vetëm mesazhin "RING" në vend të numrit të telefonuesit. |
|||
AT + CMGS = "+ 79123456789" | Dërgimi i SMS | |||
ATI | Merrni informacionin e pajisjes | |||
AT + IPR = 19200 | përcaktimi i shpejtësisë së portit | |||
AT + GSN | do të kthejë IMEI të modulit | |||
AT + CCLK? | lexoni kohën nga moduli | |||
AT + CCLK = "vv / mm / dd, hh: mm: ss + zz" | ku shkon sipas radhës "viti / muaji / data, ora: minuta: sekonda + zona kohore". Të dhënat duhet të dërgohen me zero kryesore, domethënë, për shembull, nëse muaji që kemi është "4", atëherë "04" duhet të dërgohen. Mund ta ktheni orën dhe datën aktuale duke dërguar të njëjtën komandë, vetëm me shenjën "?": |
|||
AT + CMEE = 0 | niveli i informacionit të gabimit. Mund të jetë nga 0 në 2. 0 - me aftësi të kufizuara. Ai thjesht do të shkruajë ERROR. 1 - kodi i gabimit. Do të kthejë një kod gabimi numerik. 2 - përshkrimi i gabimit. Ai do të shkruajë se çfarë saktësisht nuk i pëlqen në ekip. Për të punuar me modulin përmes terminalit, është më i përshtatshëm të përdorni mënyrat ATV1, ATE1 AT + CMEE = 2, për të komunikuar me mikrokontrolluesin është më mirë të përdorni ATV0, ATE0 dhe AT + CMEE = 0 - kjo do ta bëjë atë më e lehtë për të përpunuar përgjigjet e marra. Këto cilësime nuk ruhen pas rindezjes së modulit, prandaj është e nevojshme që këto komanda të përfshihen në kodin e programit. |
|||
AT + CSQ | informacion mbi cilësinë e sinjalit. Moduli do të kthejë dy numra + CSQ: 17.0 17 - niveli i sinjalit. Mund të jetë në intervalin 0..31 ose 99. Sa më shumë, aq më mirë, por 99 do të thotë mungesë e tij. 0 - shkalla e gabimit të komunikimit (i ashtuquajturi RXQUAL). Mund të jetë nga 0 në 7, sa më i ulët të jetë numri, aq më i mirë është cilësia e lidhjes. |
|||
AT + POLICIA? | informacion rreth operatorit në rrjetin e të cilit është regjistruar moduli | |||
ATD + 79121234567; | duke formuar një numër. (";" domosdoshmërisht) Moduli do të telefonojë numrin e specifikuar dhe do të kthejë një nga opsionet BUSY - numri është i zënë PA DIALTONE - nuk ka sinjal në linjë JO MBARTËS - nuk ka rrjet ose problem tjetër (për shembull, nuk ka para në llogari) PËRGJIGJE NA - pa përgjigje LIDHJE - ka një kontakt! |
|||
AT + CMGR = 3.0 |
Moduli GSM GPRS KEYES SIM900 me cilësi shumë të lartë | Moduli SIM800C për arduino nga një furnizues i besueshëm |
Mburoja e zhvillimit të pajtueshëm me Arduino bazuar në modulin SIM900 GPRS / GSM | Moduli i lirë mini A6 GPRS GSM |
Lidhja e mburojës GSM GPRS me Arduino
Në këtë seksion, ne do të shqyrtojmë çështjet e lidhjes së moduleve GSM me bordin aduino. Pothuajse të gjithë shembujt bazohen në Arduino Uno, por shumica e shembujve do të shkojnë për bordet Mega, Nano, etj.
Lidhja e modulit SIM800
Për t'u lidhur, ju nevojitet një tabelë Arduino, një modul SIM800L, një konvertues i tensionit në ulje, tela për lidhje dhe një bateri 12 V. Moduli SIM800L kërkon një tension prej 3.7 V, i cili është jo standard për Arduino, për këtë ju nevojitet një konvertues i tensionit në rënie.
Pika e modulit SIM800 tregohet në figurë.
Bordi Arduino duhet të lidhet me kompjuterin përmes një kabllo USB. Lidhni një bateri 12 V përmes konvertuesit: -12 V në tokëzimin Arduino, nga toka në konvertues në minus, + 12 V në konvertues në plus. Daljet nga moduli TX dhe RX duhet të lidhen me kunjat 2 dhe 3 në Arduino. Module të shumta mund të lidhen me çdo kunj dixhitale.
Lidhja e modulit A6
Moduli A6 është më i lirë se SIM900 dhe lidhet shumë lehtë me Arduino. Moduli mundësohet nga 5V, prandaj elementë shtesë reduktues të tensionit nuk kërkohen për lidhje.
Për t'u lidhur, do t'ju duhet një bord Arduino (në këtë rast, konsiderohet Arduino UNO), moduli GSM A6, telat lidhës. Diagrami i lidhjes është paraqitur në figurë.
Pini RX nga moduli GSM duhet të lidhet me TX në tabelën Arduino, kunja TX duhet të lidhet me pinin RX në Arduino. Toka nga moduli është e lidhur me tokën në mikrokontrollues. Pini Vcc në modulin GSM duhet të lidhet me PWR_KEY.
Lidhja nëpërmjet mburojës GSM-GPRS
Para lidhjes, është e rëndësishme t'i kushtoni vëmendje tensionit të mburojës. Rryma në momentin e një telefonate ose dërgimit të të dhënave mund të arrijë vlerat 15-2 A, kështu që nuk duhet të ndizni mburojën direkt nga Arduino.
Përpara se të lidheni me Arduino, duhet të instaloni një kartë SIM në mburojën GSM-GPRS. Ju gjithashtu duhet të vendosni kërcyesit TX dhe RX siç tregohet në figurë.
Lidhja bëhet si më poshtë - kontakti i parë (teli i verdhë në figurë) nga mburoja duhet të lidhet me TX në Arduino. Kunja e dytë (teli jeshil) lidhet me RX në Arduino. Toka nga mburoja lidhet me tokën nga aruino. Mikrokontrolluesi mundësohet nëpërmjet një kablloje USB.
Paraqitja e lidhjes midis mburojës dhe tabelës Arduino është paraqitur në figurë.
Për të punuar, duhet të instaloni bibliotekën GPRS_Shield_Arduino.
Për të kontrolluar korrektësinë e qarkut të montuar, duhet të bëni sa më poshtë: lidhni RESET dhe GND në Arduino (kjo do të çojë në faktin që të dhënat do të transmetohen drejtpërdrejt nga mburoja në kompjuter), futni kartën SIM në mburojën dhe ndizni fuqinë e mburojës. Bordi Arduino duhet të lidhet me kompjuterin dhe duhet të shtypet butoni i energjisë. Nëse gjithçka është e lidhur siç duhet, LED-i i kuq do të ndizet dhe e gjelbërta do të pulsojë.
Përshkrim i shkurtër i ndërveprimit nëpërmjet komandave AT
Komandat AT janë një grup komandash të veçanta për modemin, të përbërë nga vargje të shkurtra teksti. Që modemi të njohë komandën e dhënë, rreshtat duhet të fillojnë me shkronjat në. Vargu do të pranohet kur modemi është në modalitetin e komandës. Komandat AT mund të dërgohen ose duke përdorur softuerin e komunikimit ose manualisht nga tastiera. Pothuajse të gjitha komandat mund të ndahen në 3 mënyra - modaliteti i testimit, në të cilin moduli përgjigjet nëse e mbështet komandën; lexim - lëshimi i parametrave të komandës aktuale; regjistrim - do të regjistrohen vlera të reja.
Lista e komandave AT më të përdorura:
- AT - për të kontrolluar nëse moduli është i lidhur saktë. Nëse gjithçka është në rregull, ajo kthehet në rregull.
- A / - përsëritni komandën e mëparshme.
- AT + IPR? - marrjen e informacionit për shpejtësinë e portit. Përgjigja është + IPR: 0 OK (0 në këtë rast është automatike).
- AT + ICF? - vendosja e transmetimit. Përgjigja do të jetë + ICF: bit, barazi.
- AT + IFC? - kontrolli i transmetimit. Përgjigja do të jetë + IFC: terminali nga moduli, moduli nga terminali (0 - pa kontroll, 1 - kontrolli i softuerit, 2 - kontrolli i harduerit).
- AT + GCAP - tregon aftësitë e modulit. Një shembull i një përgjigjeje është + GCAP: + FCLASS, + CGSM.
- AT + GSN - marrja e modulit IMEI. Shembull përgjigje 01322600XXXXXXXXX.
- AT + POLICIA? - tregon operatorët e disponueshëm.
- AT + CPAS - statusi i modulit. Përgjigje + CPAS: 0. 0 - gati për punë, 3 - thirrje hyrëse, 4 - lidhje zanore, 2 - e panjohur.
- AT + CCLK? - informacion për kohën dhe datën aktuale.
- AT + CLIP = 1 - aktivizoni / çaktivizoni ID-në e telefonuesit. 1 - i aktivizuar, 0 - i çaktivizuar.
- AT + CSCB = 0 - merrni mesazhe të veçanta SMS. 0 - i aktivizuar, 1 - i çaktivizuar.
- AT + CSCS = "GSM" - kodimi i mesazheve SMS. Mund të zgjidhni një nga kodimet e mëposhtme: IRA, GSM, UCS2, HEX, PCCP, PCDN, 8859-1.
- AT + CMEE = 0 - marrja e informacionit në lidhje me gabimin.
- AT + CPIN = XXXX - vendosni kodin pin të kartës SIM.
- AT&F - rivendosni në cilësimet e fabrikës.
- AT + CPOWD = 1 - mbyllje urgjente (0) ose normale (1) e modulit.
- ATD + 790XXXXXXXXX - telefononi në numrin + 790XXXXXXXXX.
- ATA - përgjigjja e thirrjes.
- AT + CMGS = "+ 790XXXXXXXXX"> Test sms - dërgimi i një mesazhi SMS në numrin + 790XXXXXXXXX.
Në këtë rast, merren parasysh komandat bazë për modulin SIM900. Për module të ndryshme, komandat mund të ndryshojnë pak. Të dhënat për modulin do të ushqehen përmes një programi të veçantë "terminal", i cili duhet të instalohet në kompjuter. Ju gjithashtu mund të dërgoni komanda në modul përmes monitorit të portit në Arduino IDE.
Skica për të punuar me modulin GSM
Dërgimi i SMS në shembullin e SIM900
Para se të dërgoni një mesazh, duhet të konfiguroni modulin. Para së gjithash, ju duhet të përktheni mesazhin e transmetuar në format teksti. Për këtë ekziston një komandë AT + CMGF = 1. Është e nevojshme të transferoni kodimin në GSM me komandën AT + CSCS = "GSM". Ky kodim është më i përshtatshmi, pasi aty karakteret përfaqësohen në kodin ASCII, të cilin përpiluesi e kupton lehtësisht.
Pastaj duhet të shkruani një mesazh SMS. Për ta bërë këtë, dërgohet një komandë me numrin e pajtimtarit AT + CMGS = "+ 79XXXXXXXXX" r, si përgjigje sugjerohet të shkruani një tekst SMS. Ju duhet të dërgoni një mesazh. Kur të përfundoni, duhet të dërgoni kodin e kombinimit Ctrl + Z, moduli do të lejojë dërgimin e tekstit te adresuesi. Kur mesazhi të jetë dërguar, ai do të kthehet në rregull.
Ndërveprimi me modulin bazohet në indekset që i caktohen çdo mesazhi të ri. Ky indeks mund të përdoret për të treguar se cilin mesazh duhet fshirë ose lexuar.
Marrja e SMS-ve. Për të lexuar mesazhe SMS, përdorni komandën AT + CNMI = 2,2,0,0,0. Kur moduli merr një mesazh me tekst, ai do të dërgojë në portën serike + CMTI: "SM", 2 (në këtë rast, 2 është numri i sekuencës së mesazhit). Për ta lexuar atë, duhet të dërgoni komandën AT + CMGR = 2.
Marrja e një telefonate zanore. Para së gjithash, për një bisedë, duhet të lidhni një altoparlant dhe një mikrofon me modulin. Kur merrni një telefonatë, do të shfaqet numri nga i cili është bërë. Për të kryer punën, duhet të aktivizoni bibliotekën GSM:
#përfshi
Nëse karta SIM është e bllokuar, duhet të futni kodin e saj pin. Nëse nuk kërkohet një kod pin, kjo fushë duhet të lihet bosh.
#define PINNUMBER ""
Në konfigurimin (), duhet të kryhet inicializimi i transferimit të të dhënave në kompjuter. Hapi tjetër është krijimi i një variabli lokal për të gjurmuar statusin e lidhjes së rrjetit. Skica nuk do të funksionojë derisa karta SIM të lidhet me rrjetin.
boolean joConnected = e vërtetë;
Funksioni gsmAccess.begin () përdoret për t'u lidhur me rrjetin. Kur të vendoset lidhja, vlera GSM_READY do të kthehet.
vcs.hangCall (); - një funksion që tregon se modemi është gati për të marrë telefonata.
getvoiceCallStatus () - Përcakton statusin e skicës. Nëse dikush telefonon, ai kthen RECEIVING CALL. Për të regjistruar numrin, duhet të përdorni funksionin retrieveCallingNumber (). Kur telefonata të përgjigjet, TALKING do të kthehet. Skica më pas do të presë për një rresht të ri për të ndërprerë bisedën.
Krijoni një lidhje GPRS dhe dërgoni të dhëna në një server në distancë
Së pari, duhet të instaloni bibliotekën SoftwareSerial, e cila ju lejon të siguroni transferimin e informacionit serik dhe të lidhni modulin GSM dhe mikrokontrolluesin Arduino.
Për të dërguar të dhëna në server, duhet të dërgoni komandat e mëposhtme:
AT + SAPBR = 1.1 - Hapja e transportuesit.
Tre komandat e ardhshme lidhen me vendosjen e cilësimeve të lidhjes së rrjetit.
AT + SAPBR = 3,1, \ ”APN \”, \ ”internet.mts.ru \” - zgjidhni operatorin mts, emrin e pikës së hyrjes.
AT + SAPBR = 3,1, \ ”USER \”, \ ”mts \” - zgjedhja e përdoruesit mts.
AT + SAPBR = 3,1, \ ”PWD \”, \ ”mts \”
AT + SAPBR = 1.1 - vendosja e lidhjes.
AT + HTTPINIT - inicializoni http.
AT + HTTPPARA = "URL", - adresa URL.
AT + HTTPREAD - duke pritur për një përgjigje.
AT + HTTPTERM - ndaloni http.
Nëse gjithçka është bërë si duhet, linjat me komanda AT do të shfaqen në monitorin e portit. Nëse nuk ka lidhje me modemin, ai do të tregojë një rresht në të njëjtën kohë. Nëse lidhja GPRS është vendosur me sukses, LED në modul do të fillojë të pulsojë.
Unë dua t'ju prezantoj me një mënyrë shumë të thjeshtë për të kontrolluar furnizimin me energji elektrike nga distanca.
Ne do të përdorim priza të gatshme të kontrolluara me radio, kështu që nuk kemi nevojë të lidhim asgjë. Kjo është shumë interesante, sepse 220 V (për fillestarët) është më mirë të lihet vetëm.
Kodi
Nëse nuk përdorni GSMSHIELD, por ndonjë bibliotekë tjetër, atëherë kodi sigurisht që do të jetë i ndryshëm, por parimi do të jetë i njëjtë. Në intervale të caktuara kohore, kontrollojmë nëse kemi SMS të palexuar, i analizojmë dhe nëse një komandë e vlefshme ka ardhur nga një numër i autorizuar, atëherë dërgojmë një sinjal radioje duke përdorur funksionet mySwitch.switchOff ose mySwitch.switchOn, duke i kaluar adresën e prizës.Përafërsisht. Në rastin tim, për mburojën e Seeedstudio, më duhej të hyja në GSM.cpp dhe të ndryshoja kunjat e vendosura në 7 dhe 8./ * Shembull i kodit të ndërprerësit GSM Arduino Ndez/fik priza të kontrolluara me radio Autor: Vladislav Ross, 2014 Kontakt: [email i mbrojtur] Ju duhet të shkarkoni: 1. rc-switch https://code.google.com/p/rc-switch/ 2. GSMSHIELD http://www.gsmlib.org/ Për GSMSHIELD: * Për të ndryshuar kunjat për Serialin e Softuerit, përdorni dy linjat në GSM.cpp. * Nëse jeni duke përdorur Mega, hiqni komentin "#define MEGA" në HWSerial.h * Ju mund të aktivizoni mesazhet e korrigjimit në portën serike duke përcaktuar DEBUG_ON * / #include "SIM900.h" #include
Probleme?
Nëse prizat nuk duan të kalojnë në asnjë, mund të provoni të merrni një sinjal nga telekomanda juaj te marrësi. Ekziston një kod shembull në rc-switch.Ç'pritet më tej?
Si mund të zhvillohet më tej ky projekt:Së pari, ne kemi ende një tufë kunjash të mbetura në vetë Arduino dhe në mburojën GSM. Mund të lidhni disa sensorë ose pajisje me to. Për shembull, bëni monitorim në distancë të temperaturës ose ujitje të luleve.
Së dyti, ne përdorëm vetëm SMS, dhe moduli mund të transmetojë ende zë dhe GPRS. GPRS mund të transferojë shumë më tepër të dhëna. Përveç kësaj, nuk mund ta mbyllni telefonin kur telefononi, por, për shembull, merrni një telefonatë dhe ju lejoni të dëgjoni se çfarë po ndodh në vend.
Është gjithashtu e mundur që ju të dëshironi të merrni SMS kontrolli jo nga një numër, por nga disa. Në këtë rast, unë do të rekomandoja ruajtjen e numrave në librin e adresave në bibliotekë, ka funksione përkatëse.