- Nepieciešamie materiāli:
- GSM modulis:
- Saziņa ar GSM moduli, izmantojot AT komandas:
- Ķēdes shēma:
- PIC mikrokontrollera programmēšana:
- Modelēšana:
- Zvanu veikšana un saņemšana, izmantojot GSM un PIC:
GSM moduļi ir aizraujoši lietojami, jo īpaši, ja mūsu projektam nepieciešama attāla piekļuve. Šie moduļi varētu veikt visas darbības, ko varētu veikt mūsu parastais mobilais tālrunis, piemēram, zvanīšana / zvana saņemšana, īsziņu sūtīšana / saņemšana, savienojuma izveide ar internetu, izmantojot GPRS utt. Šim modulim var pievienot arī parastu mikrofonu un skaļruni un sarunāties savā tālrunī. mobilie zvani. Tas pavērs durvis daudziem radošiem projektiem, ja to varēs sasaistīt ar mikrokontrolleru. Tādējādi šajā apmācībā mēs uzzināsim, kā mēs varam sasaistīt GSM moduli (SIM900A) ar mūsu PIC mikrokontrolieri, un parādīsim to, veicot un saņemot zvanu, izmantojot GSM moduli. Mēs iepriekš to esam sasaistījuši ar Arduino un Raspberry Pi zvanīšanai un ziņojumapmaiņai:
- Zvani un ziņojumi, izmantojot Arduino un GSM moduli
- Zvans un teksts, izmantojot Raspberry Pi un GSM moduli
Nepieciešamie materiāli:
- PIC mikrokontrolleris (PIC16F877A)
- GSM modulis (SIM900 vai jebkurš cits)
- Savienojošie vadi
- 12V adapteris
- PicKit 3
GSM modulis:
GSM moduli var izmantot pat bez mikrokontrollera, izmantojot AT komandu režīmu. Kā parādīts iepriekš, GSM modulim ir pievienots USART adapteris, kuru var tieši sasaistīt ar datoru, izmantojot moduli MAX232, vai arī Tx un Rx tapas var izmantot, lai to savienotu ar mikrokontrolleru. Varat arī pamanīt citas tapas, piemēram, MIC +, MIC-, SP +, SP- utt., Kur var pievienot mikrofonu vai skaļruni. Moduli var darbināt ar 12 V adapteri, izmantojot parasto līdzstrāvas mucas ligzdu.
Ievietojiet SIM karti moduļa slotā un ieslēdziet to. Jums vajadzētu pamanīt, ka ieslēdzas barošanas gaismas diode. Pagaidiet apmēram minūti, un jums vajadzētu redzēt sarkanu (vai jebkuru citu krāsu) gaismas diode mirgo reizi 3 sekundēs. Tas nozīmē, ka jūsu modulis varēja izveidot savienojumu ar jūsu SIM karti. Tagad jūs varat turpināt savienot moduli ar tālruni vai jebkuru mikrokontrolleru.
Saziņa ar GSM moduli, izmantojot AT komandas:
Kā jūs jau to nojaušāt, GSM modulis var sazināties, izmantojot sērijas sakarus, un varēja saprast tikai vienu valodu, tas ir, “ AT komandas ”. Lai ko jūs varētu vēlēties pateikt vai lūgt GSM modulim, tam vajadzētu būt tikai ar AT komandām. Piemēram, ja vēlaties uzzināt, vai jūsu modulis ir aktīvs. Jums vajadzētu lūgt (nosūtīt) komandu, piemēram, “AT”, un modulis atbildēs “OK”.
Šīs AT komandas ir labi izskaidrotas tās datu lapā un atrodamas šeit tās oficiālajā datu lapā. Labi! Labi! Tā ir 271 lappuses liela datu lapa, un, lai tās izlasītu, var paiet vairākas dienas. Tāpēc es esmu devis dažas vissvarīgākās AT komandas zemāk, lai jūs varētu to ātri sākt un darboties.
AT |
Atbilde tiek apstiprināta ar apstiprinājumu |
AT + CPIN? |
Pārbaudiet signāla kvalitāti |
AT + COPS? |
Atrodiet pakalpojumu sniedzēja nosaukumu |
ATD96XXXXXXXX; |
Zvanīšana uz konkrēto numuru beidzas ar semikolu |
AT + CNUM |
Atrodiet SIM kartes numuru (iespējams, nedarbosies dažām SIM kartēm) |
ATA |
Atbildiet uz ienākošo zvanu |
ATH |
Pārtrauciet pašreizējo ienākošo zvanu |
AT + COLP |
Rādīt ienākošā zvana numuru |
AT + VTS = (skaitlis) |
Nosūtiet DTMF numuru. Varat izmantot jebkuru numuru savā mobilajā tastatūrā (numurs) |
AT + CMGR |
AT + CMGR = 1 nolasa ziņojumu pirmajā pozīcijā |
AT + CMGD = 1 |
Dzēst ziņojumu pirmajā pozīcijā |
AT + CMGDA = “DEL ALL” |
Dzēst visus ziņojumus no SIM |
AT + CMGL = “VISI” |
Lasiet visus ziņojumus no SIM |
AT + CMGF = 1 |
Iestatiet īsziņu konfigurāciju. “1” ir paredzēts tikai teksta režīmam |
AT + CMGS = “+91 968837XXXX” > CircuitDigest Text
|
Šeit nosūta īsziņas uz noteiktu numuru 968837XXXX. Kad redzat “>”, sāciet ievadīt tekstu. Nospiediet Ctrl + Z, lai nosūtītu tekstu. |
AT + CGATT? |
Lai pārbaudītu interneta savienojumu SIM kartē |
AT + CIPSHUT |
Lai aizvērtu TCP savienojumu, kas nozīmē atvienot veidlapu internets |
AT + CSTT = “APN”, “lietotājvārds”, “Piekļuve” |
Izveidojiet savienojumu ar GPRS, izmantojot savu APN un Pass atslēgu. Var iegūt pie tīkla nodrošinātāja. |
AT + CIICR |
Pārbaudiet, vai SIM kartē ir datu pakete |
AT + CIFSR |
Iegūt SIM tīkla IP |
AT + CIPSTART = “TCP”, “SERVER IP”, “PORT” |
Izmanto, lai iestatītu TCP IP savienojumu |
AT + CIPSEND |
Šo komandu izmanto datu nosūtīšanai uz serveri |
Ķēdes shēma:
Savienojuma diagramma GSM moduļa un PIC mikrokontrollera savienojumam ir parādīta zemāk.
Mēs vienkārši esam sasaistījuši GSM moduļa Tx un Rx tapas ar attiecīgi PIC MCU PIC16F877A Rx un Tx tapām. Tas izveidos sērijveida savienojumu starp abiem. Tāpēc neaizmirstiet kopīgi saprast gan GSM, gan PIC moduli. Mēs esam izmantojuši arī LCD displeju, lai uzzinātu mūsu GSM moduļa statusu. Kad savienojumi ir izdarīti, aparatūra izskatīsies kaut kas zemāk.
PIC Perf dēlis tika izveidots mūsu PIC apmācību sērijai, kurā mēs iemācījāmies izmantot PIC mikrokontrolleru. Iespējams, vēlēsities atgriezties pie šīm PIC mikrokontrolleru apmācībām, izmantojot MPLABX un XC8, ja nezināt, kā ierakstīt programmu, izmantojot Pickit 3, jo es izlaidīšu visu šo pamatinformāciju.
PIC mikrokontrollera programmēšana:
Pilna šī projekta programma ir atrodama šīs apmācības apakšdaļā. Šeit es paskaidrošu dažas svarīgas funkcijas un koda fragmentus. Šai programmai ir arī LCD kodi, kas bija no LCD saskarnes ar PIC mikrokontrolleru. Ja vēlaties zināt, kā LCD var izmantot ar PIC mikrokontrolleru, varat apmeklēt šo apmācību.
Kā jau minēts iepriekš, mēs sazināsimies starp PIC un GSM, izmantojot AT komandas, izmantojot sakaru sērijas režīmu. Tātad vispirms mums ir jāinicializē USART komunikācijas modulis mūsu PIC mikrokontrollerī, izmantojot Initialize _SIM900 (); funkciju. Šīs funkcijas iekšpusē mēs deklarējam Tx un RX tapas un inicializējam asinhrono uztveršanu un pārraidi ar 9600 bitu pārraides ātrumu un 8 bitu režīmu.
// *** Inicializēt UART SIM900 ** // void Initialize_SIM900 (void) {// **** I / O tapu iestatīšana UART **** // TRISC6 = 0; // TX tapa ir iestatīta kā izeja TRISC7 = 1; // RX tapa iestatīta kā ieeja // ________ I / O tapu iestatīšana __________ // / ** Inicializējiet SPBRG reģistru vajadzīgajam datu pārraides ātrumam un iestatiet BRGH ātrai baudas ātrumam ** / SPBRG = 129; // SIM900 darbojas ar 9600 Bauda ātrumu, tātad 129 BRGH = 1; // augstam baud_rate // _________ baud_rate iestatījuma beigas _________ // // **** Iespējot asinhrono seriālo portu ******* // SYNC = 0; // asinhronais SPEN = 1; // Iespējot seriālā porta tapas // _____ Iespējots asinhronais seriālais ports _______ // // ** Ļauj sagatavoties nosūtīšanai un saņemšanai ** // TXEN = 1; // iespējot pārraidi CREN = 1; // iespējot uztveršanu // __ UART modulis ir gatavs nosūtīšanai un saņemšanai __ // // ** Atlasiet 8 bitu režīmu ** // TX9 = 0; // izvēlēta 8 bitu uztveršana RX9 = 0;// Atlasīts 8 bitu uztveršanas režīms // __ Atlasīts 8 bitu režīms __ //} // ________ UART modulis Inicializēts __________ //
Tagad mums ir jālasa un jāraksta informācija no / uz mūsu GSM moduli. Šim nolūkam mēs izmantojam funkcijas _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Šīs funkcijas izmanto datu pārsūtīšanas un saņemšanas reģistru, piemēram, TXREG un RCREG, lai lasītu vai rakstītu datus sērijveidā.
// ** Funkcija viena datuma baita nosūtīšanai uz UART ** // void _SIM900_putch (char bt) {while (! TXIF); // turiet programmu, līdz TX buferis ir brīvs TXREG = bt; // Ielādējiet raidītāja buferi ar saņemto vērtību} // _____________ Funkcijas beigas ________________ // // ** Funkcija, lai iegūtu vienu datuma baitu no UART ** // char _SIM900_getch () {if (OERR) // pārbaudiet, vai nav kļūdas { CREN = 0; // Ja kļūda -> Atiestatīt CREN = 1; // Ja kļūda -> Atiestatīt}, kamēr (! RCIF); // turiet programmu, līdz RX buferis ir bezmaksas atgriešanās RCREG; // saņem vērtību un nosūtiet to uz galveno funkciju} // _____________ Funkcijas beigas ________________ // // ** ** Funkcija, lai virkni pārvērstu baitā ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // if there ir char _SIM900_putch (* st_pt ++);// apstrādājiet tos kā baitu datus} // ___________ Funkcijas beigas ______________ // // ** Modificēto kodu beigas ** // void _SIM900_print (neparakstīta const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Iepriekš minētās funkcijas ir universālas, un tās nav jāmaina nevienai lietojumprogrammai. Viņiem paskaidroja tikai, lai sniegtu aptuvenu ievadu. Jūs varat ienirt dziļi tajos, ja vēlaties, izmantojot sapratni.
Tagad mūsu galvenajā funkcijā mēs inicializējam USART savienojumu un pārbaudām, vai, nosūtot “AT”, mēs varam saņemt “OK”, izmantojot zemāk esošo koda rindiņu
do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modulis nav atrasts"); } while (! SIM900_isStarted ()); // pagaidiet, līdz GSM nosūtīs atpakaļ "OK" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modulis atrasts"); __kavēšanās_ms (1500);
Funkcija SIM900_isStarted (); nosūtīs “AT” uz GSM un gaidīs atbildi “OK” no tā. Ja jā, tas atgriezīs vēl vienu 0;
Ja modulis netiek atrasts vai ir kāda savienojuma problēma, LCD displejā būs redzams paziņojums “Module not found” (Modulis nav atrasts), pretējā gadījumā tas parādīs, ka modulis ir atrasts, un dodieties uz nākamo soli, kur mēs pārbaudām, vai SIM karti var noteikt tālāk koda rindiņa.
/ * Pārbaudiet, vai nav atrasta SIM karte * / do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM nav atrasts"); } while (! SIM900_isReady ()); // pagaidiet, līdz GSM nosūtīs atpakaļ "+ CPIN: READY" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Atklāta SIM karte"); __kavēšanās_ms (1500);
Funkcija SIM900_isReady () nosūtīs “AT + CPIN?” uz GSM un gaida no tā atbildi “+ CPIN: READY”. Ja jā, tas atgriezīs vēl vienu 0;
Ja tiek atrasta SIM karte, LCD tiks parādīta SIM karte. Pēc tam mēs varam mēģināt veikt zvanu, izmantojot komandu “ ATD mobilenumber ; ”. Šeit kā piemēru esmu izmantojis savu numuru kā ATD93643159XX;. Tur jums jāaizstāj attiecīgais mobilā tālruņa numurs.
/ * Veiciet tālruņa zvanu * / do {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Šeit mēs veicam zvanu uz numuru 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Zvana veikšana…."); } while (_SIM900_waitResponse ()! = SIM900_OK); // pagaidiet, kamēr ESP nosūtīs atpakaļ "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("Zvans veikts…."); __kavēšanās_ms (1500);
Kad zvans ir veikts, LCD displejā tiks parādīts Call Placed, un jums vajadzētu saņemt ienākošo zvanu uz šo norādīto numuru.
Varat arī piezvanīt uz mobilo numuru, kas savienots ar GSM moduli, un saņemt LCD paziņojumu par to LCD ekrānā y, izmantojot tālāk norādīto kodu
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Pārbaudiet, vai ir ienākošs zvans {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Ienākošais zvans !!."); }}
Kad GSM modulis uztver ienākošo zvanu, LCD moduļa otrajā rindā tiks parādīts Ienākošais zvans. Funkcija _SIM900_waitResponse () pārbaudīs ienākošos datus no GSM moduļa. Kad tā saņem SIM900_RING, kas ir līdzvērtīga “RING”, pateicoties waitResponce () , mēs parādīsim statusu “Incoming call”.
Jūs varat izveidot savas šādas funkcijas, lai veiktu gandrīz visu veidu aktivizēšanu, izmantojot GSM moduli. Ja vēlaties, lai lietas būtu kodētas, varat vienkārši izmantot funkciju __SIM900_print (), lai nosūtītu jebkuru tālāk norādīto AT komandu.
_SIM900_print ("AT + CPIN? \ R \ n");
Atcerieties, ka viss, ko jūs komandējāt, ir jāaizpilda ar “\ r \ n”, lai norādītu, ka komanda tiek pārtraukta.
Modelēšana:
Kad esat sapratis, kā programma darbojas, varat mēģināt simulēt un veikt izmaiņas atbilstoši savām vajadzībām. Simulācija ietaupīs daudz laika. Simulācija tiek veikta, izmantojot Proteus, un tā izskatās zemāk.
Kā redzat, mēs esam izmantojuši virtuālā termināla opciju Proteus, lai pārbaudītu, vai programma reaģē, kā paredzēts. Mēs varam ievadīt vērtības, izmantojot uznirstošo dialoglodziņu. Piemēram, tiklīdz mēs izpildīsim izpildi, parādīsies melns dialoglodziņš, kā parādīts iepriekš, un parādīsies AT, tas nozīmē, ka tas ir nosūtījis GSM moduli AT, tagad mēs varam atbildēt uz PIC, ierakstot lodziņā kā “Labi” un nospiežot Enter un PIC uz to reaģēs. Tāpat mēs varam izmēģināt visas AT komandas.
Zvanu veikšana un saņemšana, izmantojot GSM un PIC:
Kad esat sapratis, kā darbojas kods un aparatūra, vienkārši augšupielādējiet zemāk esošo programmu PIC un ieslēdziet moduli. Ja viss darbojas labi, LCD displejā jāparāda “Module konstatēta”, “Atklāta SIM” un “Zvanīts”. Kad redzēsiet “Zvans veikts”, jūs saņemsit ienākošo zvanu uz programmā norādīto numuru.
Varat arī mēģināt piezvanīt uz numuru, kas atrodas GSM modulī, un LCD displejā parādīsies uzraksts “Ienākošais zvans”, lai norādītu uz SIM zvanu.
Pilnīga projekta darbība ir parādīta zemāk esošajā video. Ceru, ka sapratāt projektu un patika to darīt. Ja jums ir kādas problēmas, lai lietas darbotos, ievietojiet savu jautājumu komentāru sadaļā vai mūsu forumos, un es ar prieku jums palīdzēsim.