- Szükséges anyagok:
- GSM modul:
- Kommunikáció a GSM modullal AT parancsok használatával:
- Kördiagramm:
- A PIC mikrovezérlő programozása:
- Szimuláció:
- Hívások kezdeményezése és fogadása GSM és PIC segítségével:
A GSM modulok használata lenyűgöző, különösen akkor, ha projektünk távoli hozzáférést igényel. Ezek a modulok elvégezhetnek minden olyan műveletet, amelyet a normál mobiltelefonunk képes megtenni, például hívás kezdeményezése / fogadása, SMS küldés / fogadás, internethez való csatlakozás GPRS használatával stb. Ehhez a modulhoz normál mikrofont és hangszórót is csatlakoztathat, és beszélgethet a mobilhívások. Ez számos kreatív projekt előtt nyit kaput, ha összekapcsolható egy mikrovezérlővel. Ezért ebben az oktatóanyagban megtanuljuk, hogyan tudjuk összekapcsolni a GSM modult (SIM900A) a PIC mikrovezérlőnkkel, és be fogjuk mutatni, hogy hívással kezdeményezünk és fogadunk GSM modult. Korábban összekötöttük az Arduinóval és a Raspberry Pi-vel telefonáláshoz és üzenetküldéshez:
- Hívás és üzenet az Arduino és a GSM modul használatával
- Hívás és szöveg küldése a Raspberry Pi és a GSM modul segítségével
Szükséges anyagok:
- PIC mikrokontroller (PIC16F877A)
- GSM modul (SIM900 vagy bármely más)
- Csatlakozó vezetékek
- 12V-os adapter
- PicKit 3
GSM modul:
A GSM modul mikrokontroller nélkül is használható az AT parancs mód használatával. Amint fentebb látható, a GSM modulhoz tartozik egy USART adapter, amely közvetlenül összekapcsolható a számítógéppel egy MAX232 modul segítségével, vagy a Tx és Rx csapok használhatók mikrokontrollerhez történő csatlakoztatásra. Észreveheti a többi csapot is, például MIC +, MIC-, SP +, SP- stb., Ahol mikrofon vagy hangszóró csatlakoztatható. A modult egy 12 V-os adapter táplálhatja egy normál egyenáramú csatlakozóaljzaton keresztül.
Helyezze be a SIM-kártyát a modul nyílásába, és kapcsolja be, és észre kell vennie, hogy egy bekapcsoló LED világít. Várjon egy percet, és látnia kell, hogy 3 másodpercenként egyszer villog egy piros (vagy bármilyen más színű) LED. Ez azt jelenti, hogy a modul képes volt kapcsolatot létesíteni a SIM-kártyával. Most folytathatja a modul csatlakoztatását a telefonnal vagy bármely mikrovezérlővel.
Kommunikáció a GSM modullal AT parancsok használatával:
Ahogy sejteni lehetett, a GSM modul képes kommunikálni soros kommunikáción keresztül, és csak egy nyelvet tud megérteni, ez az „ AT parancsok ”. Bármit is el akar mondani vagy kérni a GSM modultól, azt csak AT parancsokkal szabad megtenni. Például, ha szeretné tudni, hogy a modul aktív-e. Kérjen (küldjön) egy olyan parancsot, mint az „AT”, és a modul az „OK” választ adja.
Ezeket az AT parancsokat az adatlap jól megmagyarázza, és itt találhatók a hivatalos adatlapján. Oké! Oké! Ez egy 271 oldalas adatlap, és napokba telhet, amíg átolvassa őket. Tehát az alábbiakban adtam néhány legfontosabb AT-parancsot, hogy hamarosan elindulhasson.
NÁL NÉL |
OK-val válaszol a nyugtázásra |
AT + CPIN? |
Ellenőrizze a jel minőségét |
AT + COPS? |
Keresse meg a szolgáltató nevét |
ATD96XXXXXXXX; |
Hívás a megadott számra, pontosvesszővel végződik |
AT + CNUM |
Keresse meg a SIM-kártya számát (lehet, hogy egyes SIM-eknél nem működik) |
ATA |
Fogadja a bejövő hívást |
ATH |
Tegye le az aktuális bejövő hívást |
AT + COLP |
Bejövő hívásszám megjelenítése |
AT + VTS = (szám) |
Küldje el a DTMF számot. Bármely számot használhat a mobil billentyűzetén a (szám) |
AT + CMGR |
AT + CMGR = 1 beolvassa az üzenetet az első pozícióban |
AT + CMGD = 1 |
Üzenet törlése az első pozícióban |
AT + CMGDA = „MINDEN KELL” |
Az összes üzenet törlése a SIM-ről |
AT + CMGL = „MINDEN” |
Olvassa el az összes üzenetet a SIM-ről |
AT + CMGF = 1 |
SMS konfiguráció beállítása. Az „1” csak szöveges mód |
AT + CMGS = „+91 968837XXXX” > CircuitDigest Text
|
Itt küld egy SMS-t egy adott számra: 968837XXXX. Amikor megjelenik a „>” jel, kezdje el beírni a szöveget. A szöveg elküldéséhez nyomja meg a Ctrl + Z billentyűkombinációt. |
AT + CGATT? |
Az internetkapcsolat ellenőrzése a SIM-kártyán |
AT + CIPSHUT |
A TCP-kapcsolat bezárása, vagyis az internet-kapcsolat bontása |
AT + CSTT = „APN”, „felhasználónév”, „Engedély” |
Csatlakozzon a GPRS-hez az APN és a Pass kulccsal. A Hálózati Szolgáltatótól kapható. |
AT + CIICR |
Ellenőrizze, hogy a SIM-kártyán van-e adatcsomag |
AT + CIFSR |
Szerezze be a SIM-hálózat IP-címét |
AT + CIPSTART = „TCP”, „SERVER IP”, „PORT” |
TCP IP-kapcsolat beállítására szolgál |
AT + CIPSEND |
Ezzel a paranccsal adatokat küldhetünk a szerverre |
Kördiagramm:
Az Interfacing GSM modul és a PIC mikrovezérlő csatlakozási diagramja az alábbiakban látható.
Egyszerűen összekötöttük a GSM modul Tx és Rx érintkezőit a PIC MCU PIC16F877A Rx és Tx csapjaival. Ez soros kapcsolatot létesít mindkettő között. Emellett ne felejtsük el közösen megismerni a GSM és a PIC modult sem. LCD-kijelzőt is használtunk a GSM-modul állapotának megismerésére. Miután a kapcsolatok elkészültek, a hardver úgy néz ki, mint valami alább.
A PIC Perf kártya a PIC oktatósorozatunkhoz készült, amelyben megtanultuk a PIC mikrovezérlő használatát. Érdemes visszatérni azokhoz a PIC mikrokontroller oktatóanyagokhoz, amelyek MPLABX-t és XC8-at használnak, ha nem tudja, hogyan kell egy programot a Pickit 3 segítségével égetni, mivel ezeket az alapvető információkat kihagyom.
A PIC mikrovezérlő programozása:
A projekt teljes programja az oktatóanyag alján található. Itt elmagyarázok néhány fontos funkciót és kódrészletet. Ez a program rendelkezik egy LCD-kóddal is, amely az Interfacing LCD és a PIC mikrovezérlő részéről származik. Látogasson el az oktatóanyagra, ha kíváncsi arra, hogyan használható az LCD a PIC mikrovezérlővel.
Amint azt korábban említettük, a PIC és a GSM között AT parancsok segítségével fogunk kommunikálni a soros kommunikációs módon keresztül. Tehát először inicializálnunk kell az USART kommunikációs modult a PIC mikrovezérlőnkben az Initialize _SIM900 () használatával; funkció. Ebben a funkcióban deklaráljuk a Tx és RX csapokat, és inicializáljuk az aszinkron vételt és adást 9600 baud sebességgel és 8 bites módban.
// *** UART inicializálása a SIM900 számára ** // void Initialize_SIM900 (void) {// **** I / O csapok beállítása az UART számára **** // TRISC6 = 0; // TX kimenet kimenetként TRISC7 = 1; // RX Pin beállítása bemenetként // ________ I / O csapok beállítása __________ // / ** Inicializálja az SPBRG regisztert a szükséges adatátviteli sebességhez, és állítsa be a BRGH értéket a gyors baud_rate értékhez ** / SPBRG = 129; // a SIM900 9600 Baud sebességgel működik, tehát 129 BRGH = 1; // a magas baud_rate esetén // _________ A baud_rate beállítás vége _________ // // **** Az aszinkron soros port engedélyezése ******* // SYNC = 0; // aszinkron SPEN = 1; // Soros port csapok engedélyezése // _____ Aszinkron soros port engedélyezve _______ // // ** Felkészülhet az átvitelre és vételre ** // TXEN = 1; // átvitel engedélyezése CREN = 1; // engedélyezi a vételt // __ UART modul fel van készen áll az átvitelre és vételre __ // // ** Válasszon 8 bites módot ** // TX9 = 0; // 8 bites vétel kiválasztva RX9 = 0;// 8 bites vételi mód kiválasztva // __ 8 bites mód kiválasztva __ //} // ________ UART modul inicializált __________ //
Most információkat kell olvasnunk és írnunk a GSM modulunkról. Ehhez a _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print () függvényeket használjuk. Ezek a funkciók az Adás és vétel puffer regisztert, például a TXREG és az RCREG, az adatok soros olvasásához vagy írásához használják.
// ** Funkció a dátum egy bájtjának elküldésére az UART-ra ** // void _SIM900_putch (char bt) {while (! TXIF); // tartsa lenyomva a programot, amíg a TX puffer nem lesz szabad TXREG = bt; // Töltse be az adópuffert a kapott értékkel} // _____________ Funkció vége ________________ // // ** ** Funkció, hogy egy bájt dátumot kapjon az UART-ból ** // char _SIM900_getch () {if (OERR) // ellenőrizze a hibát { CREN = 0; // Ha hiba -> CREN visszaállítása = 1; // Ha hiba -> Visszaállítás} while (! RCIF); // tartsa lenyomva a programot, amíg az RX puffer szabadon visszatér RCREG; // megkapja az értéket és elküldi a fő függvénynek} // _____________ A függvény vége ________________ // // // ** Funkció a karakterlánc bájtokká alakítására ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // if there egy char _SIM900_putch (* st_pt ++);// bájtadatokként feldolgozza} // ___________ A funkció vége ______________ // // ** A módosított kódok vége ** // void _SIM900_print (aláíratlan const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
A fenti funkciók univerzálisak, és semmilyen alkalmazásnál nem szükséges megváltoztatni őket. Csak azért magyarázták őket, hogy durva bevezetőt adjanak. Ha meg akarja érteni, mélyen belemerülhet.
Most a fő funkciónkban inicializáljuk az USART kapcsolatot, és az alábbi kódsor használatával ellenőrizzük, hogy képesek vagyunk-e „OK” -ot kapni, amikor „AT” -t küldünk.
do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("A modul nem található"); } while (! SIM900_isStarted ()); // várjon a GSM-ig, hogy visszaküldje az "OK" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modul észlelve"); __késleltetési_ms (1500);
A SIM900_isStarted () függvény ; „AT” -ot küld a GSM-nek, és várja az „OK” választ. Ha igen, akkor még 1 0-t ad vissza;
Ha a modult nem észleli, vagy ha bármilyen kapcsolódási probléma merül fel, akkor az LCD-n a „Modul not found” felirat jelenik meg, különben a Module Detected felirat jelenik meg, és folytatjuk a következő lépéssel, ahol ellenőrizzük, hogy az alábbiakban felismerhető-e a SIM-kártya kódsor.
/ * Ellenőrizze, hogy nem észlelték-e a SIM-kártyát * / do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("A SIM nem található"); } while (! SIM900_isReady ()); // várjon, amíg a GSM visszaküldi "+ CPIN: READY" Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM észlelve"); __késleltetési_ms (1500);
A SIM900_isReady () függvény „AT + CPIN?” Üzenetet küld a GSM-re, és várja a „+ CPIN: KÉSZ” választ. Ha igen, akkor még 1 0-t ad vissza;
Ha talál egy SIM-kártyát, akkor az LCD-n megjelenik a SIM-kártya. Ezután megpróbálhatunk hívást kezdeményezni az „ ATD mobilenumber ; ”. Itt példaként a számomat használtam ATD93643159XX; néven. Ott ki kell cserélnie a megfelelő mobilszámot.
/ * Telefonhívás kezdeményezése * / do {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Itt felhívjuk a 93643XXXXX Lcd_Set_Cursor (1,1) számot; Lcd_Print_String ("Hívás kezdeményezése…"); } while (_SIM900_waitResponse ()! = SIM900_OK); // várjon, amíg az ESP visszaküldi az "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("Hívás elküldve…"); __késleltetési_ms (1500);
A hívás megtétele után az LCD-n megjelenik a Hívás helye felirat, és be kell hívnia a megadott számot.
Hívhat a GSM-modulhoz csatlakoztatott mobilszámra is, és értesítést kap erről az LCD képernyőn y az alábbi kód segítségével
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Ellenőrizze, hogy van-e bejövő hívás {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Bejövő hívás !!."); }}
Amikor a GSM modul bejövő hívást észlel, az LCD modul második sorában megjelenik a Bejövő hívás felirat. A _SIM900_waitResponse () függvény ellenőrzi a GSM modulból érkező adatokat. Amikor megkapja a SIM900_RING-et, ami a waitResponce () miatt megegyezik a „RING” -nel , megjelenik a „Bejövő hívás” állapot.
Létrehozhat ilyen saját funkciókat a GSM modul segítségével szinte minden típusú aktiválás végrehajtására. Ha hardveresen akarja a dolgokat, akkor egyszerűen használhatja a __SIM900_print () függvényt bármelyik ilyen AT parancs elküldéséhez.
_SIM900_print ("AT + CPIN? \ R \ n");
Ne feledje, hogy az összes parancsot „\ r \ n” betűvel kell követni, jelezve, hogy a parancs befejeződik.
Szimuláció:
Miután megértette a program működését, megpróbálhatja szimulálni és változtatásokat hajthat végre az Ön igényeinek megfelelően. A szimuláció sok időt takarít meg Önnek. A szimuláció a Proteus segítségével történik, és az alábbiak szerint néz ki.
Mint látható, a Proteus virtuális terminál opcióját használtuk annak ellenőrzésére, hogy a Program a várt módon reagál-e. A felbukkanó párbeszédpanelen keresztül betáplálhatjuk az értékeket. Például amint elérjük a futást, megjelenik egy fekete párbeszédpanel, mint fent, és megjelenik az AT, ez azt jelenti, hogy elküldte az AT GSM modult, most válaszolhatunk a PIC-re úgy, hogy beírjuk a mezőbe az „OK” lehetőséget, és megnyomjuk az és a PIC reagál rá. Hasonlóképpen megpróbálhatjuk az összes AT parancsot.
Hívások kezdeményezése és fogadása GSM és PIC segítségével:
Miután megértette a kód és a hardver működését, egyszerűen töltse fel az alábbi programot a PIC-be és kapcsolja be a modult. Az LCD-n a „Module Detected”, a „SIM Detected” és a „Call Placed” felirat jelenik meg, ha minden rendben működik. Ha megjelenik a „Hívás érkezett” üzenet, bejövő hívást kap a programban megadott számra.
Megpróbálhatja felhívni a GSM-modulban található számot is, és az LCD-n megjelenik a „Bejövő hívás” üzenet, jelezve, hogy a SIM-kártyát hívják.
A projekt teljes működését az alábbi videó mutatja. Remélem, megértette a projektet és élvezettel csinálta. Ha bármilyen problémája van a dolgok működtetésével, tegye fel kérdését a megjegyzés rovatban vagy a fórumon, és szívesen segítek.