- Potrebné materiály:
- GSM modul:
- Komunikácia s GSM modulom pomocou AT príkazov:
- Schéma zapojenia:
- Programovanie mikrokontroléra PIC:
- Simulácia:
- Uskutočňovanie a prijímanie hovorov pomocou GSM a PIC:
GSM moduly sú fascinujúce na použitie, najmä keď náš projekt vyžaduje vzdialený prístup. Tieto moduly môžu vykonávať všetky činnosti, ktoré môže robiť náš bežný mobilný telefón, napríklad uskutočňovať / prijímať hovory, odosielať / prijímať SMS, pripájať sa na internet pomocou GPRS atď. K tomuto modulu môžete pripojiť aj bežný mikrofón a reproduktor a konverzovať na vašom mobilné hovory. Ak sa to dá prepojiť s mikrokontrolérom, otvorí to to dvere mnohým kreatívnym projektom. Preto sa v tomto výučbe dozvieme, ako môžeme prepojiť modul GSM (SIM900A) s našim mikrokontrolérom PIC, a ukážeme to uskutočňovaním a prijímaním hovorov pomocou modulu GSM. Predtým sme ho prepojili s Arduino a Raspberry Pi na volanie a zasielanie správ:
- Hovory a správy pomocou modulu Arduino a GSM
- Volajte a textové správy pomocou Raspberry Pi a GSM modulu
Potrebné materiály:
- Mikrokontrolér PIC (PIC16F877A)
- GSM modul (SIM900 alebo akýkoľvek iný)
- Pripojovacie vodiče
- 12V adaptér
- PicKit 3
GSM modul:
GSM modul je možné používať aj bez mikrokontroléra pomocou príkazového režimu AT. Ako je uvedené vyššie, modul GSM je dodávaný s adaptérom USART, ktorý je možné priamo prepojiť s počítačom pomocou modulu MAX232, alebo pomocou kolíkov Tx a Rx pripojiť k mikrokontroléru. Môžete si tiež všimnúť ďalšie piny ako MIC +, MIC-, SP +, SP- atď., Kde je možné pripojiť mikrofón alebo reproduktor. Modul môže byť napájaný 12V adaptérom cez normálny DC jack.
Vložte kartu SIM do slotu modulu a zapnite ju. Mali by ste si všimnúť rozsvietenie kontrolky LED napájania. Teraz počkajte asi minútu a mali by ste vidieť, že červená (alebo iná farba) LED bliká raz za každé 3 sekundy. To znamená, že váš modul bol schopný nadviazať spojenie s vašou SIM kartou. Teraz môžete pokračovať v pripojení modulu k telefónu alebo k ľubovoľnému mikrokontroléru.
Komunikácia s GSM modulom pomocou AT príkazov:
Ako ste asi uhádli, modul GSM môže komunikovať prostredníctvom sériovej komunikácie a dokáže porozumieť iba jednému jazyku, a to „ príkazom AT “. Čokoľvek, čo by ste chceli povedať alebo požiadať modul GSM, malo by to byť iba prostredníctvom AT príkazov. Napríklad ak chcete vedieť, či je váš modul aktívny. Mali by ste sa opýtať (odoslať) príkaz ako „AT“ a váš modul odpovie „OK“.
Tieto príkazy AT sú dobre vysvetlené v jeho údajovom liste a nájdete ich tu v jeho oficiálnom údajovom liste. Dobre! Dobre! Je to údajový list s 271 stránkami a jeho prečítanie môže trvať niekoľko dní. Nižšie som uviedol niektoré najdôležitejšie AT príkazy, aby ste to mohli čoskoro spustiť.
AT |
Odpovede s OK na potvrdenie |
AT + CPIN? |
Skontrolujte kvalitu signálu |
AT + COPS? |
Vyhľadajte meno poskytovateľa služieb |
ATD96XXXXXXXX; |
Hovor na konkrétne číslo končí bodkočiarkou |
AT + CNUM |
Nájdite počet SIM kariet (pre niektoré SIM karty nemusí fungovať) |
ATA |
Prijmite prichádzajúci hovor |
ATH |
Zavesenie aktuálneho prichádzajúceho hovoru |
AT + COLP |
Zobraziť číslo prichádzajúceho hovoru |
AT + VTS = (číslo) |
Zašlite DTMF číslo. Môžete použiť ľubovoľné číslo na svojej mobilnej klávesnici pre (číslo) |
AT + CMGR |
AT + CMGR = 1 prečíta správu na prvej pozícii |
AT + CMGD = 1 |
Odstrániť správu na prvom mieste |
AT + CMGDA = ”DEL ALL” |
Odstrániť všetky správy zo SIM |
AT + CMGL = ”VŠETKY” |
Čítať všetky správy zo SIM |
AT + CMGF = 1 |
Nastaviť konfiguráciu SMS. „1“ je iba pre textový režim |
AT + CMGS = „+91 968837XXXX“ > Text CircuitDigest
|
Tu pošle SMS na konkrétne číslo 968837XXXX. Keď uvidíte „>“, začnite zadávať text. Stlačením klávesov Ctrl + Z text odošlete. |
AT + CGATT? |
Skontrolujte pripojenie na internet na SIM karte |
AT + CIPSHUT |
Ukončiť pripojenie TCP, to znamená odpojiť sa od internetu |
AT + CSTT = „APN“, „používateľské meno“, „prejsť“ |
Pripojte sa k GPRS pomocou vášho APN a hesla Pass. Možno získať od poskytovateľa siete. |
AT + CIICR |
Skontrolujte, či má SIM karta dátový balíček |
AT + CIFSR |
Získajte adresu IP siete SIM |
AT + CIPSTART = „TCP“, „SERVER IP“, „PORT“ |
Používa sa na nastavenie pripojenia TCP IP |
AT + CIPSEND |
Tento príkaz sa používa na odoslanie údajov na server |
Schéma zapojenia:
Schéma zapojenia pre modul GSM s rozhraním PIC je zobrazená nižšie.
Jednoducho sme prepojili piny Tx a Rx GSM modulu s piny Rx a Tx PIC MCU PIC16F877A. Týmto sa vytvorí sériové spojenie medzi oboma. Nezabudnite teda tiež na spoločnú zem modul GSM aj PIC. Použili sme tiež LCD displej na zistenie stavu nášho modulu GSM. Po dokončení pripojenia bude váš hardvér vyzerať ako niečo nižšie.
Doska PIC Perf bola vyrobená pre našu sériu tutoriálov PIC, v ktorej sme sa naučili používať mikrokontrolér PIC. Možno sa budete chcieť vrátiť k týmto výučbám mikrokontroléra PIC pomocou programov MPLABX a XC8, ak neviete, ako napáliť program pomocou programu Pickit 3, pretože všetky tieto základné informácie preskočím.
Programovanie mikrokontroléra PIC:
Kompletný program pre tento projekt nájdete v spodnej časti tohto tutoriálu. Tu vysvetlím niektoré dôležité funkcie a časti kódu. Tento program má tiež kódy LCD, ktoré pochádzajú z rozhrania LCD s mikrokontrolérom PIC. Tento výukový program môžete navštíviť, ak ste zvedaví, ako je možné LCD používať s mikrokontrolérom PIC.
Ako už bolo povedané, budeme komunikovať medzi PIC a GSM pomocou AT príkazov cez sériový režim komunikácie. Najprv teda musíme inicializovať komunikačný modul USART v našom mikrokontroléri PIC pomocou nástroja Initialize _SIM900 (); funkcia. V tejto funkcii deklarujeme piny Tx a RX a inicializujeme asynchrónny príjem a prenos pri 9600 baudoch a 8-bitovom režime.
// *** Inicializácia UART pre SIM900 ** // void Initialize_SIM900 (void) {// **** Nastavenie I / O pinov pre UART **** // TRISC6 = 0; // TX Pin nastavený ako výstup TRISC7 = 1; // RX Pin nastavený ako vstup // ________ Nastavené I / O piny __________ // / ** Inicializujte SPBRG register pre požadovanú prenosovú rýchlosť a nastavte BRGH pre rýchlu prenosovú rýchlosť ** / SPBRG = 129; // SIM900 pracuje pri 9600 baudoch, takže 129 BRGH = 1; // pre vysokú prenosovú rýchlosť // _________ Koniec nastavenia prenosovej rýchlosti _________ // // **** Povoliť asynchrónny sériový port ******* // SYNC = 0; // Asynchrónne SPEN = 1; // Povoliť kolíky sériového portu // _____ Asynchrónny sériový port povolený _______ // // ** Umožňuje prípravu na prenos a príjem ** // TXEN = 1; // povoliť prenos CREN = 1; // povoliť príjem // __ UART modul hore a pripravený na prenos a príjem __ // // ** Vyberte 8-bitový režim ** // TX9 = 0; // vybraný 8-bitový príjem RX9 = 0;// Je vybraný 8-bitový režim príjmu // __ Je vybraný 8-bitový režim __ //} // ________ UART modul je inicializovaný __________ //
Teraz musíme čítať a zapisovať informácie z / do nášho GSM modulu. Na tento účel používame funkcie _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Tieto funkcie používajú na sériové čítanie alebo zápis dát register na vysielanie a prijímanie medzipamäte, napríklad TXREG a RCREG.
// ** Funkcia na odoslanie jedného bajtu dátumu do UART ** // void _SIM900_putch (char bt) {while (! TXIF); // podržte program, kým nie je vyrovnávacia pamäť TX zadarmo TXREG = bt; // Načítajte do vyrovnávacej pamäte vysielača prijatú hodnotu} // _____________ Koniec funkcie ________________ // // ** Funkcia na získanie jedného bajtu s dátumom od UART ** // char _SIM900_getch () {if (OERR) // skontrolovať chybu { CREN = 0; // Ak chyba -> Reset CREN = 1; // Ak chyba -> Reset} while (! RCIF); // podržte program, kým nie je RX buffer voľný návrat RCREG; // príjem hodnoty a jej odoslanie do hlavnej funkcie} // _____________ Koniec funkcie ________________ // // ** Funkcia na prevod reťazca na bajt ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // ak existuje je znak _SIM900_putch (* st_pt ++);// spracovať ako bajtové dáta} // ___________ Koniec funkcie ______________ // // ** Koniec upravených kódov ** // void _SIM900_print (unsigned const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Vyššie uvedené funkcie sú univerzálne a nemusia sa meniť pre žiadne aplikácie. Vysvetlili im iba hrubé intro. Ak chcete, môžete sa do nich ponoriť hlboko pomocou porozumenia.
Teraz v našej hlavnej funkcii inicializujeme pripojenie USART a pomocou nižšie uvedeného riadku kódu skontrolujeme, či sme schopní prijať „OK“, keď pošleme „AT“.
do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modul sa nenašiel"); } while (! SIM900_isStarted ()); // počkajte, kým GSM pošle späť „OK“ Lcd_Set_Cursor (2,1); Lcd_Print_String ("Zistený modul"); __delay_ms (1 500);
Funkcia SIM900_isStarted (); pošle „AT“ do GSM a čaká na odpoveď „OK“ z neho. Ak áno, vráti 1 inú 0;
Pokiaľ modul nie je detekovaný alebo ak existuje problém s pripojením, na LCD displeji sa zobrazí „Modul nebol nájdený“, v opačnom prípade sa zobrazí hlásenie Modul bol nájdený a pokračujeme ďalším krokom, kde skontrolujeme, či je možné SIM kartu zistiť nižšie riadok kódu.
/ * Skontrolujte, či je detekovaná SIM karta * / do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM sa nenašla"); } while (! SIM900_isReady ()); // počkajte, kým GSM pošle späť "+ CPIN: READY" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Zistila sa SIM"); __delay_ms (1 500);
Funkcia SIM900_isReady () odošle „AT + CPIN?“ do GSM a čaká na odpoveď „+ CPIN: READY“. Ak áno, vráti 1 inú 0;
Ak sa SIM karta nájde, na displeji LCD sa zobrazí SIM karta. Potom môžeme skúsiť uskutočniť hovor pomocou príkazu „ ATD mobilenumber ; “. Tu som ako príklad použil svoje číslo ako ATD93643159XX;. Tam musíte nahradiť svoje príslušné mobilné číslo.
/ * Uskutočnite telefónny hovor * / do {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Tu uskutočňujeme hovor na číslo 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Uskutočňovanie hovoru…."); } while (_SIM900_waitResponse ()! = SIM900_OK); // počkaj, až ESP pošle späť „OK“ Lcd_Set_Cursor (1,1); Lcd_Print_String ("Hovor bol uskutočnený…."); __delay_ms (1 500);
Po uskutočnení hovoru sa na displeji LCD zobrazí Hovor uskutočnený a mali by ste prijať prichádzajúci hovor na zadané číslo.
Môžete tiež zavolať na mobilné číslo pripojené k modulu GSM a dostať o tom informáciu na obrazovke LCD y pomocou nižšie uvedeného kódu
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Skontrolujte, či prichádza hovor {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Prichádzajúci hovor !!."); }}
Keď modul GSM detekuje prichádzajúci hovor, zobrazí na druhom riadku modulu LCD prichádzajúci hovor. Funkcia _SIM900_waitResponse () skontroluje prichádzajúce dáta z modulu GSM. Keď prijme SIM900_RING, čo je ekvivalentné „RING“ z dôvodu waitResponce () , zobrazí sa stav „Prichádzajúci hovor“.
Takto si môžete vytvoriť svoje vlastné funkcie na vykonávanie takmer všetkých typov aktivácií pomocou modulu GSM. Ak chcete mať veci napevno, môžete jednoducho použiť funkciu __SIM900_print () na odoslanie ľubovoľného príkazu AT, ako je tento, nižšie.
_SIM900_print ("AT + CPIN? \ R \ n");
Pamätajte, že všetko, čo ste zadali, by malo nasledovať za znakom „\ r \ n“, čo znamená, že sa príkaz končí.
Simulácia:
Keď pochopíte, ako program funguje, môžete vyskúšať simuláciu a vykonať zmeny podľa svojich potrieb. Simulácia vám ušetrí veľa času. Simulácia sa vykonáva pomocou programu Proteus a vyzerá to takto:
Ako vidíte, v programe Proteus sme použili možnosť virtuálneho terminálu na kontrolu, či program reaguje podľa očakávania. Hodnoty môžeme vložiť prostredníctvom vyskakovacieho dialógového okna. Napríklad, hneď ako narazíme na run, objaví sa čierne dialógové okno, ako je uvedené vyššie, so zobrazením AT, to znamená, že poslal GSM modul AT, teraz môžeme odpovedať na PIC napísaním do políčka ako „OK“ a stlačiť kláves Enter a PIC na ňu odpovie. Podobne sa môžeme pokúsiť o všetky AT príkazy.
Uskutočňovanie a prijímanie hovorov pomocou GSM a PIC:
Keď pochopíte, ako funguje kód a hardvér, jednoducho nahrajte nasledujúci program do PIC a zapnite modul. Ak je všetko v poriadku, malo by sa na vašom LCD displeji zobraziť „Detekovaný modul“, „Zistila sa SIM“ a „Umiestnený hovor“. Akonáhle uvidíte „Hovor uskutočnený“, dostanete prichádzajúci hovor na číslo uvedené v programe.
Môžete tiež vyskúšať volať na číslo prítomné v GSM module a na vašom LCD displeji sa zobrazí „Prichádzajúci hovor“, čo indikuje, že sa volá SIM.
Kompletné fungovanie projektu je zobrazené na videu nižšie. Dúfam, že ste pochopili projekt a bavilo vás ho robiť. Ak máte problém s uvedením veci do prevádzky, pošlite svoju otázku do sekcie komentárov alebo na naše fóra. Radi vám pomôžeme.