- Materials necessaris:
- Mòdul GSM:
- Comunicació amb el mòdul GSM mitjançant comandes AT:
- Esquema de connexions:
- Programació del microcontrolador PIC:
- Simulació:
- Fer i rebre trucades mitjançant GSM i PIC:
Els mòduls GSM són fascinants d’utilitzar sobretot quan el nostre projecte requereix accés remot. Aquests mòduls poden fer totes les accions que el nostre telèfon mòbil normal podria fer, com fer / rebre una trucada, enviar / rebre un SMS, connectar-se a Internet mitjançant GPRS, etc. També podeu connectar un micròfon i un altaveu normals a aquest mòdul i conversar al vostre telèfon. trucades mòbils. Això obrirà les portes a molts projectes creatius si es pogués connectar amb un microcontrolador. Per tant, en aquest tutorial aprendrem com podem fer la interfície del mòdul GSM (SIM900A) amb el nostre microcontrolador PIC i ho demostrarem fent i rebent trucades mitjançant el mòdul GSM. Prèviament, l’hem relacionat amb Arduino i Raspberry Pi per a trucades i missatgeria:
- Truqueu i envieu missatges mitjançant el mòdul Arduino i GSM
- Truqueu i envieu missatges de text mitjançant el mòdul Raspberry Pi i GSM
Materials necessaris:
- Microcontrolador PIC (PIC16F877A)
- Mòdul GSM (SIM900 o qualsevol altre)
- Connexió de cables
- Adaptador de 12V
- PicKit 3
Mòdul GSM:
![]()
El mòdul GSM es pot utilitzar fins i tot sense cap microcontrolador mitjançant el mode d’ordres AT. Com es mostra més amunt, el mòdul GSM inclou un adaptador USART que es pot connectar directament a l'ordinador mitjançant un mòdul MAX232 o es poden utilitzar els pins Tx i Rx per connectar-lo a un microcontrolador. També podeu notar els altres pins com MIC +, MIC-, SP +, SP-, etc. on es pot connectar un micròfon o un altaveu. El mòdul es pot alimentar mitjançant un adaptador de 12V mitjançant una presa de barril de CC normal.
Introduïu la targeta SIM a la ranura del mòdul i engegueu-la, ja que notareu que s’encén un LED d’alimentació. Ara espereu un minut més o menys i hauríeu de veure un LED vermell (o qualsevol altre color) que parpellegi una vegada cada 3 segons. Això significa que el vostre mòdul va poder establir connexió amb la vostra targeta SIM. Ara podeu continuar connectant el mòdul amb el telèfon o qualsevol microcontrolador.
Comunicació amb el mòdul GSM mitjançant comandes AT:
Com ho hauríeu imaginat, el mòdul GSM pot comunicar-se mitjançant la comunicació en sèrie i només pot entendre un idioma, és a dir, “ ordres AT ”. Qualsevol cosa que vulgueu dir-li o demanar-li al mòdul GSM només hauria de ser mitjançant ordres AT. Per exemple, si voleu saber si el vostre mòdul està actiu. Haureu de demanar (enviar) una ordre com "AT" i el vostre mòdul respondrà "D'acord".
Aquestes ordres AT estan ben explicades al seu full de dades i es poden trobar aquí al seu full de dades oficial. Bé! Bé! És un full de dades de 271 pàgines i és possible que trigueu dies a llegir-les. Per tant, he donat algunes de les ordres AT més importants a continuació perquè pugueu posar-ho en funcionament aviat.
|
AT |
Respon amb OK per Acceptació |
|
AT + CPIN? |
Comproveu la qualitat del senyal |
|
AT + COPS? |
Cerqueu el nom del proveïdor de serveis |
|
ATD96XXXXXXXX; |
La trucada al número específic acaba amb punt i coma |
|
AT + CNUM |
Cerqueu el número de targeta SIM (és possible que no funcioni en algunes SIM) |
|
ATA |
Respon a la trucada entrant |
|
ATH |
Pengeu la trucada entrant actual |
|
AT + COLP |
Mostra el número de trucada entrant |
|
AT + VTS = (nombre) |
Envia el número DTMF. Podeu utilitzar qualsevol número del teclat del mòbil per a (número) |
|
AT + CMGR |
AT + CMGR = 1 llegeix el missatge a la primera posició |
|
AT + CMGD = 1 |
Esborra el missatge a la primera posició |
|
AT + CMGDA = "DEL ALL" |
Suprimeix tots els missatges de la SIM |
|
AT + CMGL = "TOTS" |
Llegiu tots els missatges des de la SIM |
|
AT + CMGF = 1 |
Estableix la configuració de SMS. "1" és per al mode només de text |
|
AT + CMGS = "+91 968837XXXX" > CircuitDigest Text
|
Envia SMS a un número concret aquí 968837XXXX. Quan vegeu ">" comenceu a introduir el text. Premeu Ctrl + Z per enviar el text. |
|
AT + CGATT? |
Per comprovar si hi ha connexió a Internet a la targeta SIM |
|
AT + CIPSHUT |
Per tancar la connexió TCP, és a dir, desconnectar d'Internet |
|
AT + CSTT = "APN", "nom d'usuari", "Pass" |
Connecteu-vos a GPRS amb la vostra clau APN i Pass. Es pot obtenir al proveïdor de xarxa. |
|
AT + CIICR |
Comproveu si la targeta SIM té paquet de dades |
|
AT + CIFSR |
Obteniu l'adreça IP de la xarxa SIM |
|
AT + CIPSTART = "TCP", "SERVER IP", "PORT" |
S'utilitza per establir una connexió IP TCP |
|
AT + CIPSEND |
Aquesta ordre s'utilitza per enviar dades al servidor |
Esquema de connexions:
A continuació es mostra el diagrama de connexió del mòdul GSM d’interfície amb microcontrolador PIC.

