- Potrebni materijali:
- GSM modul:
- Komunikacija s GSM modulom pomoću AT naredbi:
- Kružni dijagram:
- Programiranje vašeg PIC mikrokontrolera:
- Simulacija:
- Upućivanje i primanje poziva koristeći GSM i PIC:
GSM moduli su fascinantni za upotrebu, posebno kada naš projekt zahtijeva daljinski pristup. Ovi moduli mogu izvršiti sve radnje koje bi naš uobičajeni mobilni telefon mogao učiniti, poput upućivanja / primanja poziva, slanja / primanja SMS-a, povezivanja na internet pomoću GPRS-a itd. Na ovaj modul možete povezati i uobičajeni mikrofon i zvučnik i razgovarati na svom mobilni pozivi. To će otvoriti vrata mnogim kreativnim projektima ako bi ih se moglo povezati s mikrokontrolerom. Stoga ćemo u ovom vodiču naučiti kako možemo povezati GSM modul (SIM900A) s našim PIC mikrokontrolerom i to ćemo demonstrirati upućivanjem i primanjem poziva pomoću GSM modula. Prethodno smo ga povezali s Arduinom i Raspberry Pi za pozivanje i razmjenu poruka:
- Poziv i poruka pomoću Arduina i GSM modula
- Poziv i tekst pomoću Raspberry Pi i GSM modula
Potrebni materijali:
- PIC mikrokontroler (PIC16F877A)
- GSM modul (SIM900 ili bilo koji drugi)
- Spajanje žica
- 12V adapter
- PicKit 3
GSM modul:
![]()
GSM modul se može koristiti čak i bez ikakvog mikrokontrolera pomoću AT naredbenog načina. Kao što je prikazano gore, GSM modul dolazi s USART adapterom koji se može izravno povezati s računalom pomoću MAX232 modula ili se Tx i Rx pinovi mogu koristiti za njegovo povezivanje s mikrokontrolerom. Također možete primijetiti i ostale igle poput MIC +, MIC-, SP +, SP- itd. Na koje se može spojiti mikrofon ili zvučnik. Modul se može napajati preko adaptera od 12 V preko normalne utičnice za istosmjernu cijev.
Umetnite SIM karticu u utor modula i uključite je, trebali biste primijetiti da se LED lampica za napajanje UKLJUČUJE. Pričekajte minutu ili tako malo i trebali biste vidjeti crvenu (ili bilo koju drugu boju) LED lampicu kako trepće jednom u 3 sekunde. To znači da je vaš modul mogao uspostaviti vezu s vašom SIM karticom. Sada možete nastaviti s povezivanjem vašeg modula s telefonom ili bilo kojim mikrokontrolerom.
Komunikacija s GSM modulom pomoću AT naredbi:
Kao što ste mogli pretpostaviti, GSM modul može komunicirati serijskom komunikacijom i mogao je razumjeti samo jedan jezik, a to su " AT naredbe ". Sve što biste htjeli reći ili zatražiti od GSM modula, to bi trebalo biti samo putem AT naredbi. Na primjer, ako želite znati je li vaš modul aktivan. Trebali biste zatražiti (poslati) naredbu poput "AT" i vaš će modul odgovoriti "U redu".
Ove AT naredbe dobro su objašnjene u tehničkom listu i mogu se pronaći ovdje u službenom listu podataka. U redu! U redu! To je podatkovni list površine 271 stranice i možda će vam trebati dana da ga pročitate. Stoga sam u nastavku dao neke najvažnije AT naredbe da biste to uskoro pokrenuli.
|
NA |
Odgovara s OK za potvrdu |
|
AT + CPIN? |
Provjerite kvalitetu signala |
|
AT + PUKOVI? |
Pronađite naziv davatelja usluga |
|
ATD96XXXXXXXX; |
Poziv na određeni broj, završava s dvotačkom |
|
AT + CNUM |
Pronađite broj SIM kartice (možda neće raditi za neke SIM kartice) |
|
ATA |
Odgovorite na dolazni poziv |
|
ATH |
Prekini trenutni dolazni poziv |
|
AT + COLP |
Prikaži broj dolaznog poziva |
|
AT + VTS = (broj) |
Pošaljite DTMF broj. Možete koristiti bilo koji broj na mobilnoj tipkovnici za (broj) |
|
AT + CMGR |
AT + CMGR = 1 čita poruku na prvom mjestu |
|
AT + CMGD = 1 |
Izbriši poruku na prvom mjestu |
|
AT + CMGDA = "DEL ALL" |
Izbriši sve poruke sa SIM-a |
|
AT + CMGL = "SVE" |
Pročitajte sve poruke sa SIM-a |
|
AT + CMGF = 1 |
Postavite konfiguraciju SMS-a. "1" je samo za tekstualni način |
|
AT + CMGS = "+91 968837XXXX" > Tekst CircuitDigest
|
Ovdje šalje SMS na određeni broj 968837XXXX. Kada vidite “>”, počnite unositi tekst. Pritisnite Ctrl + Z da biste poslali tekst. |
|
AT + CGATT? |
Da biste provjerili postoji li internetska veza na SIM kartici |
|
NA + CIPSHUT |
Za zatvaranje TCP veze, što znači prekid veze s interneta |
|
AT + CSTT = "APN", "korisničko ime", "Pass" |
Povežite se na GPRS pomoću APN-a i Pass ključa. Može se dobiti od mrežnog pružatelja. |
|
AT + CIICR |
Provjerite ima li SIM kartica podatkovni paket |
|
AT + CIFSR |
Nabavite IP SIM mreže |
|
AT + CIPSTART = “TCP”, “SERVER IP”, “LUKA” |
Koristi se za postavljanje TCP IP veze |
|
NA + CIPSEND |
Ova se naredba koristi za slanje podataka na poslužitelj |
Kružni dijagram:
Dijagram povezivanja za povezivanje GSM modula s PIC mikrokontrolerom prikazan je u nastavku.

