- Reikalingos medžiagos:
- GSM modulis:
- Bendravimas su GSM moduliu naudojant AT komandas:
- Grandinės schema:
- PIC mikrovaldiklio programavimas:
- Modeliavimas:
- Skambinimas ir skambučių priėmimas naudojant GSM ir PIC:
GSM moduliai yra įdomūs naudoti, ypač kai mūsų projektui reikalinga nuotolinė prieiga. Šie moduliai galėtų atlikti visus veiksmus, kuriuos galėtų atlikti įprastas mūsų mobilusis telefonas, pvz., Skambinti / priimti skambutį, siųsti / gauti SMS, prisijungti prie interneto naudojant GPRS ir kt. Taip pat galite prie šio modulio prijungti įprastą mikrofoną ir garsiakalbį bei kalbėtis savo mobilieji skambučiai. Tai atvers duris daugeliui kūrybinių projektų, jei jį bus galima suderinti su mikrovaldikliu. Taigi šioje pamokoje sužinosime, kaip galime susieti GSM modulį (SIM900A) su savo PIC mikrovaldikliu ir parodysime tai atlikdami ir priimdami skambutį naudodami GSM modulį. Anksčiau mes jį susiejome su „Arduino“ ir „Raspberry Pi“ skambindami ir susirašinėdami:
- Skambinkite ir praneškite naudodami „Arduino“ ir „GSM“ modulį
- Skambinkite ir siųskite tekstą naudodami „Raspberry Pi“ ir „GSM“ modulį
Reikalingos medžiagos:
- PIC mikrovaldiklis (PIC16F877A)
- GSM modulis (SIM900 ar bet kuris kitas)
- Jungiamieji laidai
- 12 V adapteris
- „PicKit 3“
GSM modulis:
Naudojant AT komandų režimą, GSM modulį galima naudoti net be jokio mikrovaldiklio. Kaip parodyta aukščiau, GSM modulyje yra USART adapteris, kurį galima tiesiogiai susieti su kompiuteriu naudojant MAX232 modulį, arba Tx ir Rx kaiščiai gali būti naudojami prijungiant jį prie mikrovaldiklio. Taip pat galite pastebėti kitus kaiščius, tokius kaip MIC +, MIC-, SP +, SP- ir kt., Kur galima prijungti mikrofoną ar garsiakalbį. Modulis gali būti maitinamas 12 V adapteriu per įprastą nuolatinės srovės vamzdžio lizdą.
Įdėkite savo SIM kortelę į modulio angą ir įjunkite ją, turėtumėte pastebėti, kad įsijungia maitinimo šviesos diodas. Dabar palaukite maždaug minutę ir turėtumėte pamatyti raudoną (arba bet kokios kitos spalvos) šviesos diodą, kuris mirksi kartą per 3 sekundes. Tai reiškia, kad jūsų modulis sugebėjo užmegzti ryšį su jūsų SIM kortele. Dabar galite tęsti modulio prijungimą prie telefono ar bet kurio mikrovaldiklio.
Bendravimas su GSM moduliu naudojant AT komandas:
Kaip jau spėjote, GSM modulis gali bendrauti nuosekliai ir suprasti tik vieną kalbą, ty „ AT komandas “. Kad ir ką norėtumėte pasakyti ar paprašyti GSM modulio, tai turėtų būti tik per AT komandas. Pavyzdžiui, jei norite sužinoti, ar jūsų modulis yra aktyvus. Turėtumėte paprašyti (išsiųsti) tokios komandos kaip „AT“ ir jūsų modulis atsakys „Gerai“.
Šios AT komandos yra gerai paaiškintos jo duomenų lape ir čia galite rasti jos oficialiame duomenų lape. Gerai! Gerai! Tai yra 271 puslapio duomenų lapas, kurį galite perskaityti kelias dienas. Taigi aš pateikiau keletą svarbiausių AT komandų, kad galėtumėte tai greitai paleisti.
AT |
Atsakymą patvirtina gerai |
AT + CPIN? |
Patikrinkite signalo kokybę |
AT + COPS? |
Raskite paslaugų teikėjo pavadinimą |
ATD96XXXXXXXX; |
Skambinimas konkrečiu numeriu baigiasi kabliataškiu |
AT + CNUM |
Suraskite SIM kortelės numerį (kai kurioms SIM kortelėms gali netikti) |
ATA |
Atsiliepkite į gaunamą skambutį |
ATH |
Nutraukite dabartinį gaunamą skambutį |
AT + COLP |
Rodyti gaunamo skambučio numerį |
AT + VTS = (skaičius) |
Siųsti DTMF numerį. Savo mobiliajame klaviatūroje galite naudoti bet kurį numerį (numeriui) |
AT + CMGR |
AT + CMGR = 1 skaito pranešimą pirmoje pozicijoje |
AT + CMGD = 1 |
Ištrinti pranešimą iš pirmos vietos |
AT + CMGDA = „Ištrinti VISUS“ |
Ištrinti visus pranešimus iš SIM |
AT + CMGL = „VISI“ |
Perskaitykite visus pranešimus iš SIM |
AT + CMGF = 1 |
Nustatykite SMS konfigūraciją. „1“ skirtas tik teksto režimui |
AT + CMGS = „+91 968837XXXX“ > „CircuitDigest“ tekstas
|
Siunčia SMS tam tikru numeriu čia 968837XXXX. Kai pamatysite „>“, pradėkite įvesti tekstą. Norėdami išsiųsti tekstą, paspauskite „Ctrl“ + Z. |
AT + CGATT? |
Norėdami patikrinti interneto ryšį SIM kortelėje |
AT + CIPSHUT |
Uždaryti TCP ryšį, ty atjungti interneto formą |
AT + CSTT = „APN“, „vartotojo vardas“, „Leisti“ |
Prisijunkite prie GPRS naudodami APN ir Pass raktą. Gauti galima iš tinklo teikėjo. |
AT + CIICR |
Patikrinkite, ar SIM kortelėje yra duomenų paketas |
AT + CIFSR |
Gaukite SIM tinklo IP adresą |
AT + CIPSTART = „TCP“, „SERVER IP“, „PORT“ |
Naudojamas nustatyti TCP IP ryšį |
AT + CIPSEND |
Ši komanda naudojama duomenims siųsti į serverį |
Grandinės schema:
Žemiau pateikiama sąsajos GSM modulio su PIC mikrovaldikliu jungimo schema.
Paprasčiausiai susiejome GSM modulio Tx ir Rx kaiščius su atitinkamai PIC MCU PIC16F877A Rx ir Tx kaiščiais. Tai užmegs nuoseklų ryšį tarp abiejų. Taip pat nepamirškite sutikti tiek GSM, tiek PIC modulio. Mes taip pat naudojome LCD ekraną, norėdami sužinoti savo GSM modulio būseną. Kai sujungimai bus atlikti, jūsų aparatūra atrodys kažkas žemiau.
„PIC Perf“ plokštė buvo sukurta mūsų PIC mokomųjų programų serijai, kurioje mes išmokome naudoti PIC mikrovaldiklį. Galbūt norėsite grįžti prie tų PIC mikrovaldiklių vadovėlių, kuriuose naudojamos MPLABX ir XC8, jei nežinote, kaip įrašyti programą naudojant „Pickit 3“, nes praleisiu visą tą pagrindinę informaciją.
PIC mikrovaldiklio programavimas:
Visą šio projekto programą rasite šios pamokos apačioje. Čia paaiškinsiu keletą svarbių funkcijų ir kodo dalių. Ši programa taip pat turi skystųjų kristalų kodus, gautus iš LCD sąsajos su PIC mikrovaldikliu. Jei norite sužinoti, kaip skystųjų kristalų ekraną galima naudoti su PIC mikrovaldikliu, galite apsilankyti šioje instrukcijoje.
Kaip sakyta anksčiau, mes ketiname bendrauti tarp PIC ir GSM naudodami AT komandas per nuoseklųjį ryšio režimą. Taigi pirmiausia turime inicijuoti USART ryšio modulį savo PIC mikrovaldiklyje, naudodami Initialize _SIM900 (); funkcija. Šios funkcijos viduje mes deklaruojame Tx ir RX kaiščius ir inicijuojame asinchroninį priėmimą ir perdavimą 9600 baudų greičiu ir 8 bitų režimu.
// *** Inicializuoti SIM900 UART ** // negalioja Initialize_SIM900 (negaliojantis) {// **** UART įvesties / išvesties kaiščių nustatymas **** // TRISC6 = 0; // TX kaištis nustatytas kaip išėjimas TRISC7 = 1; // RX kaištis nustatytas kaip įvestis // ________ Įvesties / išvesties kaiščių rinkinys __________ // / ** Inicijuoti SPBRG registrą reikalingam perdavimo greičiui ir nustatyti BRGH greitam baudos greičiui ** / SPBRG = 129; // SIM900 veikia 9600 perdavimo sparta, taigi 129 BRGH = 1; // esant dideliam baudos greičiui // _________ Baigti baudos greičio nustatymą _________ // // **** Įjungti asinchroninį nuoseklųjį prievadą ******* // SYNC = 0; // asinchroninis SPEN = 1; // Įgalinti nuoseklaus prievado kaiščius // _____ Įjungtas asinchroninis nuoseklusis prievadas _______ // // ** Pasiruošia perdavimui ir priėmimui ** // TXEN = 1; // įgalinti perdavimą CREN = 1; // įjungti priėmimą // __ UART modulis parengtas perduoti ir priimti __ // // ** Pasirinkite 8 bitų režimą ** // TX9 = 0; // pasirinktas 8 bitų priėmimas RX9 = 0;// Pasirinktas 8 bitų priėmimo režimas // __ Pasirinktas 8 bitų režimas __ //} // ________ UART modulis inicijuotas __________ //
Dabar turime skaityti ir rašyti informaciją iš / į savo GSM modulį. Tam mes naudojame funkcijas _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Šios funkcijos naudoja duomenų perdavimo ir priėmimo buferio registrą, pvz., TXREG ir RCREG, nuosekliam duomenų skaitymui ar rašymui.
// ** Funkcija siųsti vieną baitą datą į UART ** // negalioja _SIM900_putch (char bt) {while (! TXIF); // laikykite programą tol, kol TX buferis bus laisvas TXREG = bt; // Įkelkite siųstuvo buferį su gauta verte} // _____________ Funkcijos pabaiga ________________ // // ** Funkcija norint gauti vieną baitą datos iš UART ** // char _SIM900_getch () {if (OERR) // patikrinkite, ar nėra klaidos { CREN = 0; // Jei klaida -> Reset CREN = 1; // Jei klaida -> Atstatyti}, kol (! RCIF); // laikykite programą tol, kol RX buferis bus nemokamas RCREG; // gaukite vertę ir nusiųskite ją į pagrindinę funkciją} // _____________ Funkcijos pabaiga ________________ // // // ** Funkcija, skirta eilutę paversti baitu ** // negaliojanti SIM900_send_string (char * st_pt) {while (* st_pt) // jei yra yra char _SIM900_putch (* st_pt ++);// apdorokite juos kaip baitų duomenis} // ___________ funkcijos pabaiga ______________ // // ** modifikuotų kodų pabaiga ** // negalioja _SIM900_print (nepasirašyta const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Aukščiau nurodytos funkcijos yra universalios ir jų nereikia keisti jokioms programoms. Jie buvo paaiškinti tik tam, kad pateiktų apytikslį įvadą. Jei norite, galite pasinerti į juos giliai per supratimą.
Dabar mūsų pagrindinėje funkcijoje mes inicijuojame USART ryšį ir patikriname, ar mes galime gauti „Gerai“, kai siunčiame „AT“, naudodami žemiau esančią kodo eilutę
padaryti {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modulis nerastas"); } while (! SIM900_isStarted ()); // palaukite, kol GSM atsiųs „OK“ Lcd_Set_Cursor (2,1); Lcd_Print_String („Aptiktas modulis“); __delay_ms (1500);
Funkcija SIM900_isStarted (); išsiųs „AT“ į GSM ir laukia atsakymo iš jo „Gerai“. Jei taip, jis grąžins dar 1 0;
Jei modulis neaptinkamas arba jei yra kokių nors ryšio problemų, LCD bus rodoma „Modulis nerastas“, kitu atveju jis parodys, kad aptiktas modulis, ir pereikite prie kito žingsnio, kur mes patikriname, ar SIM kortelę galima aptikti žemiau kodo eilutė.
/ * Patikrinkite, ar aptikta SIM kortelė * / do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM nerasta"); } while (! SIM900_isReady ()); // palaukite, kol GSM atsiųs „+ CPIN: READY“ Lcd_Set_Cursor (2,1); „Lcd_Print_String“ („SIM aptikta“); __delay_ms (1500);
Funkcija SIM900_isReady () atsiųs „AT + CPIN?“ į GSM ir laukia atsakymo „+ CPIN: READY“. Jei taip, jis grąžins dar 1 0;
Jei bus nustatyta SIM kortelė, LCD bus rodoma SIM kortelė. Tada galime pabandyti paskambinti naudodami komandą „ ATD mobilenumber ; “. Čia kaip pavyzdį naudojau savo numerį kaip ATD93643159XX;. Ten turite pakeisti atitinkamą mobiliojo telefono numerį.
/ * Paskambinkite telefonu * / atlikite {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Čia mes skambiname numeriu 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Skambučio atlikimas…."); } while (_SIM900_waitResponse ()! = SIM900_OK); // palauk, kol ESP atsiųs „OK“ Lcd_Set_Cursor (1,1); „Lcd_Print_String“ („Skambučio padėta….“); __delay_ms (1500);
Atlikus skambutį, LCD ekrane bus rodoma „Call Placed“ ir turėtumėte gauti skambutį šiuo nurodytu numeriu.
Taip pat galite paskambinti mobiliuoju numeriu, prijungtu prie GSM modulio, ir gauti pranešimą apie tai savo LCD ekrane y naudodami žemiau pateiktą kodą
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Patikrinkite, ar yra įeinantis skambutis {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Gaunamas skambutis !!."); }}
Kai GSM modulis aptinka gaunamą skambutį, antroje LCD modulio eilutėje bus rodomas gaunamasis skambutis. Funkcija _SIM900_waitResponse () patikrins, ar nėra gaunamų duomenų iš GSM modulio. Gavę SIM900_RING, kuris prilygsta „RING“ dėl „ waitResponce“ () , mes parodysime būseną „Gaunamas skambutis“.
Galite sukurti savo tokias funkcijas, kad atliktumėte beveik visų rūšių aktyvavimą naudodami GSM modulį. Jei norite, kad viskas būtų užkoduota, galite tiesiog naudoti funkciją __SIM900_print (), norėdami išsiųsti bet kurią toliau nurodytą AT komandą.
_SIM900_print ("AT + CPIN? \ R \ n");
Atminkite, kad viskas, ką nurodėte, turėtų būti sekama „\ r \ n“, kad būtų nurodyta, jog komanda baigiasi.
Modeliavimas:
Supratę, kaip programa veikia, galite pabandyti imituoti ir atlikti pakeitimus, kad atitiktų jūsų poreikius. Modeliavimas sutaupys jums daug laiko. Modeliavimas atliekamas naudojant „Proteus“ ir atrodo taip, kaip nurodyta toliau.
Kaip matote, „Proteus“ naudojome virtualaus terminalo parinktį, kad patikrintume, ar programa reaguoja taip, kaip tikėtasi. Mes galime tiekti reikšmes per iššokantįjį dialogo langą. Pavyzdžiui, kai tik paspauskite „Run“, pasirodys juodas dialogo langas, kaip nurodyta aukščiau, ir bus rodomas AT, tai reiškia, kad jis išsiuntė GSM modulį AT, dabar mes galime atsakyti į PIC, įvesdami laukelį kaip „Gerai“ ir paspauskite „Enter“ ir PIC į tai atsakys. Panašiai galime išbandyti visas AT komandas.
Skambinimas ir skambučių priėmimas naudojant GSM ir PIC:
Kai suprasite, kaip veikia kodas ir aparatinė įranga, paprasčiausiai įkelkite žemiau esančią programą į PIC ir įjunkite modulį. Jei viskas gerai, jūsų LCD ekrane turėtų būti rodoma „Aptiktas modulis“, „Aptikta SIM“ ir „Skambučio padėta“. Kai pamatysite „Skambinimas atliktas“, gausite skambutį programoje nurodytu numeriu.
Taip pat galite pabandyti skambinti numeriu, esančiu GSM modulyje, ir jūsų LCD ekrane pasirodys užrašas „Gaunamas skambutis“, rodantis, kad skambinama SIM kortele.
Visas projekto darbas parodytas žemiau esančiame vaizdo įraše. Tikiuosi, kad supratote projektą ir patiko jį atlikti. Jei turite kokių nors problemų, kad viskas veiktų, paskelbkite savo klausimą komentarų skyriuje arba mūsų forumuose, ir aš mielai jums padėsiu.