Simplement hem interfaçat els pins Tx i Rx del mòdul GSM amb els pins Rx i Tx del PIC MCU PIC16F877A respectivament. Això establirà una connexió en sèrie entre tots dos. A més, no us oblideu de posar en comú tant el mòdul GSM com el PIC. També hem utilitzat una pantalla LCD per conèixer l’estat del nostre mòdul GSM. Un cop fetes les connexions, el vostre maquinari semblarà una cosa a continuació.

La placa PIC Perf va ser creada per a la nostra sèrie de tutorials PIC, en què vam aprendre a utilitzar el microcontrolador PIC. És possible que vulgueu tornar a aquests tutorials PIC Microcontroller amb MPLABX i XC8 si no sabeu com gravar un programa amb Pickit 3, ja que saltaré tota aquesta informació bàsica.

Programació del microcontrolador PIC:
El programa complet d’aquest projecte es troba a la part inferior d’aquest tutorial. Aquí explicaré algunes funcions i trossos de codi importants. Aquest programa també té uns codis LCD que provenien de la interfície LCD amb microcontrolador PIC; podeu visitar aquest tutorial si teniu curiositat per saber com es pot utilitzar la pantalla LCD amb el microcontrolador PIC.
Com s’ha dit anteriorment, ens comunicarem entre PIC i GSM mitjançant comandes AT mitjançant el mode de comunicació en sèrie. Per tant, primer hem d’inicialitzar el mòdul de comunicació USART al nostre microcontrolador PIC mitjançant l’inicialització _SIM900 (); funció. Dins d'aquesta funció declarem els pins Tx i RX i inicialitzem la recepció i transmissió asíncrona a una velocitat de 9600 baud i el mode de 8 bits.
// *** Inicialitzar UART per SIM900 ** // void Initialize_SIM900 (void) {// **** Configuració de pins d'E / S per UART **** // TRISC6 = 0; // Pin PIN configurat com a sortida TRISC7 = 1; // Pin RX configurat com a entrada // ________ Pin de E / S configurat __________ // / ** Inicialitzeu el registre SPBRG per a la velocitat de transmissions requerida i configureu BRGH per a velocitat de transmissió ràpida ** / SPBRG = 129; // SIM900 funciona a una velocitat de 9600 Baud, de manera que 129 BRGH = 1; // per a velocitat de transmissió elevada // _________ Finalització de la configuració de velocitat de transmissió _________ // // **** Activa el port sèrie asíncron ******* // SYNC = 0; // SPEN asíncron = 1; // Habilita els pins del port sèrie // _____ El port sèrie asíncron està habilitat _______ // // ** Ens preparem per a la transmissió i recepció ** // TXEN = 1; // habilitar la transmissió CREN = 1; // habilita la recepció // __ El mòdul UART està llest per a la transmissió i recepció __ // // ** Selecciona el mode de 8 bits ** // TX9 = 0; // Recepció de 8 bits seleccionada RX9 = 0;// Mode de recepció de 8 bits seleccionat // __ Mode de 8 bits seleccionat __ //} // ________ Mòdul UART Inicialitzat __________ //
Ara hem de llegir i escriure informació des del / al nostre mòdul GSM. Per a això fem servir les funcions _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Aquestes funcions utilitzen el registre de memòria intermèdia de transmissió i recepció, com TXREG i RCREG, per llegir o escriure dades en sèrie.
// ** Funció per enviar un byte de data a UART ** // void _SIM900_putch (char bt) {while (! TXIF); // manteniu el programa fins que el buffer TX sigui lliure TXREG = bt; // Carregueu la memòria intermèdia del transmissor amb el valor rebut} // _____________ Final de la funció ________________ // // ** Funció per obtenir un byte de data de UART ** // char _SIM900_getch () {if (OERR) // comproveu si hi ha un error { CREN = 0; // Si hi ha un error -> Restableix CREN = 1; // Si hi ha un error -> Restableix} mentre (! RCIF); // Mantingueu el programa fins que la memòria intermèdia RX sigui lliure de retorn RCREG; // rebre el valor i enviar-lo a la funció principal} // _____________ Fi de la funció ________________ // // ** Funció per convertir la cadena a byte ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // if there és un caràcter _SIM900_putch (* st_pt ++);// processeu-lo com a dades de bytes} // ___________ Fi de la funció ______________ // // ** Final dels codis modificats ** // void _SIM900_print (const sign uns * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Les funcions anteriors són universals i no cal canviar-les per a cap aplicació. Només se'ls va explicar per fer una introducció aproximada. Podeu submergir-vos en ells si voleu a través de la comprensió.
Ara dins de la nostra funció principal, inicialitzem la connexió USART i comprovem si podem rebre un "OK" quan enviem "AT" mitjançant la línia de codi següent
fer {Lcd_Set_Cursor (2,1); Lcd_Print_String ("No s'ha trobat el mòdul"); } while (! SIM900_isStarted ()); // espereu fins que el GSM enviï "OK" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Mòdul detectat"); __delay_ms (1500);
La funció SIM900_isStarted (); enviarà "AT" al GSM i espera la resposta "D'acord". Si és així, retornarà 1 altra cosa 0;
Si no es detecta el mòdul o si hi ha algun problema de connexió, a la pantalla LCD es mostrarà "No s'ha trobat el mòdul", en cas contrari mostrarà que s'ha detectat el mòdul i es passa al següent pas on comprovem si la targeta SIM es pot detectar a continuació. línia de codi.
/ * Comproveu si es detecta la targeta SIM * / fer {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM no trobada"); } while (! SIM900_isReady ()); // espereu fins que el GSM enviï "+ CPIN: READY" Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM detectada"); __delay_ms (1500);
La funció SIM900_isReady () enviarà "AT + CPIN?" al GSM i espera la resposta "+ CPIN: READY". Si és així, retornarà 1 altra cosa 0;
Si es troba una targeta SIM, obtindrem la SIM detectada a la pantalla LCD. A continuació, podem provar de fer una trucada mitjançant l’ordre “ ATD mobilenumber ; ”. Aquí, com a exemple, he utilitzat el meu número com a ATD93643159XX;. Hi heu de substituir el número de mòbil respectiu.
/ * Fer una trucada * / fer {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Aquí fem una trucada al número 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Realització de trucades…"); } while (_SIM900_waitResponse ()! = SIM900_OK); // espereu fins que l'ESP enviï "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("Trucada realitzada…"); __delay_ms (1500);
Un cop realitzada la trucada, la pantalla LCD mostrarà la trucada realitzada i hauríeu de rebre una trucada entrant al número especificat.
També podeu trucar al número de mòbil connectat al mòdul GSM i rebre'n una notificació a la pantalla LCD y mitjançant el codi següent
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Comproveu si hi ha una trucada entrant {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Trucada entrant !!."); }}
Quan el mòdul GSM detecti una trucada entrant, mostrarà la trucada entrant a la segona línia del mòdul LCD. La funció _SIM900_waitResponse () comprovarà si hi ha dades entrants des del mòdul GSM. Quan rep SIM900_RING, que equival a "RING" a causa de waitResponce () , mostrarem l'estat "Trucada entrant".
Podeu crear les vostres pròpies funcions com aquesta per realitzar gairebé tot tipus d'activitats mitjançant el mòdul GSM. Si voleu que les coses siguin codificades, podeu utilitzar la funció __SIM900_print () per enviar qualsevol ordre AT com aquesta a continuació.
_SIM900_print ("AT + CPIN? \ R \ n");
Recordeu que tot el que ordeneu s'ha de seguir amb "\ r \ n" per indicar que l'ordre està finalitzant.
Simulació:
Un cop hàgiu entès el funcionament del programa, podeu provar de simular i fer canvis segons les vostres necessitats. La simulació us estalviarà molt de temps. La simulació es fa amb Proteus i es veu a continuació.

Com podeu veure, hem utilitzat l'opció de terminal virtual a Proteus per comprovar si el programa està responent com s'esperava. Podem introduir els valors a través del quadre de diàleg emergent. Per exemple, tan bon punt premem Executar, apareixerà un quadre de diàleg negre com l'anterior i mostrarà AT, això vol dir que ha enviat el mòdul GSM AT, ara podem respondre a PIC escrivint al quadre com a "D'acord" i premem Intro i el PIC hi respondrà. De la mateixa manera, podem provar totes les ordres AT.
Fer i rebre trucades mitjançant GSM i PIC:
Un cop hàgiu entès com funciona el codi i el maquinari, simplement pengeu el programa següent a PIC i engegueu el mòdul. El vostre LCD hauria de mostrar "Mòdul detectat", "SIM detectada" i "Trucada realitzada" si tot funciona bé. Un cop vegeu "Trucada realitzada", rebreu una trucada entrant al número especificat al programa.
També podeu provar de trucar al número present al mòdul GSM i el vostre LCD mostrarà "Trucada entrant" per indicar que s'està trucant a la SIM.

El funcionament complet del projecte es mostra al vídeo següent. Espero que hagueu entès el projecte i us hagi agradat fer-lo. Si teniu algun problema per fer funcionar les coses, publiqueu la vostra pregunta a la secció de comentaris o als nostres fòrums i estaré encantat d’ajudar-vos.