Jednostavno smo povezali Tx i Rx pinove GSM modula s Rx i Tx pinovima PIC MCU PIC16F877A. Ovo će uspostaviti serijsku vezu između oboje. Također, ne zaboravite na zajedničko znanje i GSM i PIC modula. Također smo koristili LCD zaslon da bismo znali status našeg GSM modula. Nakon završetka povezivanja vaš će hardver izgledati poput nečega u nastavku.

PIC Perf ploča napravljena je za našu seriju PIC tutoriala, u kojoj smo naučili kako koristiti PIC mikrokontroler. Možda se želite vratiti na te upute za PIC mikrokontroler pomoću MPLABX-a i XC8 ako ne znate kako snimiti program pomoću Pickita 3, jer ću preskočiti sve te osnovne informacije.

Programiranje vašeg PIC mikrokontrolera:
Kompletni program za ovaj projekt nalazi se na dnu ovog vodiča. Ovdje ću objasniti neke važne funkcije i dijelove koda. Ovaj program također ima LCD kodove koji potiču od povezivanja LCD-a s PIC mikrokontrolerom. Možete ga posjetiti ako želite znati kako se LCD može koristiti s PIC mikrokontrolerom.
Kao što je ranije rečeno, komunicirat ćemo između PIC-a i GSM-a pomoću AT naredbi putem serijskog načina komunikacije. Dakle, prvo moramo inicijalizirati komunikacijski modul USART u našem PIC mikrokontroleru pomoću inicijalizacije _SIM900 (); funkcija. Unutar ove funkcije deklariramo Tx i RX pinove i inicijaliziramo asinkroni prijem i prijenos brzinom od 9600 baud podataka i 8-bitnom načinu rada.
// *** Inicijaliziraj UART za SIM900 ** // void Initialize_SIM900 (void) {// **** Postavljanje I / O pinova za UART **** // TRISC6 = 0; // TX pin postavljen kao izlaz TRISC7 = 1; // RX pin postavljen kao ulaz // ________ postavljeni I / O pinovi __________ // / ** Inicijalizirajte SPBRG registar za potrebnu brzinu prijenosa i postavite BRGH za brzu brzinu prijenosa ** / SPBRG = 129; // SIM900 radi na brzini od 9600 Baud, dakle 129 BRGH = 1; // za visoku brzinu prijenosa // _________ Postavka kraja brzine prijenosa _________ // // // **** Omogući asinkroni serijski port ******* // SYNC = 0; // Asinkroni SPEN = 1; // Omogući pinove serijskog porta // _____ Omogućen asinkroni serijski port _______ // // ** Omogućuje se priprema za prijenos i prijem ** // TXEN = 1; // omogućiti prijenos CREN = 1; // omogućiti prijem // __ UART modul up i spreman za prijenos i prijem __ // // ** Odabir 8-bitnog načina ** // TX9 = 0; // odabran 8-bitni prijem RX9 = 0;// odabran 8-bitni način prijema // __ odabran 8-bitni način __ //} // ________ UART modul Inicijaliziran __________ //
Sada moramo čitati i pisati podatke s / na naš GSM modul. Za to koristimo funkcije _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Ove funkcije koriste registar međuspremnika za prijenos i primanje kao što su TXREG i RCREG za serijsko čitanje ili pisanje podataka.
// ** Funkcija slanja jednog bajta datuma na UART ** // void _SIM900_putch (char bt) {while (! TXIF); // držimo program dok TX međuspremnik ne bude slobodan TXREG = bt; // Učitajte međuspremnik odašiljača s primljenom vrijednošću} // _____________ Kraj funkcije ________________ // // ** ** Funkcija za dobivanje jednog bajta datuma iz UART-a ** // char _SIM900_getch () {if (OERR) // provjera greške { CREN = 0; // Ako je pogreška -> Resetiraj CREN = 1; // Ako je pogreška -> Resetiraj} while (! RCIF); // držite program dok RX međuspremnik ne bude slobodan povratak RCREG; // primi vrijednost i pošalji je glavnoj funkciji} // _____________ Kraj funkcije ________________ // // ** ** Funkcija za pretvaranje niza u bajt ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // if there je char _SIM900_putch (* st_pt ++);// obradimo ga kao bajt podatke} // ___________ Kraj funkcije ______________ // // ** Kraj modificiranih kodova ** // void _SIM900_print (nepotpisani const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Gore navedene funkcije su univerzalne i ne moraju se mijenjati ni za jednu aplikaciju. Objašnjeno im je samo kako bi dali grubi uvod. Možete zaroniti duboko u njih ako želite kroz razumijevanje.
Sada unutar naše glavne funkcije, inicijaliziramo USART vezu i provjeravamo možemo li primiti "OK" kada pošaljemo "AT" pomoću donjeg retka koda
do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modul nije pronađen"); } while (! SIM900_isStarted ()); // pričekajte dok GSM ne pošalje natrag "OK" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Otkriven modul"); __zakašnjenje_ms (1500);
Funkcija SIM900_isStarted (); će poslati "AT" na GSM i čeka odgovor "OK" s njega. Ako je odgovor da, vratit će se 1 else 0;
Ako modul nije otkriven ili ako postoji problem s vezom, na LCD-u će se prikazati "Modul nije pronađen", u suprotnom će se prikazati Modul je otkriven i prijeći na sljedeći korak gdje provjeravamo može li SIM kartica biti otkrivena dolje redak koda.
/ * Provjerite je li otkrivena SIM kartica * / do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM nije pronađen"); } dok (! SIM900_isReady ()); // pričekajte dok GSM ne pošalje natrag "+ CPIN: SPREMAN" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Otkriven SIM"); __zakašnjenje_ms (1500);
Funkcija SIM900_isReady () poslat će "AT + CPIN?" na GSM i čeka odgovor "+ CPIN: SPREMAN" od njega. Ako je odgovor da, vratit će se 1 else 0;
Ako SIM kartica bude pronađena, na LCD-u će se prikazati otkrivena SIM kartica. Zatim možemo pokušati uputiti poziv pomoću naredbe „ ATD mobilenumber ; ". Evo kao primjer upotrijebio sam svoj broj kao ATD93643159XX;. Tamo morate zamijeniti odgovarajući broj mobitela.
/ * Uputi telefonski poziv * / do {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Ovdje upućujemo poziv na broj 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Upućivanje poziva…."); } while (_SIM900_waitResponse ()! = SIM900_OK); // pričekajte da ESP pošalje natrag "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("Poziv upućen…."); __zakašnjenje_ms (1500);
Jednom kada se uputi poziv, na LCD-u će se prikazati Poziv upućen i trebali biste primiti dolazni poziv na taj navedeni broj.
Također možete nazvati mobilni broj povezan s GSM modulom i dobiti obavijest o tome na svom LCD zaslonu y pomoću donjeg koda
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Provjerite postoji li dolazni poziv {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Dolazni poziv !!."); }}
Kad GSM modul otkrije dolazni poziv, prikazat će dolazni poziv u drugom retku LCD modula. Funkcija _SIM900_waitResponse () provjerit će ima li dolaznih podataka iz GSM modula. Kad primi SIM900_RING, što je ekvivalentno “RING” zbog waitResponce () , prikazat ćemo status “Dolazni poziv”.
Možete stvoriti vlastite funkcije poput ove za izvođenje gotovo svih vrsta aktiviranja pomoću GSM modula. Ako želite imati hardcoded stvari, možete jednostavno koristiti funkciju __SIM900_print () za slanje bilo koje AT naredbe poput ove u nastavku.
_SIM900_print ("AT + CPIN? \ R \ n");
Imajte na umu da sve što zapovijedate treba slijediti s "\ r \ n" da biste naznačili da se naredba završava.
Simulacija:
Nakon što shvatite kako program radi, možete pokušati simulirati i napraviti promjene u skladu s vašim potrebama. Simulacija će vam uštedjeti puno vremena. Simulacija je izvedena pomoću Proteusa i izgleda kao u nastavku.

Kao što vidite, koristili smo opciju virtualnog terminala u Proteusu da provjerimo reagira li program prema očekivanjima. Vrijednosti možemo unositi kroz skočni dijaloški okvir. Na primjer, čim pritisnemo run, pojavit će se crni dijaloški okvir kao gore i prikazat će AT, to znači da je poslao GSM modul AT, sada možemo odgovoriti PIC-u tako da u okvir upišemo kao "OK" i pritisnemo enter a PIC će na to odgovoriti. Slično tome možemo pokušati za sve AT naredbe.
Upućivanje i primanje poziva koristeći GSM i PIC:
Jednom kada shvatite kako kôd i hardver rade, jednostavno prenesite donji program na PIC i uključite modul. Vaš LCD zaslon trebao bi prikazati "Otkriven modul", "Otkriven je SIM" i "Pozvan je uspostavljen" ako sve funkcionira u redu. Jednom kada vidite "Poziv upućen", primit ćete dolazni poziv na broj naveden u programu.
Također možete pokušati nazvati broj prisutan u GSM modulu i na vašem će LCD zaslonu biti prikazano "Dolazni poziv" da označi da se SIM kartica zove.

Kompletni rad projekta prikazan je u video ispod. Nadam se da ste razumjeli projekt i uživali ste u njemu. Ako imate bilo kakvih problema s postizanjem rezultata, pošaljite svoje pitanje u odjeljak za komentare ili na naše forume i rado ću vam pomoći.
