- Erforderliche Materialien:
- GSM-Modul:
- Kommunikation mit dem GSM-Modul über AT-Befehle:
- Schaltplan:
- Programmierung Ihres PIC-Mikrocontrollers:
- Simulation:
- Telefonieren und Empfangen mit GSM und PIC:
Die Verwendung von GSM-Modulen ist besonders dann faszinierend, wenn für unser Projekt ein Fernzugriff erforderlich ist. Diese Module können alle Aktionen ausführen, die unser normales Mobiltelefon ausführen kann, z. B. Tätigen / Empfangen eines Anrufs, Senden / Empfangen einer SMS, Herstellen einer Internetverbindung über GPRS usw. Sie können auch ein normales Mikrofon und einen Lautsprecher an dieses Modul anschließen und sich auf Ihrem Modul unterhalten Mobiltelefongespräche. Dies öffnet Türen für viele kreative Projekte, wenn es mit einem Mikrocontroller verbunden werden könnte. Daher lernen wir in diesem Tutorial, wie wir das GSM-Modul (SIM900A) mit unserem PIC-Mikrocontroller verbinden können, und demonstrieren dies, indem wir mit dem GSM-Modul Anrufe tätigen und empfangen. Wir haben es zuvor mit Arduino und Raspberry Pi für Anrufe und Nachrichten verbunden:
- Anruf und Nachricht mit Arduino und GSM-Modul
- Anruf und Text mit Raspberry Pi und GSM-Modul
Erforderliche Materialien:
- PIC-Mikrocontroller (PIC16F877A)
- GSM-Modul (SIM900 oder ein anderes)
- Kabel anschließen
- 12V Adapter
- PicKit 3
GSM-Modul:
Das GSM-Modul kann auch ohne Mikrocontroller im AT-Befehlsmodus verwendet werden. Wie oben gezeigt, wird das GSM-Modul mit einem USART-Adapter geliefert, der über ein MAX232-Modul direkt an den Computer angeschlossen werden kann, oder die Tx- und Rx-Pins können verwendet werden, um ihn an einen Mikrocontroller anzuschließen. Sie können auch die anderen Pins wie MIC +, MIC-, SP +, SP- usw. bemerken, an denen ein Mikrofon oder ein Lautsprecher angeschlossen werden kann. Das Modul kann von einem 12-V-Adapter über eine normale DC-Barrel-Buchse mit Strom versorgt werden.
Legen Sie Ihre SIM-Karte in den Steckplatz des Moduls ein und schalten Sie sie ein. Sie sollten feststellen, dass eine Betriebs-LED leuchtet. Warten Sie nun etwa eine Minute, und alle 3 Sekunden sollte eine rote (oder eine andere Farbe) LED einmal blinken. Dies bedeutet, dass Ihr Modul eine Verbindung mit Ihrer SIM-Karte herstellen konnte. Jetzt können Sie Ihr Modul mit dem Telefon oder einem beliebigen Mikrocontroller verbinden.
Kommunikation mit dem GSM-Modul über AT-Befehle:
Wie Sie vielleicht erraten haben, kann das GSM-Modul über serielle Kommunikation kommunizieren und nur eine Sprache verstehen, nämlich „ AT-Befehle “. Was auch immer Sie dem GSM-Modul mitteilen oder fragen möchten, es sollte nur über AT-Befehle erfolgen. Zum Beispiel, wenn Sie wissen möchten, ob Ihr Modul aktiv ist. Sie sollten einen Befehl wie "AT" fragen (senden) und Ihr Modul antwortet "OK".
Diese AT-Befehle werden im Datenblatt ausführlich erläutert und finden Sie hier im offiziellen Datenblatt. Okay! Okay! Es handelt sich um ein 271-seitiges Datenblatt, und es kann Tage dauern, bis Sie es gelesen haben. Daher habe ich nachfolgend einige der wichtigsten AT-Befehle angegeben, damit Sie diese bald zum Laufen bringen können.
BEIM |
Antwortet mit OK zur Bestätigung |
AT + CPIN? |
Überprüfen Sie die Signalqualität |
AT + COPS? |
Suchen Sie den Namen des Dienstanbieters |
ATD96XXXXXXXX; |
Anruf an die spezifische Nummer, endet mit Semikolon |
AT + CNUM |
Suchen Sie die Nummer der SIM-Karte (funktioniert bei einigen SIM-Karten möglicherweise nicht) |
AN EINER |
Beantworten Sie den eingehenden Anruf |
ATH |
Hängen Sie den aktuellen eingehenden Anruf ab |
AT + COLP |
Eingehende Rufnummer anzeigen |
AT + VTS = (Nummer) |
DTMF-Nummer senden. Sie können eine beliebige Nummer auf Ihrer mobilen Tastatur für (Nummer) verwenden. |
AT + CMGR |
AT + CMGR = 1 liest die Nachricht an der ersten Position |
AT + CMGD = 1 |
Nachricht an erster Stelle löschen |
AT + CMGDA = "ALLE LÖSCHEN" |
Alle Nachrichten von der SIM löschen |
AT + CMGL = "ALL" |
Lesen Sie alle Nachrichten von der SIM-Karte |
AT + CMGF = 1 |
SMS-Konfiguration einstellen. "1" ist nur für den Textmodus |
AT + CMGS = "+91 968837XXXX" > CircuitDigest-Text
|
Sendet hier eine SMS an eine bestimmte Nummer 968837XXXX. Wenn Sie ">" sehen, geben Sie den Text ein. Drücken Sie Strg + Z, um den Text zu senden. |
AT + CGATT? |
So überprüfen Sie die Internetverbindung auf der SIM-Karte |
AT + CIPSHUT |
So schließen Sie die TCP-Verbindung, dh trennen Sie die Verbindung zum Internet |
AT + CSTT = "APN", "Benutzername", "Pass" |
Stellen Sie mit Ihrem APN und Pass-Schlüssel eine Verbindung zu GPRS her. Erhältlich beim Netzwerkanbieter. |
AT + CIICR |
Überprüfen Sie, ob die SIM-Karte ein Datenpaket enthält |
AT + CIFSR |
Holen Sie sich die IP des SIM-Netzwerks |
AT + CIPSTART = "TCP", "SERVER IP", "PORT" |
Wird zum Einstellen einer TCP-IP-Verbindung verwendet |
AT + CIPSEND |
Dieser Befehl wird verwendet, um Daten an den Server zu senden |
Schaltplan:
Das Anschlussdiagramm für die Schnittstelle des GSM-Moduls mit dem PIC-Mikrocontroller ist unten dargestellt.
Wir haben einfach die Tx- und Rx-Pins des GSM-Moduls mit den Rx- und Tx-Pins der PIC-MCU PIC16F877A verbunden. Dadurch wird eine serielle Verbindung zwischen beiden hergestellt. Vergessen Sie also nicht, sowohl das GSM- als auch das PIC-Modul gemeinsam zu nutzen. Wir haben auch ein LCD-Display verwendet, um den Status unseres GSM-Moduls zu ermitteln. Sobald die Verbindungen hergestellt sind, sieht Ihre Hardware wie folgt aus.
Das PIC Perf Board wurde für unsere PIC Tutorial-Reihe entwickelt, in der wir den Umgang mit PIC-Mikrocontrollern gelernt haben. Wenn Sie nicht wissen, wie Sie ein Programm mit Pickit 3 brennen, können Sie zu diesen PIC Microcontroller-Tutorials mit MPLABX und XC8 zurückkehren, da ich all diese grundlegenden Informationen überspringen werde.
Programmierung Ihres PIC-Mikrocontrollers:
Das vollständige Programm für dieses Projekt finden Sie am Ende dieses Tutorials. Hier werde ich einige wichtige Funktionen und Codeteile erklären. Dieses Programm verfügt auch über LCD-Codes, die von Interfacing LCD with PIC Microcontroller stammen. Sie können dieses Tutorial besuchen, wenn Sie neugierig sind, wie LCD mit PIC Microcontroller verwendet werden kann.
Wie bereits erwähnt, werden wir mithilfe von AT-Befehlen über den seriellen Kommunikationsmodus zwischen PIC und GSM kommunizieren. Zuerst müssen wir das USART-Kommunikationsmodul in unserem PIC-Mikrocontroller mithilfe von Initialize _SIM900 () initialisieren . Funktion. Innerhalb dieser Funktion deklarieren wir die Tx- und RX-Pins und initialisieren den asynchronen Empfang und die asynchrone Übertragung mit einer Baudrate von 9600 und einem 8-Bit-Modus.
// *** UART für SIM900 initialisieren ** // void Initialize_SIM900 (void) {// **** Setzen von E / A-Pins für UART **** // TRISC6 = 0; // TX Pin als Ausgang gesetzt TRISC7 = 1; // RX-Pin als Eingang gesetzt // ________ E / A-Pins gesetzt __________ // / ** SPBRG-Register für erforderliche Baudrate initialisieren und BRGH für schnelle Baudrate setzen ** / SPBRG = 129; // SIM900 arbeitet mit einer Baudrate von 9600, also 129 BRGH = 1; // für hohe Baudrate // _________ Ende der Baudrate _________ // // **** Asynchrone serielle Schnittstelle aktivieren ******* // SYNC = 0; // Asynchrones SPEN = 1; // Serielle Port-Pins aktivieren // _____ Asynchrone serielle Schnittstelle aktiviert _______ // // ** Bereitet das Senden und Empfangen vor ** // TXEN = 1; // Übertragung aktivieren CREN = 1; // Empfang aktivieren // __ UART-Modul aktiv und bereit zum Senden und Empfangen __ // // ** 8-Bit-Modus auswählen ** // TX9 = 0; // 8-Bit-Empfang ausgewählt RX9 = 0;// 8-Bit-Empfangsmodus ausgewählt // __ 8-Bit-Modus ausgewählt __ //} // ________ UART-Modul initialisiert __________ //
Jetzt müssen wir Informationen von / zu unserem GSM-Modul lesen und schreiben. Hierzu verwenden wir die Funktionen _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Diese Funktionen verwenden das Sende- und Empfangspufferregister wie TXREG und RCREG, um Daten seriell zu lesen oder zu schreiben.
// ** Funktion zum Senden eines Datumsbytes an UART ** // void _SIM900_putch (char bt) {while (! TXIF); // halte das Programm, bis der TX-Puffer frei ist TXREG = bt; // Lade den Senderpuffer mit dem empfangenen Wert} // _____________ Funktionsende ________________ // // ** Funktion zum Abrufen eines Datumsbytes von UART ** // char _SIM900_getch () {if (OERR) // auf Fehler prüfen { CREN = 0; // Wenn Fehler -> CREN = 1 zurücksetzen; // Wenn Fehler -> Zurücksetzen} while (! RCIF); // halte das Programm, bis der Empfangspuffer frei ist return RCREG; // den Wert empfangen und an die Hauptfunktion senden} // _____________ Funktionsende ________________ // // ** Funktion zum Konvertieren eines Strings in ein Byte ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // falls vorhanden ist ein char _SIM900_putch (* st_pt ++);// verarbeite es als Byte-Daten} // ___________ Ende der Funktion ______________ // // ** Ende der geänderten Codes ** // void _SIM900_print (vorzeichenloses const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }}
Die oben genannten Funktionen sind universell und müssen für keine Anwendungen geändert werden. Sie wurden nur erklärt, um ein grobes Intro zu geben. Sie können tief in sie eintauchen, wenn Sie durch Verständnis wollen.
In unserer Hauptfunktion initialisieren wir nun die USART-Verbindung und prüfen mithilfe der folgenden Codezeile, ob wir beim Senden von "AT" ein "OK" erhalten können
do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modul nicht gefunden"); } while (! SIM900_isStarted ()); // warte bis das GSM "OK" zurücksendet Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modul erkannt"); __delay_ms (1500);
Die Funktion SIM900_isStarted (); sendet "AT" an das GSM und wartet auf die Antwort "OK". Wenn ja, wird 1 else 0 zurückgegeben.
Wenn das Modul nicht erkannt wird oder wenn ein Verbindungsproblem vorliegt, zeigt das LCD "Modul nicht gefunden" an, andernfalls wird "Modul erkannt" angezeigt. Fahren Sie mit dem nächsten Schritt fort, in dem wir prüfen, ob die SIM-Karte wie folgt erkannt werden kann Codezeile.
/ * Überprüfen Sie, ob die SIM-Karte erkannt wurde * / do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM nicht gefunden"); } while (! SIM900_isReady ()); // warte bis das GSM "+ CPIN: READY" zurücksendet Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM erkannt"); __delay_ms (1500);
Die Funktion SIM900_isReady () sendet "AT + CPIN?" an das GSM und wartet auf die Antwort "+ CPIN: READY". Wenn ja, wird 1 else 0 zurückgegeben.
Wenn eine SIM-Karte gefunden wird, wird die erkannte SIM-Karte auf dem LCD angezeigt. Anschließend können wir versuchen, einen Anruf mit dem Befehl „ ATD- Mobilnummer ; ”. Hier als Beispiel habe ich meine Nummer als ATD93643159XX; verwendet. Dort müssen Sie Ihre jeweilige Handynummer ersetzen.
/ * Anruf tätigen * / do {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Hier rufen wir die Nummer 93643XXXXX an. Lcd_Set_Cursor (1,1); Lcd_Print_String ("Anruf tätigen…."); } while (_SIM900_waitResponse ()! = SIM900_OK); // warte bis der ESP "OK" zurücksendet Lcd_Set_Cursor (1,1); Lcd_Print_String ("Call Placed…."); __delay_ms (1500);
Sobald der Anruf getätigt wurde, zeigt das LCD den Anruf an und Sie sollten einen eingehenden Anruf an diese angegebene Nummer erhalten.
Sie können auch die mit dem GSM-Modul verbundene Mobiltelefonnummer anrufen und sich mit dem folgenden Code auf Ihrem LCD-Bildschirm darüber informieren lassen
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Überprüfen Sie, ob ein Anruf eingeht {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Eingehender Anruf !!"); }}
Wenn das GSM-Modul einen eingehenden Anruf erkennt, wird eingehender Anruf in der zweiten Zeile des LCD-Moduls angezeigt. Die Funktion _SIM900_waitResponse () sucht nach eingehenden Daten vom GSM-Modul. Wenn SIM900_RING empfangen wird, was aufgrund von waitResponce () „RING“ entspricht, wird der Status „Eingehender Anruf“ angezeigt.
Sie können Ihre eigenen Funktionen wie diese erstellen, um fast alle Arten von Aktivierungen mit dem GSM-Modul durchzuführen. Wenn Sie die Dinge fest codieren möchten, können Sie einfach die Funktion __SIM900_print () verwenden, um einen AT-Befehl wie den folgenden zu senden.
_SIM900_print ("AT + CPIN? \ R \ n");
Denken Sie daran, dass auf alle Ihre Befehle "\ r \ n" folgen sollte, um anzuzeigen, dass der Befehl beendet wird.
Simulation:
Sobald Sie verstanden haben, wie das Programm funktioniert, können Sie versuchen, Änderungen an Ihren Anforderungen vorzunehmen. Durch die Simulation sparen Sie viel Zeit. Die Simulation wird mit Proteus durchgeführt und sieht wie folgt aus.
Wie Sie sehen, haben wir in Proteus die Option für ein virtuelles Terminal verwendet, um zu überprüfen, ob das Programm wie erwartet reagiert. Wir können die Werte über das Popup-Dialogfeld eingeben. Sobald wir beispielsweise auf "Ausführen" klicken, wird ein schwarzes Dialogfeld wie oben angezeigt, in dem AT angezeigt wird. Dies bedeutet, dass das GSM-Modul AT gesendet wurde. Jetzt können wir auf PIC antworten, indem wir das Feld "OK" eingeben und die Eingabetaste drücken und der PIC wird darauf antworten. Ebenso können wir für alle AT-Befehle versuchen.
Telefonieren und Empfangen mit GSM und PIC:
Wenn Sie verstanden haben, wie Code und Hardware funktionieren, laden Sie einfach das folgende Programm auf PIC hoch und schalten Sie das Modul ein. Ihr LCD sollte "Modul erkannt", "SIM erkannt" und "Anruf platziert" anzeigen, wenn alles einwandfrei funktioniert. Sobald Sie "Anruf getätigt" sehen, erhalten Sie einen eingehenden Anruf an die im Programm angegebene Nummer.
Sie können auch versuchen, die im GSM-Modul vorhandene Nummer anzurufen. Auf Ihrem LCD wird "Eingehender Anruf" angezeigt, um anzuzeigen, dass die SIM-Karte angerufen wird.
Die vollständige Arbeitsweise des Projekts ist im folgenden Video dargestellt. Ich hoffe, Sie haben das Projekt verstanden und es genossen. Wenn Sie Probleme haben, die Dinge zum Laufen zu bringen, posten Sie Ihre Frage im Kommentarbereich oder in unseren Foren. Ich helfe Ihnen gerne weiter.