- Απαιτούμενα υλικά:
- Ενότητα GSM:
- Επικοινωνία με τη μονάδα GSM χρησιμοποιώντας εντολές AT:
- Διάγραμμα κυκλώματος:
- Προγραμματισμός του μικροελεγκτή PIC:
- Προσομοίωση:
- Πραγματοποίηση και λήψη κλήσεων με χρήση GSM και PIC:
Οι ενότητες GSM είναι συναρπαστικές στη χρήση, ειδικά όταν το έργο μας απαιτεί απομακρυσμένη πρόσβαση. Αυτές οι λειτουργικές μονάδες θα μπορούσαν να κάνουν όλες τις ενέργειες που θα μπορούσε να κάνει το κανονικό κινητό μας τηλέφωνο, όπως πραγματοποίηση / λήψη κλήσης, αποστολή / λήψη SMS, σύνδεση στο Διαδίκτυο με χρήση GPRS κ.λπ. Μπορείτε επίσης να συνδέσετε ένα κανονικό μικρόφωνο και ηχείο σε αυτήν την ενότητα και να συνομιλείτε στο κινητές κλήσεις. Αυτό θα ανοίξει πόρτες σε πολλά δημιουργικά έργα, εάν μπορούσε να συνδεθεί με έναν Μικροελεγκτή. Ως εκ τούτου, σε αυτό το σεμινάριο θα μάθουμε πώς μπορούμε να διασυνδέσουμε τη μονάδα GSM (SIM900A) με τον μικροελεγκτή PIC και θα την αποδείξουμε κάνοντας και λαμβάνοντας κλήση χρησιμοποιώντας το GSM Module. Το είχαμε προηγουμένως διασυνδέσει με το Arduino και το Raspberry Pi για κλήσεις και ανταλλαγή μηνυμάτων:
- Κλήση και μήνυμα χρησιμοποιώντας το Arduino και το GSM Module
- Κλήση και κείμενο χρησιμοποιώντας Raspberry Pi και GSM Module
Απαιτούμενα υλικά:
- Μικροελεγκτής PIC (PIC16F877A)
- Μονάδα GSM (SIM900 ή οποιαδήποτε άλλη)
- Σύνδεση καλωδίων
- Προσαρμογέας 12V
- PicKit 3
Ενότητα GSM:
Η μονάδα GSM μπορεί να χρησιμοποιηθεί ακόμα και χωρίς μικροελεγκτή χρησιμοποιώντας τη λειτουργία εντολών AT. Όπως φαίνεται παραπάνω, η μονάδα GSM συνοδεύεται από έναν προσαρμογέα USART που μπορεί να συνδεθεί απευθείας στον υπολογιστή χρησιμοποιώντας μια μονάδα MAX232 ή οι ακίδες Tx και Rx μπορούν να χρησιμοποιηθούν για τη σύνδεσή της σε έναν μικροελεγκτή. Μπορείτε επίσης να παρατηρήσετε τις άλλες ακίδες όπως MIC +, MIC-, SP +, SP- κλπ όπου μπορεί να συνδεθεί ένα μικρόφωνο ή ένα ηχείο. Η μονάδα μπορεί να τροφοδοτηθεί από έναν προσαρμογέα 12V μέσω ενός κανονικού γρύλου βαρελιού DC.
Τοποθετήστε την κάρτα SIM στην υποδοχή της μονάδας και ενεργοποιήστε την, θα πρέπει να παρατηρήσετε ότι ανάβει ένα LED τροφοδοσίας. Τώρα περιμένετε ένα λεπτό περίπου και θα πρέπει να βλέπετε μια κόκκινη (ή οποιοδήποτε άλλο χρώμα) LED να αναβοσβήνει μία φορά για κάθε 3 δευτερόλεπτα. Αυτό σημαίνει ότι η Μονάδα σας μπόρεσε να δημιουργήσει σύνδεση με την κάρτα SIM. Τώρα μπορείτε να συνεχίσετε τη σύνδεση της μονάδας σας με τηλέφωνο ή οποιονδήποτε μικροελεγκτή.
Επικοινωνία με τη μονάδα GSM χρησιμοποιώντας εντολές AT:
Όπως ίσως το μαντέψατε, η μονάδα GSM μπορεί να επικοινωνήσει μέσω της σειριακής επικοινωνίας και θα μπορούσε να καταλάβει μόνο μία γλώσσα και αυτή είναι « εντολές AT ». Ό, τι κι αν θέλετε να πείτε ή να ρωτήσετε στη μονάδα GSM θα πρέπει να γίνεται μόνο μέσω εντολών AT. Για παράδειγμα, εάν θέλετε να μάθετε εάν η ενότητα σας είναι ενεργή. Θα πρέπει να ρωτήσετε (στείλετε) μια εντολή όπως "AT" και η ενότητα σας θα απαντήσει "OK".
Αυτές οι εντολές AT εξηγούνται καλά στο φύλλο δεδομένων και μπορούν να βρεθούν εδώ στο επίσημο δελτίο δεδομένων. Εντάξει! Εντάξει! Πρόκειται για ένα φύλλο δεδομένων 271 σελίδων και μπορεί να χρειαστούν ημέρες για να τα διαβάσετε. Γι 'αυτό έχω δώσει μερικές πιο σημαντικές εντολές AT για να ξεκινήσετε και να ξεκινήσετε σύντομα.
ΣΤΟ |
Απαντήσεις με ΟΚ για αναγνώριση |
AT + CPIN; |
Ελέγξτε την ποιότητα σήματος |
AT + COPS; |
Βρείτε το όνομα του φορέα παροχής υπηρεσιών |
ATD96XXXXXXXX; |
Κλήση στον συγκεκριμένο αριθμό, τελειώνει με τελεία άνω και κάτω τελείας |
AT + CNUM |
Βρείτε τον αριθμό της κάρτας SIM (ενδέχεται να μην λειτουργεί για κάποια κάρτα SIM) |
ΑΤΑ |
Απαντήστε στην εισερχόμενη κλήση |
ΑΘ |
Κλείστε την τρέχουσα εισερχόμενη κλήση |
AT + COLP |
Εμφάνιση αριθμού εισερχόμενης κλήσης |
AT + VTS = (αριθμός) |
Αποστολή αριθμού DTMF. Μπορείτε να χρησιμοποιήσετε οποιονδήποτε αριθμό στο πληκτρολόγιο του κινητού σας για (αριθμός) |
AT + CMGR |
Το AT + CMGR = 1 διαβάζει το μήνυμα στην πρώτη θέση |
AT + CMGD = 1 |
Διαγραφή μηνύματος στην πρώτη θέση |
AT + CMGDA = "DEL ALL" |
Διαγραφή όλων των μηνυμάτων από την κάρτα SIM |
AT + CMGL = "ΟΛΑ" |
Διαβάστε όλα τα μηνύματα από τη SIM |
AT + CMGF = 1 |
Ορισμός διαμόρφωσης SMS. Το "1" προορίζεται για λειτουργία μόνο κειμένου |
AT + CMGS = "+91 968837XXXX" > Κείμενο CircuitDigest
|
Στέλνει SMS σε έναν συγκεκριμένο αριθμό εδώ 968837XXXX. Όταν δείτε το ">" αρχίστε να εισάγετε το κείμενο. Πατήστε Ctrl + Z για να στείλετε το κείμενο. |
AT + CGATT; |
Για να ελέγξετε για σύνδεση στο Διαδίκτυο στην κάρτα SIM |
AT + CIPSHUT |
Για να κλείσετε τη σύνδεση TCP, που σημαίνει αποσύνδεση φόρμας διαδικτύου |
AT + CSTT = "APN", "όνομα χρήστη", "Pass" |
Συνδεθείτε στο GPRS με το κλειδί APN και Pass. Μπορεί να ληφθεί από τον Πάροχο δικτύου. |
AT + CIICR |
Ελέγξτε εάν η κάρτα SIM διαθέτει πακέτο δεδομένων |
AT + CIFSR |
Λήψη IP του δικτύου SIM |
AT + CIPSTART = "TCP", "SERVER IP", "PORT" |
Χρησιμοποιείται για τη ρύθμιση σύνδεσης TCP IP |
AT + CIPSEND |
Αυτή η εντολή χρησιμοποιείται για την αποστολή δεδομένων στο διακομιστή |
Διάγραμμα κυκλώματος:
Το διάγραμμα σύνδεσης για την ενότητα Interfacing GSM με μικροελεγκτή PIC φαίνεται παρακάτω.
Απλώς διασυνδέσαμε τους ακροδέκτες Tx και Rx της μονάδας GSM με τους ακροδέκτες Rx και Tx του PIC MCU PIC16F877A αντίστοιχα. Αυτό θα δημιουργήσει μια σειριακή σύνδεση μεταξύ των δύο. Επίσης, μην ξεχάσετε να κάνετε κοινή χρήση τόσο της μονάδας GSM όσο και του PIC. Χρησιμοποιήσαμε επίσης μια οθόνη LCD για να γνωρίζουμε την κατάσταση της μονάδας GSM. Μόλις ολοκληρωθούν οι συνδέσεις, το υλικό σας θα μοιάζει με κάτι παρακάτω.
Ο πίνακας PIC Perf δημιουργήθηκε για τη σειρά μαθημάτων PIC, στην οποία μάθαμε πώς να χρησιμοποιούμε τον μικροελεγκτή PIC. Ίσως θελήσετε να επιστρέψετε σε αυτά τα μαθήματα PIC Microcontroller χρησιμοποιώντας MPLABX και XC8 εάν δεν ξέρετε πώς να κάψετε ένα πρόγραμμα χρησιμοποιώντας το Pickit 3, καθώς θα παραλείψω όλες αυτές τις βασικές πληροφορίες.
Προγραμματισμός του μικροελεγκτή PIC:
Το πλήρες πρόγραμμα για αυτό το έργο βρίσκεται στο κάτω μέρος αυτού του σεμιναρίου. Εδώ θα εξηγήσω ορισμένες σημαντικές λειτουργίες και κομμάτια κώδικα. Αυτό το πρόγραμμα διαθέτει επίσης κωδικούς LCD που προέρχονταν από Interfacing LCD με PIC Microcontroller, μπορείτε να επισκεφτείτε αυτό το σεμινάριο εάν θέλετε να μάθετε πώς μπορεί να χρησιμοποιηθεί η LCD με PIC microcontroller.
Όπως ειπώθηκε νωρίτερα, πρόκειται να επικοινωνήσουμε μεταξύ PIC και GSM χρησιμοποιώντας εντολές AT μέσω του σειριακού τρόπου επικοινωνίας. Επομένως, πρώτα πρέπει να αρχικοποιήσουμε την ενότητα επικοινωνίας USART στον μικροελεγκτή PIC χρησιμοποιώντας το Initialize _SIM900 (); λειτουργία. Μέσα σε αυτήν τη λειτουργία δηλώνουμε τους ακροδέκτες Tx και RX και προετοιμάζουμε την ασύγχρονη λήψη και μετάδοση με ρυθμό 9600 baud και λειτουργία 8-bit.
// *** Αρχικοποίηση UART για SIM900 ** // άκυρο Initialize_SIM900 (άκυρο) {// **** Ρύθμιση ακίδων I / O για UART **** // TRISC6 = 0; // TX Pin ορίστηκε ως έξοδος TRISC7 = 1; // RX Pin set as input // ________ I / O pin pin __________ // / ** Αρχικοποιήστε το SPBRG register για τον απαιτούμενο ρυθμό baud και ορίστε BRGH για γρήγορο baud_rate ** / SPBRG = 129; // Το SIM900 λειτουργεί με ρυθμό Baud 9600, έτσι 129 BRGH = 1; // for high baud_rate // _________ End of baud_rate setting _________ // // **** Ενεργοποίηση ασύγχρονης σειριακής θύρας ******* // SYNC = 0; // Ασύγχρονο SPEN = 1; // Ενεργοποίηση ακίδων σειριακής θύρας // _____ ενεργοποιημένη ασύγχρονη σειριακή θύρα _______ // // ** Ας προετοιμαστούμε για μετάδοση και λήψη ** // TXEN = 1; // ενεργοποίηση μετάδοσης CREN = 1; // Ενεργοποίηση λήψης // __ Μονάδα UART επάνω και έτοιμη για μετάδοση και λήψη __ // // ** Επιλέξτε λειτουργία 8-bit ** // TX9 = 0; // Επιλεγμένη λήψη 8 bit RX9 = 0;// Επιλογή λειτουργίας λήψης 8-bit // __ επιλεγμένη λειτουργία 8-bit __ //} // ________ ενότητα UART Αρχικοποιήθηκε __________ //
Τώρα πρέπει να διαβάσουμε και να γράψουμε πληροφορίες από / προς την ενότητα GSM. Για αυτό χρησιμοποιούμε τις συναρτήσεις _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Αυτές οι λειτουργίες χρησιμοποιούν το Transmit και λαμβάνουν buffer register όπως TXREG και RCREG για ανάγνωση ή εγγραφή σειριακών δεδομένων.
// ** Λειτουργία αποστολής ενός byte ημερομηνίας στο UART ** // void _SIM900_putch (char bt) {while (! TXIF); // κρατήστε πατημένο το πρόγραμμα έως ότου το TX buffer είναι δωρεάν TXREG = bt; // Φορτώστε το buffer πομπού με τη ληφθείσα τιμή} // _____________ Λήξη της λειτουργίας ________________ // // ** Λειτουργία για λήψη ενός byte ημερομηνίας από UART ** // char _SIM900_getch () {if (OERR) // έλεγχος για σφάλμα { CREN = 0; // Εάν υπάρχει σφάλμα -> Επαναφορά CREN = 1; // Εάν υπάρχει σφάλμα -> Επαναφορά} ενώ (! RCIF); // κρατήστε το πρόγραμμα έως ότου το buffer RX είναι δωρεάν RCREG επιστροφής. // λάβετε την τιμή και στείλτε την στην κύρια συνάρτηση} // _____________ Λήξη της συνάρτησης είναι char_SIM900_putch (* st_pt ++);// επεξεργαστείτε το ως δεδομένα byte} // ___________ Τέλος λειτουργίας ______________ // // ** Τέλος τροποποιημένων κωδικών ** // void _SIM900_print (unsigned const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Οι παραπάνω λειτουργίες είναι καθολικές και δεν χρειάζεται να αλλάξουν για καμία εφαρμογή. Εξηγήθηκαν μόνο για να δώσουν μια τραχιά εισαγωγή. Μπορείτε να βάλετε βαθιά σε αυτά αν θέλετε μέσω κατανόησης.
Τώρα μέσα στην κύρια λειτουργία μας, αρχικοποιούμε τη σύνδεση USART και ελέγχουμε εάν είμαστε σε θέση να λάβουμε ένα "ΟΚ" όταν στέλνουμε "AT" χρησιμοποιώντας την παρακάτω γραμμή κώδικα
κάντε {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Η ενότητα δεν βρέθηκε"); } ενώ (! SIM900_isStarted ()); // περιμένετε μέχρι το GSM να στείλει πίσω "OK" Lcd_Print_String ("Εντοπίστηκε μονάδα"); __delay_ms (1500);
Η συνάρτηση SIM900_isStarted (); θα στείλει το "AT" στο GSM και περιμένει απάντηση "OK" από αυτό. Εάν ναι, θα επιστρέψει 1 άλλο 0;
Εάν η μονάδα δεν εντοπιστεί ή εάν υπάρχει κάποιο πρόβλημα σύνδεσης, τότε η οθόνη LCD θα εμφανίσει "Η μονάδα δεν βρέθηκε", αλλιώς θα δείξει ότι η Ενότητα εντοπίστηκε και προχωρήστε στο επόμενο βήμα όπου, ελέγξουμε αν η κάρτα SIM μπορεί να ανιχνευθεί από τα παρακάτω γραμμή κώδικα.
/ * Ελέγξτε εάν εντοπίστηκε η κάρτα SIM * / κάντε το {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Η κάρτα SIM δεν βρέθηκε"); } ενώ (! SIM900_isReady ()); // περιμένετε μέχρι το GSM να στείλει πίσω "+ CPIN: READY" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Εντοπίστηκε SIM"); __delay_ms (1500);
Η συνάρτηση SIM900_isReady () θα στείλει "AT + CPIN;" στο GSM και περιμένει την απάντηση "+ CPIN: READY" από αυτό. Εάν ναι, θα επιστρέψει 1 άλλο 0;
Εάν βρεθεί μια κάρτα SIM, θα εντοπιστεί η κάρτα SIM στην οθόνη LCD. Στη συνέχεια, μπορούμε να δοκιμάσουμε να πραγματοποιήσουμε μια κλήση χρησιμοποιώντας την εντολή " ATD mobilenumber . ". Εδώ ως παράδειγμα έχω χρησιμοποιήσει τον αριθμό μου ως ATD93643159XX;. Πρέπει να αντικαταστήσετε τον αντίστοιχο αριθμό κινητού σας εκεί.
/ * Πραγματοποιήστε μια τηλεφωνική κλήση * / κάντε το {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Εδώ πραγματοποιούμε μια κλήση στον αριθμό 93643XXXXX Lcd_Set_Cursor (1,1). Lcd_Print_String ("Πραγματοποίηση κλήσης…."); } ενώ (_SIM900_waitResponse ()! = SIM900_OK); // περιμένετε μέχρι να στείλετε ξανά το ESP "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("Η κλήση πραγματοποιήθηκε…."); __delay_ms (1500);
Μόλις πραγματοποιηθεί η κλήση, η οθόνη LCD θα εμφανίσει την κλήση και θα λάβετε μια εισερχόμενη κλήση στον συγκεκριμένο αριθμό.
Μπορείτε επίσης να καλέσετε τον αριθμό κινητού που είναι συνδεδεμένος στη μονάδα GSM και να ενημερωθείτε σχετικά με αυτήν στην οθόνη LCD σας χρησιμοποιώντας τον παρακάτω κωδικό
ενώ (1) {if (_SIM900_waitResponse () == SIM900_RING) // Ελέγξτε εάν υπάρχει εισερχόμενη κλήση {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Εισερχόμενη κλήση !!."); }}
Όταν η μονάδα GSM ανιχνεύει μια εισερχόμενη κλήση, θα εμφανίζει Εισερχόμενη κλήση στη δεύτερη γραμμή της μονάδας LCD. Η συνάρτηση _SIM900_waitResponse () θα ελέγξει για εισερχόμενα δεδομένα από τη μονάδα GSM. Όταν λαμβάνει SIM900_RING, το οποίο ισοδυναμεί με "RING" λόγω του waitResponce () , θα εμφανιστεί η κατάσταση "Εισερχόμενη κλήση".
Μπορείτε να δημιουργήσετε τις δικές σας λειτουργίες όπως αυτό για να εκτελέσετε σχεδόν όλους τους τύπους ενεργοποιήσεων χρησιμοποιώντας τη μονάδα GSM. Εάν θέλετε να έχετε πράγματα με κωδικό, μπορείτε απλά να χρησιμοποιήσετε τη συνάρτηση __SIM900_print () για να στείλετε οποιαδήποτε εντολή AT όπως αυτή παρακάτω.
_SIM900_print ("AT + CPIN? \ R \ n");
Να θυμάστε ότι το μόνο που έχετε εντολή πρέπει να ακολουθείται με το \ \ r \ n "για να υποδείξετε ότι η εντολή τερματίζει
Προσομοίωση:
Μόλις καταλάβετε πώς λειτουργεί το πρόγραμμα, μπορείτε να δοκιμάσετε την προσομοίωση και να κάνετε αλλαγές που να ταιριάζουν στις ανάγκες σας. Η προσομοίωση θα σας εξοικονομήσει πολύ χρόνο. Η προσομοίωση γίνεται χρησιμοποιώντας το Proteus και μοιάζει παρακάτω.
Όπως μπορείτε να δείτε, χρησιμοποιήσαμε την επιλογή εικονικού τερματικού στο Proteus για να ελέγξουμε εάν το Πρόγραμμα ανταποκρίνεται όπως αναμενόταν. Μπορούμε να τροφοδοτήσουμε τις τιμές μέσω του αναδυόμενου παραθύρου διαλόγου. Για παράδειγμα, μόλις χτυπήσουμε το τρέξιμο, θα εμφανιστεί ένα μαύρο παράθυρο διαλόγου όπως παραπάνω και θα εμφανιστεί το AT, αυτό σημαίνει ότι έχει στείλει τη μονάδα GSM AT, τώρα μπορούμε να απαντήσουμε στο PIC πληκτρολογώντας στο πλαίσιο ως "OK" και πατήστε enter και το PIC θα ανταποκριθεί σε αυτό. Ομοίως μπορούμε να δοκιμάσουμε όλες τις εντολές AT.
Πραγματοποίηση και λήψη κλήσεων με χρήση GSM και PIC:
Μόλις καταλάβετε πώς λειτουργεί ο κώδικας και το υλικό, απλώς ανεβάστε το παρακάτω πρόγραμμα στο PIC και ενεργοποιήστε τη μονάδα. Η οθόνη LCD θα πρέπει να εμφανίζει "Εντοπίστηκε μονάδα", "Εντοπίστηκε SIM" και "Κλήση τοποθετημένο" εάν όλα λειτουργούν καλά. Μόλις δείτε "Κλήση" θα λάβετε μια εισερχόμενη κλήση στον αριθμό που καθορίζεται στο πρόγραμμα.
Μπορείτε επίσης να δοκιμάσετε να καλέσετε στον αριθμό που υπάρχει στη μονάδα GSM και η οθόνη LCD σας θα εμφανίσει "Εισερχόμενη κλήση" για να υποδείξει ότι καλείται η SIM.
Η πλήρης εργασία του έργου φαίνεται στο παρακάτω βίντεο. Ελπίζω να καταλάβατε το έργο και να το απολαύσατε Αν έχετε κάποιο πρόβλημα να δουλέψετε, δημοσιεύστε την ερώτησή σας στην ενότητα σχολίων ή στα φόρουμ μας και θα χαρώ να σας βοηθήσω.