- Potrebni materiali:
- GSM modul:
- Komuniciranje z modulom GSM z uporabo ukazov AT:
- Shema vezja:
- Programiranje mikrokrmilnika PIC:
- Simulacija:
- Klicanje in sprejemanje klicev z uporabo GSM in PIC:
Moduli GSM so zanimivi za uporabo, zlasti kadar naš projekt zahteva oddaljeni dostop. Ti moduli lahko izvajajo vsa dejanja običajnega mobilnega telefona, na primer klicanje / prejemanje klica, pošiljanje / prejemanje SMS-ov, povezovanje z internetom prek GPRS-a itd. Na ta modul lahko priključite tudi običajni mikrofon in zvočnik ter se pogovorite na svojem mobilni klici. To bo odprlo vrata številnim kreativnim projektom, če bi jih lahko povezali z mikrokrmilnikom. Zato bomo v tej vadnici izvedeli, kako lahko vmesnik GSM modula (SIM900A) povežemo z našim mikrokrmilnikom PIC, in to bomo prikazali z klicanjem in sprejemanjem klica z uporabo modula GSM. Pred klicem in sporočanjem smo ga že povezali z Arduino in Raspberry Pi:
- Klic in sporočilo z uporabo modula Arduino in GSM
- Klic in besedilo z uporabo Raspberry Pi in GSM modula
Potrebni materiali:
- Mikrokrmilnik PIC (PIC16F877A)
- GSM modul (SIM900 ali kateri koli drug)
- Priključne žice
- 12V adapter
- PicKit 3
GSM modul:
Modul GSM lahko uporabljate tudi brez mikrokrmilnika z uporabo ukaznega načina AT. Kot je prikazano zgoraj, je modul GSM opremljen z adapterjem USART, ki ga je mogoče neposredno povezati z računalnikom z uporabo modula MAX232 ali pa je mogoče za povezavo z mikrokrmilnikom uporabiti Tx in Rx nožice. Opazite lahko tudi druge nožice, kot so MIC +, MIC-, SP +, SP- itd., Kamor je mogoče priključiti mikrofon ali zvočnik. Modul lahko napaja 12V adapter preko običajne vtičnice za enosmerni tok.
Vstavite kartico SIM v režo modula in jo vklopite, opazili boste, da sveti lučka za vklop. Zdaj počakajte kakšno minuto in videli boste, da rdeča (ali katera koli druga barva) LED utripa enkrat na 3 sekunde. To pomeni, da je vaš modul lahko vzpostavil povezavo z vašo kartico SIM. Zdaj lahko nadaljujete s povezovanjem modula s telefonom ali katerim koli mikrokrmilnikom.
Komuniciranje z modulom GSM z uporabo ukazov AT:
Kot ste morda že slutili, lahko modul GSM komunicira prek serijske komunikacije in lahko razume le en jezik, in sicer » AT ukazi «. Karkoli boste morda želeli sporočiti ali vprašati za modul GSM, naj bo le prek ukazov AT. Na primer, če želite vedeti, ali je vaš modul aktiven. Vprašajte (pošljite) ukaz, kot je "AT", in vaš modul vam bo odgovoril "OK".
Ti ukazi AT so dobro razloženi v njegovem podatkovnem listu in jih lahko najdete tukaj v njegovem uradnem obrazcu. V redu! V redu! To je podatkovni list s 271 stranmi, ki ga lahko preberete v nekaj dneh. Zato sem spodaj dal nekaj najpomembnejših AT ukazov, da boste to kmalu začeli izvajati.
AT |
Odgovori z V redu za potrditev |
AT + CPIN? |
Preverite kakovost signala |
AT + POLICIJI? |
Poiščite ime ponudnika storitev |
ATD96XXXXXXXX; |
Klic na določeno številko, ki se konča s podpičjem |
AT + CNUM |
Poiščite številko kartice SIM (pri nekaterih SIM morda ne bo delovala) |
ATA |
Odgovorite na dohodni klic |
ATH |
Prekinite trenutni dohodni klic |
AT + COLP |
Prikaži številko dohodnega klica |
AT + VTS = (število) |
Pošlji številko DTMF. Za (številka) lahko uporabite katero koli številko na mobilni tipkovnici |
AT + CMGR |
AT + CMGR = 1 prebere sporočilo na prvem mestu |
AT + CMGD = 1 |
Izbriši sporočilo na prvem mestu |
AT + CMGDA = "DEL ALL" |
Izbriši vsa sporočila s kartice SIM |
AT + CMGL = "VSE" |
Preberite vsa sporočila s kartice SIM |
AT + CMGF = 1 |
Nastavite konfiguracijo SMS. "1" je namenjen samo besedilnemu načinu |
AT + CMGS = “+91 968837XXXX” > CircuitDigest Text
|
Pošlje SMS na določeno številko tukaj 968837XXXX. Ko vidite “>”, začnite vnašati besedilo. Pritisnite Ctrl + Z, da pošljete besedilo. |
AT + CGATT? |
Preverjanje internetne povezave na kartici SIM |
NA + CIPSHUT |
Če želite zapreti povezavo TCP, kar pomeni, da prekinete povezavo z internetom |
AT + CSTT = "APN", "uporabniško ime", "Pass" |
Povežite se z GPRS s svojim APN in Pass ključem. Lahko jih dobite pri ponudniku omrežja. |
AT + CIICR |
Preverite, ali ima kartica SIM podatkovni paket |
AT + CIFSR |
Pridobite IP omrežja SIM |
AT + CIPSTART = “TCP”, “SERVER IP”, “PORT” |
Uporablja se za nastavitev TCP IP povezave |
NA + CIPSEND |
Ta ukaz se uporablja za pošiljanje podatkov na strežnik |
Shema vezja:
Diagram povezave za povezovanje GSM modula z mikrokrmilnikom PIC je prikazan spodaj.
Preprosto smo povezali Tx in Rx zatiča GSM modula z Rx in Tx zatiči PIC MCU PIC16F877A. To bo vzpostavilo serijsko povezavo med obema. Zato ne pozabite na skupna vprašanja tako modula GSM kot PIC. Za poznavanje stanja našega modula GSM smo uporabili tudi LCD zaslon. Ko bodo povezave končane, bo vaša strojna oprema videti spodaj.
PIC Perf plošča je bila narejena za našo vadnico PIC, v kateri smo se naučili uporabljati PIC mikrokrmilnik. Morda se boste želeli vrniti k tistim vadnicam mikrokrmilnika PIC, ki uporabljajo MPLABX in XC8, če ne veste, kako zapisati program s programom Pickit 3, saj bom preskočil vse te osnovne informacije.
Programiranje mikrokrmilnika PIC:
Celoten program za ta projekt najdete na dnu te vadnice. Tukaj bom razložil nekaj pomembnih funkcij in kosov kode. Ta program ima tudi kode LCD, ki so bile iz povezave LCD z mikrokrmilnikom PIC. Če želite izvedeti, kako lahko LCD uporabljate z mikrokrmilnikom PIC, obiščite to vadnico.
Kot že rečeno, bomo komunicirali med PIC in GSM z ukazi AT prek serijskega načina komunikacije. Torej, najprej moramo inicializirati komunikacijski modul USART v našem mikrokrmilniku PIC z uporabo Initialize _SIM900 (); funkcijo. Znotraj te funkcije prijavimo Tx in RX nožice in inicializiramo asinhroni sprejem in prenos s hitrostjo 9600 baudov in 8-bitnim načinom.
// *** Inicializacija UART za SIM900 ** // void Initialize_SIM900 (void) {// **** Nastavitev V / I zatičev za UART **** // TRISC6 = 0; // TX pin nastavljen kot izhod TRISC7 = 1; // RX pin nastavljen kot vhod // ________ I / O zatiči nastavljeni __________ // / ** Inicializirajte register SPBRG za zahtevano hitrost prenosa in nastavite BRGH za hitro baud_rate ** / SPBRG = 129; // SIM900 deluje s hitrostjo 9600 Baud, torej 129 BRGH = 1; // za visoko hitrost prenosa // _________ Nastavitev konca hitrosti prenosa _________ // // **** **** Omogoči asinhrona serijska vrata ******* // SYNC = 0; // Asinhroni SPEN = 1; // Omogoči zatiče serijskih vrat // _____ Omogočena asinhrona serijska vrata _______ // // ** Omogočamo pripravo na prenos in sprejem ** // TXEN = 1; // omogoči prenos CREN = 1; // omogoči sprejem // __ UART modul pripravljen in pripravljen za prenos in sprejem __ // // ** Izberi 8-bitni način ** // TX9 = 0; // izbran 8-bitni sprejem RX9 = 0;// izbran 8-bitni način sprejema // __ izbran 8-bitni način __ //} // ________ UART modul Inicializiran __________ //
Zdaj moramo prebrati in zapisati informacije iz / v naš modul GSM. Za to uporabljamo funkcije _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Te funkcije uporabljajo oddajnik in oddajnik registra, kot sta TXREG in RCREG, za serijsko branje ali zapisovanje podatkov.
// ** Funkcija pošiljanja enega bajta datuma UART ** // void _SIM900_putch (char bt) {while (! TXIF); // pridržite program, dokler ni vmesni pomnilnik TX prost TXREG = bt; // Naloži vmesni pomnilnik oddajnika s prejeto vrednostjo} // _____________ Konec funkcije ________________ // // ** ** Funkcija za pridobitev enega bajta datuma iz UART ** // char _SIM900_getch () {if (OERR) // preveri napako { CREN = 0; // Če je napaka -> Ponastavi CREN = 1; // Če je napaka -> Ponastavi} while (! RCIF); // držimo program, dokler RX medpomnilnik ni prost vrne RCREG; // prejmemo vrednost in jo pošljemo glavni funkciji} // _____________ Konec funkcije ________________ // // ** Funkcija za pretvorbo niza v bajt ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // if there je char _SIM900_putch (* st_pt ++);// obdelamo kot bajtne podatke} // ___________ Konec funkcije ______________ // // ** Konec spremenjenih kod ** // void _SIM900_print (nepodpisani const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Zgornje funkcije so univerzalne in jih za nobeno aplikacijo ni treba spreminjati. Pojasnili so jim le grob uvod. Če želite, se lahko z razumevanjem potopite globoko vanje.
Zdaj znotraj naše glavne funkcije inicializiramo povezavo USART in s spodnjo vrstico kode preverimo, ali lahko prejmemo »V redu«, ko pošljemo »AT«.
naredite {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modula ni mogoče najti"); } while (! SIM900_isStarted ()); // počakamo, da GSM pošlje nazaj "OK" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modul zaznan"); __zakasnitev_ms (1500);
Funkcija SIM900_isStarted (); bo na GSM poslal »AT« in čakal na odgovor »OK«. Če je odgovor da, se vrne še 1 0;
Če modul ni zaznan ali če je prišlo do kakršne koli težave s povezavo, bo na LCD-prikazovalniku prikazano »Modul ni najden«, sicer bo prikazan Modul je zaznan in nadaljujemo z naslednjim korakom, kjer preverimo, ali je kartico SIM mogoče zaznati spodaj vrstica kode.
/ * Preverite, ali je zaznana kartica SIM * / do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM ni mogoče najti"); } medtem ko (! SIM900_isReady ()); // počakamo, da GSM pošlje nazaj "+ CPIN: PRIPRAVLJEN" Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM zaznana"); __zakasnitev_ms (1500);
Funkcija SIM900_isReady () bo poslala “AT + CPIN?” na GSM in čaka na odgovor »+ CPIN: PRIPRAVLJEN«. Če je odgovor da, se vrne še 1 0;
Če kartico SIM, če jo najdemo, na zaslonu prikažemo zaznano kartico SIM. Nato lahko poskusimo vzpostaviti klic z ukazom » ATD mobilenumber ; ". Tu sem kot primer uporabil svojo številko kot ATD93643159XX;. Tam morate zamenjati svojo številko mobilnega telefona.
/ * Opravite telefonski klic * / do {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Tukaj kličemo na številko 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Opravljanje klica…."); } medtem ko (_SIM900_waitResponse ()! = SIM900_OK); // počakamo, da ESP pošlje nazaj "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("Klic je bil vzpostavljen…."); __zakasnitev_ms (1500);
Ko je klic vzpostavljen, se na LCD-prikazovalniku prikaže Call Placed in prejeli boste dohodni klic na določeno številko.
Lahko tudi pokličete na mobilno številko, priključeno na modul GSM, in vas o tem obvestijo na vašem LCD zaslonu y s spodnjo kodo
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Preveri, ali obstaja dohodni klic {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Dohodni klic !!."); }}
Ko modul GSM zazna dohodni klic, bo v drugi vrstici modula LCD prikazal dohodni klic. Funkcija _SIM900_waitResponse () bo preverila, ali prihajajo podatki iz modula GSM. Ko prejme SIM900_RING, ki je enak "RING" zaradi waitResponce () , bomo prikazali stanje "Dohodni klic".
Takšne funkcije lahko ustvarite za izvajanje skoraj vseh vrst aktiviranj z uporabo modula GSM. Če želite, da so stvari trdo kodirane, lahko preprosto uporabite funkcijo __SIM900_print () za pošiljanje katerega koli ukaza AT, kot je spodaj.
_SIM900_print ("AT + CPIN? \ R \ n");
Ne pozabite, da je treba vsem, ki jih ukažete, slediti z "\ r \ n", kar pomeni, da se ukaz končuje.
Simulacija:
Ko ste razumeli, kako program deluje, lahko poskusite simulirati in spremenite svoje potrebe. Simulacija vam bo prihranila veliko časa. Simulacija je narejena z uporabo Proteusa in izgleda kot spodaj.
Kot lahko vidite, smo v programu Proteus uporabili možnost navideznega terminala, da preverimo, ali se program odziva po pričakovanjih. Vrednosti lahko vnesemo skozi pojavno pogovorno okno. Na primer, takoj ko pritisnemo zagon, se bo pojavilo črno pogovorno okno, kot je prikazano zgoraj, na katerem se prikaže AT, to pomeni, da je poslal modul GSM AT, zdaj lahko odgovorimo na PIC, tako da v polje vtipkamo "OK" in pritisnemo enter in PIC se bo nanjo odzval. Podobno lahko poskusimo za vse ukaze AT.
Klicanje in sprejemanje klicev z uporabo GSM in PIC:
Ko razumete, kako deluje koda in strojna oprema, preprosto naložite spodnji program na PIC in vklopite modul. Na vašem LCD-prikazovalniku se prikažejo »Module Detected«, »SIM zaznan« in »Call Reced«, če vse deluje v redu. Ko vidite »Klic je vzpostavljen«, boste prejeli dohodni klic na številko, določeno v programu.
Poskusite lahko tudi poklicati številko, ki je prisotna v modulu GSM, in na LCD-prikazovalniku se bo prikazalo sporočilo »Dohodni klic«, da bo SIM klicana.
Popolno delovanje projekta je prikazano v spodnjem videu. Upam, da ste projekt razumeli in ste ga uživali. Če imate kakršne koli težave pri delovanju stvari, objavite svoje vprašanje v oddelku za komentarje ali na naših forumih in z veseljem vam bom pomagal.