- Nødvendige materialer:
- GSM-modul:
- Kommunikation med GSM-modul ved hjælp af AT-kommandoer:
- Kredsløbsdiagram:
- Programmering af din PIC Microcontroller:
- Simulation:
- Foretagelse og modtagelse af opkald ved hjælp af GSM og PIC:
GSM-moduler er fascinerende at bruge, især når vores projekt kræver fjernadgang. Disse moduler kan udføre alle handlinger, som vores normale mobiltelefon kunne udføre, som at foretage / modtage et opkald, sende / modtage en SMS, oprette forbindelse til internet ved hjælp af GPRS osv. Du kan også forbinde en normal mikrofon og højttaler til dette modul og tale på din mobilopkald. Dette åbner døre for mange kreative projekter, hvis det kunne grænseflade til en mikrokontroller. Derfor vil vi i denne vejledning lære, hvordan vi kan interface GSM-modulet (SIM900A) med vores PIC-mikrocontroller og demonstrere det ved at foretage og modtage opkald ved hjælp af GSM-modul. Vi har tidligere interfacet det med Arduino og Raspberry Pi til opkald og messaging:
- Opkald og besked ved hjælp af Arduino og GSM-modul
- Ring og sms ved hjælp af Raspberry Pi og GSM-modul
Nødvendige materialer:
- PIC-mikrocontroller (PIC16F877A)
- GSM-modul (SIM900 eller andre)
- Tilslutning af ledninger
- 12V adapter
- PicKit 3
GSM-modul:
GSM-modulet kan bruges selv uden mikrokontroller ved hjælp af AT-kommandotilstand. Som vist ovenfor leveres GSM-modulet med en USART-adapter, som kan forbindes direkte til computeren ved hjælp af et MAX232-modul, eller Tx- og Rx-stifter kan bruges til at forbinde det til en mikrocontroller. Du kan også bemærke de andre ben som MIC +, MIC-, SP +, SP- osv. Hvor en mikrofon eller en højttaler kan tilsluttes. Modulet kan drives af en 12V adapter gennem et normalt jævnstrømsstik.
Indsæt dit SIM-kort i stikket på modulet, og tænd det, du skal bemærke, at en strøm-LED lyser. Vent nu et minut eller deromkring, og du skal se en rød (eller en hvilken som helst anden farve) LED blinker en gang i hvert 3. sekund. Dette betyder, at dit modul var i stand til at oprette forbindelse til dit SIM-kort. Nu kan du fortsætte med at forbinde dit modul med telefonen eller en hvilken som helst mikrokontroller.
Kommunikation med GSM-modul ved hjælp af AT-kommandoer:
Som du måske har gættet det, kan GSM-modulet kommunikere gennem seriel kommunikation og kunne kun forstå et sprog, og det er “ AT-kommandoer ”. Uanset hvad du måske vil fortælle eller bede til GSM-modulet, skal det kun være via AT-kommandoer. For eksempel hvis du vil vide, om dit modul er aktivt. Du skal bede (sende) en kommando som “AT”, og dit modul vil svare “OK”.
Disse AT-kommandoer er godt forklaret i dets datablad og kan findes her i dets officielle datablad. Okay! Okay! Det er et 271-siders datablad, og det kan tage dage at læse dem igennem. Så jeg har givet nogle af de vigtigste AT-kommandoer nedenfor, så du snart kan komme i gang.
PÅ |
Svar med OK til bekræftelse |
AT + CPIN? |
Kontroller signalkvalitet |
AT + COPS? |
Find tjenesteudbyderens navn |
ATD96XXXXXXXX; |
Ring til det specifikke nummer, slutter med semikolon |
AT + CNUM |
Find antallet af SIM-kort (fungerer muligvis ikke for nogle SIM-kort) |
VED EN |
Besvar det indgående opkald |
ATH |
Afbryd det aktuelle indgående opkald |
AT + COLP |
Vis indgående opkaldsnummer |
AT + VTS = (antal) |
Send DTMF-nummer. Du kan bruge ethvert nummer på dit mobile tastatur til (nummer) |
AT + CMGR |
AT + CMGR = 1 læser besked ved første position |
AT + CMGD = 1 |
Slet besked ved første position |
AT + CMGDA = ”DEL ALL” |
Slet alle beskeder fra SIM |
AT + CMGL = ”ALT” |
Læs alle meddelelser fra SIM |
AT + CMGF = 1 |
Indstil SMS-konfiguration. “1” er kun til teksttilstand |
AT + CMGS = “+91 968837XXXX” > CircuitDigest tekst
|
Sender SMS til et bestemt nummer her 968837XXXX. Når du ser “>”, skal du begynde at indtaste teksten. Tryk på Ctrl + Z for at sende teksten. |
AT + CGATT? |
For at kontrollere internetforbindelsen på SIM-kortet |
AT + CIPSHUT |
For at lukke TCP-forbindelse, hvilket betyder at afbryde forbindelse fra internet |
AT + CSTT = "APN", "brugernavn", "Pass" |
Opret forbindelse til GPRS med din APN og Pass-nøgle. Kan fås fra netværksudbyderen. |
AT + CIICR |
Kontroller, om SIM-kortet har datapakke |
AT + CIFSR |
Få IP til SIM-netværket |
AT + CIPSTART = “TCP”, “SERVER IP”, “PORT” |
Bruges til at indstille en TCP IP-forbindelse |
PÅ + CIPSEND |
Denne kommando bruges til at sende data til serveren |
Kredsløbsdiagram:
Forbindelsesdiagrammet til Interfacing GSM-modul med PIC-mikrocontroller er vist nedenfor.
Vi har simpelthen interfacet Tx- og Rx-stifterne på GSM-modulet med Rx- og Tx-stifterne på henholdsvis PIC MCU PIC16F877A. Dette opretter en seriel forbindelse mellem begge. Også, så glem ikke at være fælles om både GSM- og PIC-modulet. Vi har også brugt en LCD-skærm til at kende status for vores GSM-modul. Når forbindelserne er færdige, vil din hardware se ud som noget nedenfor.
PIC Perf-kortet blev lavet til vores PIC-tutorial-serie, hvor vi lærte at bruge PIC-mikrocontroller. Du vil måske gå tilbage til disse PIC Microcontroller-tutorials ved hjælp af MPLABX og XC8, hvis du ikke ved, hvordan man brænder et program ved hjælp af Pickit 3, da jeg vil springe over alle disse grundlæggende oplysninger.
Programmering af din PIC Microcontroller:
Det komplette program til dette projekt kan findes nederst i denne vejledning. Her vil jeg forklare nogle vigtige funktioner og kodestykker. Dette program har også en LCD-kode, der stammer fra Interfacing LCD med PIC Microcontroller, du kan besøge denne tutorial, hvis du er nysgerrig efter at vide, hvordan LCD kan bruges med PIC microcontroller.
Som tidligere nævnt skal vi kommunikere mellem PIC og GSM ved hjælp af AT-kommandoer gennem den serielle kommunikationsmetode. Så først skal vi initialisere USART-kommunikationsmodulet i vores PIC-mikrocontroller ved hjælp af Initialize _SIM900 (); fungere. Inde i denne funktion erklærer vi Tx- og RX-stifterne og initialiserer asynkron modtagelse og transmission ved 9600 baudhastighed og 8-bit-tilstand.
// *** Initialiser UART til SIM900 ** // ugyld Initialiser_SIM900 (ugyldig) {// **** Indstilling af I / O-ben til UART **** // TRISC6 = 0; // TX Pin indstillet som output TRISC7 = 1; // RX-pin indstillet som input // ________ I / O-pins indstillet __________ // / ** Initialiser SPBRG-register for krævet baudrate og indstil BRGH til hurtig baud_rate ** / SPBRG = 129; // SIM900 fungerer ved 9600 Baud rate, så 129 BRGH = 1; // for høj baud_rate // _________ Slutning af baud_rate-indstilling _________ // // **** Aktivér asynkron seriel port ******* // SYNC = 0; // Asynkron SPEN = 1; // Aktiver stifter til seriel port // _____ Asynkron seriel port aktiveret _______ // // ** Gør os klar til transmission og modtagelse ** // TXEN = 1; // aktiver transmission CREN = 1; // aktiver modtagelse // __ UART-modul op og klar til transmission og modtagelse __ // // ** Vælg 8-bit-tilstand ** // TX9 = 0; // 8-bit modtagelse valgt RX9 = 0;// 8-bit modtagefunktion valgt // __ 8-bit tilstand valgt __ //} // ________ UART-modul Initialiseret __________ //
Nu skal vi læse og skrive information fra / til vores GSM-modul. Til dette bruger vi funktionerne _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Disse funktioner bruger transmittere og modtage bufferregisteret såsom TXREG og RCREG til at læse eller skrive data serielt.
// ** Funktion til at sende en byte af dato til UART ** // ugyldigt _SIM900_putch (char bt) {mens (! TXIF); // hold programmet indtil TX-buffer er gratis TXREG = bt; // Indlæs senderbufferen med den modtagne værdi} // _____________ Funktionens afslutning ________________ // // ** Funktion for at få en byte af dato fra UART ** // char _SIM900_getch () {if (OERR) // check for Error { CREN = 0; // Hvis fejl -> Nulstil CREN = 1; // Hvis fejl -> Nulstil} mens (! RCIF); // hold programmet, indtil RX-buffer er gratis retur RCREG; // modtage værdien og sende den til hovedfunktionen} // _____________ Funktionens afslutning ________________ // // ** Funktion til konvertering af streng til byte ** // ugyldig SIM900_send_string (char * st_pt) {mens (* st_pt) // hvis der er en char _SIM900_putch (* st_pt ++);// behandle det som en byte-data} // ___________ Funktionens afslutning ______________ // // ** Slut på ændrede koder ** // ugyldigt _SIM900_print (usigneret const char * ptr) {mens (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Ovenstående funktioner er universelle og behøver ikke ændres til nogen applikationer. De blev kun forklaret for at give en grov introduktion. Du kan dykke dybt ned i dem, hvis du vil gennem forståelse.
Nu inden for vores hovedfunktion initialiserer vi USART-forbindelsen og kontrollerer, om vi er i stand til at modtage et “OK”, når vi sender “AT” ved hjælp af nedenstående kodelinje
gør {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modul ikke fundet"); } mens (! SIM900_isStarted ()); // vent til GSM'en sender "OK" Lcd_Set_Cursor (2,1) tilbage; Lcd_Print_String ("modul opdaget"); __forsink_ms (1500);
Funktionen SIM900_isStarted (); sender “AT” til GSM og venter på svar “OK” fra den. Hvis ja, returnerer den 1 anden 0;
Hvis modulet ikke registreres, eller hvis der er noget forbindelsesproblem, viser LCD'et "Modul ikke fundet", ellers viser modulet detekteret og fortsæt til næste trin, hvor vi kontrollerer, om SIM-kortet kan detekteres af nedenstående linje med kode.
/ * Kontroller, om SIM-kortet er registreret * / gør {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM ikke fundet"); } mens (! SIM900_isReady ()); // vent til GSM sender "+ CPIN: READY" Lcd_Set_Cursor (2,1) tilbage; Lcd_Print_String ("SIM detekteret"); __forsink_ms (1500);
Funktionen SIM900_isReady () sender “AT + CPIN?” til GSM og venter på svar “+ CPIN: KLAR” fra det. Hvis ja, returnerer den 1 anden 0;
Hvis der findes et SIM-kort, får vi detekteret SIM vist på LCD'et. Derefter kan vi prøve at foretage et opkald ved hjælp af kommandoen “ ATD- mobilnummer ; ”. Her som et eksempel har jeg brugt mit nummer som ATD93643159XX;. Du skal udskifte dit respektive mobilnummer der.
/ * Foretag et telefonopkald * / gør {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Her ringer vi til nummer 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Placering af opkald…."); } mens (_SIM900_waitResponse ()! = SIM900_OK); // vent til ESP sender "OK" Lcd_Set_Cursor (1,1) tilbage; Lcd_Print_String ("Opkald foretaget…."); __forsink_ms (1500);
Når opkaldet er placeret, viser LCD'et Opkald foretaget, og du skal modtage et indgående opkald til det angivne nummer.
Du kan også ringe til det mobilnummer, der er tilsluttet GSM-modulet og få besked om det på din LCD-skærm y ved hjælp af nedenstående kode
mens (1) {if (_SIM900_waitResponse () == SIM900_RING) // Kontroller, om der er et indgående opkald {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Indgående opkald !!."); }}
Når GSM-modulet registrerer et indgående opkald, vises det indgående opkald på anden linje i LCD-modulet. Funktionen _SIM900_waitResponse () kontrollerer for indgående data fra GSM-modulet. Når den modtager SIM900_RING, hvilket svarer til “RING” på grund af waitResponce () , viser vi status “Indgående opkald”.
Du kan oprette dine egne funktioner som denne til at udføre næsten alle typer aktiveringer ved hjælp af GSM-modulet. Hvis du vil have tingene hårdkodede, kan du blot bruge funktionen __SIM900_print () til at sende en hvilken som helst AT-kommando som denne nedenfor.
_SIM900_print ("AT + CPIN? \ R \ n");
Husk, at alt hvad du kommanderer skal følges med “\ r \ n” for at indikere, at kommandoen afsluttes.
Simulation:
Når du har forstået, hvordan programmet fungerer, kan du prøve at simulere og foretage ændringer, der passer til dine behov. Simulation sparer dig meget tid. Simuleringen udføres ved hjælp af Proteus, og det ser ud som nedenfor.
Som du kan se, har vi brugt virtuel terminalindstilling i Proteus til at kontrollere, om programmet reagerer som forventet. Vi kan føde værdierne gennem pop op-dialogboksen. For eksempel, så snart vi trykker på run, vises en sort dialogboks som ovenfor og viser AT, det betyder, at den har sendt GSM-modulet AT, nu kan vi svare på PIC ved at indtaste feltet som "OK" og trykke på enter og PIC vil reagere på det. På samme måde kan vi prøve alle AT-kommandoer.
Foretagelse og modtagelse af opkald ved hjælp af GSM og PIC:
Når du først har forstået, hvordan koden og hardware fungerer, skal du blot uploade nedenstående program til PIC og tænde for modulet. Din LCD skal vise "Modul registreret", "SIM detekteret" og "Opkald foretaget", hvis alt fungerer fint. Når du ser “Opkald foretaget”, får du et indgående opkald til det nummer, der er angivet i programmet.
Du kan også prøve at ringe til det nummer, der findes i GSM-modulet, og LCD-skærmen viser "Indgående opkald" for at indikere, at SIM-kortet bliver kaldt.
Den komplette bearbejdning af projektet vises i videoen nedenfor. Håber du forstod projektet og nød at gøre det. Hvis du har problemer med at få tingene til at fungere, skal du sende dit spørgsmål i kommentarsektionen eller på vores fora, så hjælper jeg dig gerne.