- Tarvittavat materiaalit:
- GSM-moduuli:
- Viestintä GSM-moduulin kanssa AT-komentojen avulla:
- Piirikaavio:
- PIC-mikrokontrollerin ohjelmointi:
- Simulointi:
- Puhelujen soittaminen ja vastaanottaminen GSM: n ja PIC: n avulla:
GSM-moduulien käyttö on kiehtovaa erityisesti silloin, kun projektimme vaatii etäkäyttöä. Nämä moduulit voisivat tehdä kaikki toiminnot, joita normaali matkapuhelimemme voisi tehdä, kuten puhelun soittaminen / vastaanottaminen, tekstiviestin lähettäminen / vastaanottaminen, yhteyden muodostaminen Internetiin GPRS: llä jne. Voit myös liittää tähän moduuliin normaalin mikrofonin ja kaiuttimen ja keskustella matkapuhelimet. Tämä avaa oven monille luoville projekteille, jos se voidaan liittää mikrokontrolleriin. Siksi tässä opetusohjelmassa opitaan, kuinka voimme liittää GSM-moduulin (SIM900A) PIC-mikrokontrollerimme kanssa, ja osoitamme sen soittamalla ja vastaanottamalla puhelua GSM-moduulin avulla. Olemme aiemmin liittäneet sen Arduinon ja Raspberry Pi: n kanssa soittamiseen ja viestintään:
- Soita ja lähetä viesti Arduinon ja GSM-moduulin avulla
- Soita ja lähetä tekstiä Raspberry Pi- ja GSM-moduulien avulla
Tarvittavat materiaalit:
- PIC-mikrokontrolleri (PIC16F877A)
- GSM-moduuli (SIM900 tai mikä tahansa muu)
- Johtojen liittäminen
- 12 V: n sovitin
- PicKit 3
GSM-moduuli:
GSM-moduulia voidaan käyttää myös ilman mikro-ohjainta AT-komentotilassa. Kuten yllä on esitetty, GSM-moduulissa on USART-sovitin, joka voidaan liittää suoraan tietokoneeseen MAX232-moduulin avulla tai Tx- ja Rx-nastoja voidaan käyttää sen liittämiseen mikrokontrolleriin. Voit myös huomata muut nastat, kuten MIC +, MIC-, SP +, SP- jne., Joihin mikrofoni tai kaiutin voidaan liittää. Moduuli voidaan syöttää 12 V: n sovittimella normaalin DC-tynnyriliittimen kautta.
Aseta SIM-korttisi moduulin aukkoon ja käynnistä se, huomaa virran merkkivalon palaavan. Odota nyt noin minuutti, ja sinun pitäisi nähdä punainen (tai mikä tahansa muu väri) LED vilkkuu kerran 3 sekunnin välein. Tämä tarkoittaa, että moduulisi pystyi muodostamaan yhteyden SIM-kortillesi. Nyt voit jatkaa moduulin liittämistä puhelimeen tai mihin tahansa mikrokontrolleriin.
Viestintä GSM-moduulin kanssa AT-komentojen avulla:
Kuten olet ehkä arvannut, GSM-moduuli voi kommunikoida sarjaliikenteen kautta ja ymmärtää vain yhtä kieltä eli AT-komentoja. Mitä tahansa haluatkin kertoa tai kysyä GSM-moduulilta, sen pitäisi tapahtua vain AT-komentojen kautta. Esimerkiksi, jos haluat tietää, onko moduuli aktiivinen. Sinun tulisi kysyä (lähettää) komento, kuten "AT", ja moduuli vastaa "OK".
Nämä AT-komennot on selitetty hyvin sen tietolomakkeessa, ja ne löytyvät täältä sen virallisesta taulusta. Okei! Okei! Se on 271-sivuinen tietolomake, jonka lukeminen saattaa kestää päiviä. Joten olen antanut joitain tärkeimpiä AT-komentoja alla, jotta saat tämän toimimaan pian.
AT |
Vastaa vahvistuksella valitsemalla OK |
AT + CPIN? |
Tarkista signaalin laatu |
AT + COPS? |
Etsi palveluntarjoajan nimi |
ATD96XXXXXXXX; |
Soita tiettyyn numeroon, päättyy puolipisteeseen |
AT + CNUM |
Etsi SIM-kortin numero (ei välttämättä toimi kaikilla SIM-korteilla) |
ATA |
Vastaa saapuvaan puheluun |
ATH |
Katkaise nykyinen saapuva puhelu |
AT + COLP |
Näytä saapuvan puhelun numero |
AT + VTS = (luku) |
Lähetä DTMF-numero. Voit käyttää mitä tahansa matkapuhelimen näppäimistön numeroa (numero) |
AT + CMGR |
AT + CMGR = 1 lukee viestin ensimmäisestä sijainnista |
AT + CMGD = 1 |
Poista viesti ensimmäisestä sijainnista |
AT + CMGDA = ”POISTA KAIKKI” |
Poista kaikki viestit SIM-kortilta |
AT + CMGL = ”KAIKKI” |
Lue kaikki SIM-kortilta lähetetyt viestit |
AT + CMGF = 1 |
Aseta tekstiviestien kokoonpano. ”1” on tarkoitettu vain teksti -tilaan |
AT + CMGS = "+91 968837XXXX" > CircuitDigest-teksti
|
Lähettää tekstiviestin tiettyyn numeroon täällä 968837XXXX. Kun näet>, aloita tekstin kirjoittaminen. Lähetä teksti painamalla Ctrl + Z. |
AT + CGATT? |
Internet-yhteyden tarkistaminen SIM-kortilta |
AT + CIPSHUT |
Sulje TCP-yhteys, eli katkaise yhteys Internetiin |
AT + CSTT = ”APN”, ”käyttäjänimi”, ”Hyväksytty” |
Muodosta yhteys GPRS: ään APN- ja Pass-avaimella. Voidaan hankkia verkkopalveluntarjoajalta. |
AT + CIICR |
Tarkista, onko SIM-kortilla datapaketti |
AT + CIFSR |
Hanki SIM-verkon IP-osoite |
AT + CIPSTART = ”TCP”, ”PALVELIN IP”, ”PORTTI” |
Käytetään asettamaan TCP IP-yhteys |
AT + CIPSEND |
Tätä komentoa käytetään tietojen lähettämiseen palvelimelle |
Piirikaavio:
Kytkentäkaavion Liitännät GSM-moduuli PIC mikro on esitetty alla.
Olemme yksinkertaisesti liittäneet GSM-moduulin Tx- ja Rx-nastat vastaavasti PIC MCU: n PIC16F877A: n Rx- ja Tx-nastoihin. Tämä muodostaa sarjayhteyden molempien välille. Älä siis unohda olla yhtä mieltä sekä GSM- että PIC-moduuleista. Olemme myös käyttäneet LCD-näyttöä tietämään GSM-moduulimme tilan. Kun liitännät on tehty, laitteesi näyttää jotain alla olevalta.
PIC Perf -levy tehtiin PIC-opetusohjelmaamme varten, jossa opimme käyttämään PIC-mikrokontrolleria. Haluat ehkä palata niihin PIC-mikrokontrollerioppaisiin, joissa käytetään MPLABX: ää ja XC8: ta, jos et tiedä miten polttaa ohjelmaa Pickit 3: lla, koska ohitan kaikki nämä perustiedot.
PIC-mikrokontrollerin ohjelmointi:
Tämän projektin täydellinen ohjelma löytyy tämän opetusohjelman alaosasta. Tässä selitän joitain tärkeitä toimintoja ja koodikappaleita. Tässä ohjelmassa on myös LCD-koodit, jotka olivat Interfacing LCD with PIC Microcontroller, voit käydä opetusohjelmassa, jos olet utelias tietämään, kuinka LCD: tä voidaan käyttää PIC-mikrokontrollerin kanssa.
Kuten aiemmin mainittiin, aiomme kommunikoida PIC: n ja GSM: n välillä käyttämällä AT-komentoja sarjaliikennetilan kautta. Joten ensin on alustettava USART-tietoliikennemoduuli PIC-mikrokontrollerissamme käyttämällä Initialize _SIM900 (); toiminto. Tämän toiminnon sisällä ilmoitetaan Tx- ja RX-nastat ja alustetaan asynkroninen vastaanotto ja lähetys 9600 baudinopeudella ja 8-bittisessä tilassa.
// *** Initialize UART for SIM900 ** // void Initialize_SIM900 (void) {// **** UART I / O-nastojen asettaminen **** // TRISC6 = 0; // TX-nasta asetettu lähtöön TRISC7 = 1; // RX-nasta asetettu tuloksi // ________ I / O-nastat asetettu __________ // / ** Alusta SPBRG-rekisteri vaaditulle siirtonopeudelle ja aseta BRGH nopealle baudinopeudelle ** / SPBRG = 129; // SIM900 toimii 9600 tiedonsiirtonopeudella, joten 129 BRGH = 1; // suurelle baudinopeudelle // _________ baudinopeuden asetuksen päättyminen _________ // // **** Ota käyttöön asynkroninen sarjaportti ******* // SYNC = 0; // Asynkroninen SPEN = 1; // Salli sarjaportin nastat // _____ Asynkroninen sarjaportti käytössä _______ // // ** Valmistautuu lähetykseen ja vastaanottoon ** // TXEN = 1; // ota lähetys käyttöön CREN = 1; // ota vastaanotto käyttöön // __ UART-moduuli valmiina lähetykseen ja vastaanottoon __ // // ** Valitse 8-bittinen tila ** // TX9 = 0; // 8-bittinen vastaanotto valittu RX9 = 0;// 8-bittinen vastaanottotila valittu // __ 8-bittinen tila valittu __ //} // ________ UART-moduuli alustettu __________ //
Nyt meidän on luettava ja kirjoitettava tietoja GSM-moduulistamme. Tätä varten käytämme funktioita _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Nämä toiminnot käyttävät lähetys- ja vastaanottopuskurirekisteriä, kuten TXREG ja RCREG, tietojen lukemiseen tai kirjoittamiseen sarjaan.
// ** Toiminto lähettää yhden tavun päivämäärä UART: lle ** // void _SIM900_putch (char bt) {while (! TXIF); // pidä ohjelmaa, kunnes TX-puskuri on vapaa TXREG = bt; // Lataa lähetinpuskuri vastaanotetulla arvolla} // _____________ Toiminnon loppu ________________ // // ** Toiminto yhden tavun päivämäärän saamiseksi UART: lta ** // char _SIM900_getch () {if (OERR) // tarkista virhe { CREN = 0; // Jos virhe -> Nollaa CREN = 1; // Jos virhe -> Nollaa} kun (! RCIF); // pidä ohjelmaa, kunnes RX-puskuri on ilmainen paluu RCREG; // vastaanota arvo ja lähetä se pääfunktiolle} // _____________ Funktion loppu ________________ // // ** ** Funktio, jolla merkkijono muunnetaan tavuksi ** // mitätöity SIM900_send_string (char * st_pt) {while (* st_pt) // jos on on char _SIM900_putch (* st_pt ++);// käsittele sitä tavutiedoina} // ___________ Toiminnon loppu ______________ // // ** Muokattujen koodien loppu ** // void _SIM900_print (allekirjoittamaton const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Yllä olevat toiminnot ovat universaaleja, eikä niitä tarvitse muuttaa missään sovelluksessa. Heille selitettiin vain karkea esittely. Voit sukeltaa syvälle niihin, jos haluat ymmärryksen kautta.
Nyt päätoimintomme sisällä alustamme USART-yhteyden ja tarkistamme, pystymmekö saamaan "OK", kun lähetämme "AT", käyttämällä alla olevaa koodiriviä
tee {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Moduulia ei löydy"); } while (! SIM900_isStarted ()); // odota, kunnes GSM lähettää "OK" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Moduuli havaittu"); _ viive_ms (1500);
Toiminto SIM900_isStarted (); lähettää "AT" GSM: lle ja odottaa vastausta "OK" siitä. Jos kyllä, se palauttaa yhden muun 0;
Jos moduulia ei löydy tai jos yhteysongelmissa on ongelmia, nestekidenäytössä näkyy "Moduulia ei löydy", muuten se näyttää Moduuli on havaittu ja jatka seuraavaan vaiheeseen, jossa tarkistamme, voidaanko SIM-kortti havaita alla rivin koodi.
/ * Tarkista onko SIM-kortti havaittu * / tee {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM-korttia ei löydy"); } while (! SIM900_isReady ()); // odota, kunnes GSM lähettää takaisin "+ CPIN: VALMIS" Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM havaittu"); _ viive_ms (1500);
Toiminto SIM900_isReady () lähettää "AT + CPIN?" GSM: ään ja odottaa vastausta "+ CPIN: VALMIS". Jos kyllä, se palauttaa yhden muun 0;
Jos SIM-kortti löytyy, SIM-kortti havaitaan nestekidenäytössä. Sitten voimme yrittää soittaa puhelun komennolla “ ATD mobilenumber ; ”. Tässä olen käyttänyt esimerkkinä numeroni ATD93643159XX;. Sinun on vaihdettava vastaava matkapuhelinnumerosi siellä.
/ * Soita puhelu * / tee {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Tässä soitamme numeroon 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Soitetaan puhelu…."); } while (_SIM900_waitResponse ()! = SIM900_OK); // odota, kunnes ESP lähettää takaisin "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("Soitettu puhelu…."); _ viive_ms (1500);
Kun puhelu on soitettu, nestekidenäytössä näkyy Soitettu ja sinun tulisi vastaanottaa saapuva puhelu kyseiseen numeroon.
Voit myös soittaa GSM-moduuliin yhdistettyyn matkapuhelinnumeroon ja saada siitä ilmoituksen LCD-näytöllä y käyttämällä alla olevaa koodia
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Tarkista, onko saapuvaa puhelua {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Saapuva puhelu !!."); }}
Kun GSM-moduuli havaitsee saapuvan puhelun, se näyttää saapuvan puhelun LCD-moduulin toisella rivillä. Toiminto _SIM900_waitResponse () tarkistaa saapuvat tiedot GSM-moduulista. Kun se vastaanottaa SIM900_RING-koodin, joka vastaa "RING" -ohjelmaa waitResponce (): n vuoksi , näytämme tilan "Saapuva puhelu".
Voit luoda omia toimintoja, kuten tämä, suorittaa melkein kaikki aktivointityypit GSM-moduulin avulla. Jos haluat, että asiat koodataan kovalla koodilla, voit yksinkertaisesti käyttää __SIM900_print () -toimintoa lähettääksesi minkä tahansa tällaisen AT-komennon alla.
_SIM900_print ("AT + CPIN? \ R \ n");
Muista, että kaikkia komentojasi tulisi seurata merkinnällä "\ r \ n", mikä osoittaa komennon päättyvän.
Simulointi:
Kun olet ymmärtänyt ohjelman toiminnan, voit kokeilla simulointia ja tehdä muutoksia tarpeidesi mukaan. Simulaatio säästää paljon aikaa. Simulaatio suoritetaan Proteuksella ja se näyttää alla olevalta.
Kuten näette, olemme käyttäneet Proteuksessa virtuaalipääte-vaihtoehtoa tarkistamaan, vastaako ohjelma odotetusti. Voimme syöttää arvoja ponnahdusikkunan kautta. Esimerkiksi heti kun saavutamme suorituksen, näkyviin tulee yllä olevanlainen musta valintaikkuna, joka näyttää AT: n, mikä tarkoittaa, että se on lähettänyt GSM-moduulin AT, nyt voimme vastata PIC: ään kirjoittamalla ruutuun "OK" ja painamalla Enter ja PIC vastaa siihen. Vastaavasti voimme kokeilla kaikkia AT-komentoja.
Puhelujen soittaminen ja vastaanottaminen GSM: n ja PIC: n avulla:
Kun ymmärrät koodin ja laitteiston toiminnan, lähetä alla oleva ohjelma yksinkertaisesti PIC: ään ja käynnistä moduuli. Nestekidenäytössäsi pitäisi olla ”Module Detected”, “SIM Detected” ja “Call Placed”, jos kaikki toimii hyvin. Kun näet "Soitettu puhelu", saat saapuvan puhelun ohjelmassa määritettyyn numeroon.
Voit myös yrittää soittaa GSM-moduulissa olevaan numeroon, ja nestekidenäytössä näkyy “Saapuva puhelu”, joka ilmaisee, että SIM-kortille soitetaan.
Projektin täydellinen työskentely on esitetty alla olevassa videossa. Toivottavasti ymmärrät projektin ja nautit siitä. Jos sinulla on ongelmia saada asiat toimimaan, lähetä kysymyksesi kommenttiosioon tai foorumeillemme ja autan mielelläni.