Πίνακας περιεχομένων:

Σεμινάριο Arduino Cellular Shield: 9 βήματα (με εικόνες)
Σεμινάριο Arduino Cellular Shield: 9 βήματα (με εικόνες)

Βίντεο: Σεμινάριο Arduino Cellular Shield: 9 βήματα (με εικόνες)

Βίντεο: Σεμινάριο Arduino Cellular Shield: 9 βήματα (με εικόνες)
Βίντεο: Pro Micro ATMEGA32U4 Arduino Pins and 5V, 3.3V Explained 2024, Ιούλιος
Anonim
Σεμινάριο Arduino Cellular Shield
Σεμινάριο Arduino Cellular Shield

Το Arduino Cellular Shield σάς επιτρέπει να πραγματοποιείτε τηλεφωνικές κλήσεις και να στέλνετε μηνύματα κειμένου. Ο εγκέφαλος αυτής της ασπίδας είναι το SM5100B, το οποίο είναι μια ισχυρή κυψελοειδής μονάδα ικανή να εκτελέσει πολλές από τις εργασίες των περισσότερων τυπικών κινητών τηλεφώνων. Αυτή η ασπίδα απαιτεί τη χρήση κάρτας SIM για σύνδεση σε δίκτυο κινητής τηλεφωνίας. Το σεμινάριο που ακολουθεί είναι ένα σεμινάριο για την προετοιμασία της ασπίδας και την αποστολή και λήψη μηνυμάτων κειμένου και τηλεφωνικές κλήσεις. Για να μάθετε περισσότερα σχετικά με τη λειτουργικότητα της ενότητας, φροντίστε να δείτε τα φύλλα δεδομένων στη σελίδα προϊόντων του Sparkfun.

Βήμα 1: Πηγαίνετε για πράγματα

Πήγαινε να πάρεις πράγματα
Πήγαινε να πάρεις πράγματα

Θα χρειαστείτε:

(x1) Cellular shield (x1) Stackable Arduino headers (x1) Quad band antenna (x1) Arduino Uno

(Σημειώστε ότι ορισμένοι από τους συνδέσμους σε αυτήν τη σελίδα είναι σύνδεσμοι συνεργατών. Αυτό δεν αλλάζει το κόστος του προϊόντος για εσάς. Επενδύω ό, τι έσοδα λαμβάνω για την κατασκευή νέων έργων. Αν θέλετε προτάσεις για εναλλακτικούς προμηθευτές, παρακαλώ επιτρέψτε μου ξέρω.)

Βήμα 2: Κεφαλίδες συγκόλλησης

Κεφαλίδες συγκολλήσεων
Κεφαλίδες συγκολλήσεων
Κεφαλίδες συγκολλήσεων
Κεφαλίδες συγκολλήσεων
Κεφαλίδες συγκολλήσεων
Κεφαλίδες συγκολλήσεων

Τοποθετήστε τις κεφαλίδες στην ασπίδα και κολλήστε τις στη θέση τους.

Βήμα 3: Εισαγωγή

Εισάγετε
Εισάγετε
Εισάγετε
Εισάγετε

Τοποθετήστε τις καρφίτσες κεφαλίδας στις υποδοχές του Arduino.

Βήμα 4: Μεταπωλητής

Μεταπωλητής
Μεταπωλητής

Η σύνδεση του καλωδίου κεραίας με τη μονάδα SM5100B δεν είναι συνήθως πολύ καλή. Επανασυγκολλήστε κάθε σύνδεση του καλωδίου στη μονάδα για να διασφαλίσετε τη συνδεσιμότητα.

Βήμα 5: Συνδέστε την κεραία

Συνδέστε την κεραία
Συνδέστε την κεραία
Συνδέστε την κεραία
Συνδέστε την κεραία

Περάστε την κεραία στο καλώδιο της κεραίας.

Βήμα 6: Εισαγάγετε την κάρτα SIM

Εισαγωγή κάρτας SIM
Εισαγωγή κάρτας SIM
Εισαγωγή κάρτας SIM
Εισαγωγή κάρτας SIM
Εισαγωγή κάρτας SIM
Εισαγωγή κάρτας SIM
Εισαγωγή κάρτας SIM
Εισαγωγή κάρτας SIM

Τοποθετήστε την κάρτα SIM με ασφάλεια στην υποδοχή της κάρτας SIM.

Βήμα 7: Αρχικοποίηση

Αρχικοποίηση
Αρχικοποίηση

Εκτελέστε τον ακόλουθο κώδικα στο Arduino:

/*

SparkFun Cellular Shield - Pass -Through Sample Sketch SparkFun Electronics Γράφτηκε από τον Ryan Owens 3/Περιγραφή: Αυτό το σκίτσο είναι γραμμένο για τη διασύνδεση ενός Arduino Duemillanove σε ένα Cellular Shield από την SparkFun Electronics. Η κυψελοειδής ασπίδα μπορεί να αγοραστεί εδώ: https://www.sparkfun.com/commerce/product_info.php?products_id=9607 Σε αυτό το σκίτσο οι σειριακές εντολές περνούν από ένα τερματικό πρόγραμμα στην κυψελοειδή μονάδα SM5100B. και οι απαντήσεις από την κυψελοειδή μονάδα αναρτώνται στο τερματικό. Περισσότερες πληροφορίες υπάρχουν στα σκίτσα των σχολίων. Μια ενεργοποιημένη κάρτα SIM πρέπει να τοποθετηθεί στη θήκη της κάρτας SIM στον πίνακα για να χρησιμοποιήσετε τη συσκευή! Αυτό το σκίτσο χρησιμοποιεί τη βιβλιοθήκη NewSoftSerial που γράφτηκε από τον Mikal Hart της Arduiniana. Μπορείτε να κατεβάσετε τη βιβλιοθήκη σε αυτήν τη διεύθυνση URL: https://arduiniana.org/libraries/NewSoftSerial/ Αυτός ο κώδικας παρέχεται υπό την άδεια απόδοσης Creative Commons. Περισσότερες πληροφορίες μπορείτε να βρείτε εδώ: https://creativecommons.org/licenses/by/3.0/ (Χρησιμοποιήστε τον κωδικό μας ελεύθερα! Απλώς θυμηθείτε να μας δώσετε πίστωση όπου οφείλεται. Ευχαριστώ!) */#Include // Συμπεριλάβετε το NewSoftSerial βιβλιοθήκη για την αποστολή σειριακών εντολών στην κυψελοειδή μονάδα. #include // Χρησιμοποιείται για χειρισμούς συμβολοσειρών char incoming_char = 0; // Θα κρατήσει τον εισερχόμενο χαρακτήρα από τη σειριακή θύρα. SoftwareSerial cell (2, 3); // Δημιουργήστε μια «ψεύτικη» σειριακή θύρα. Ο πείρος 2 είναι ο πείρος Rx, ο ακροδέκτης 3 είναι ο πείρος Tx. void setup () {// Αρχικοποίηση σειριακών θυρών για επικοινωνία. Serial.begin (9600); cell.begin (9600); //Ας αρχίσουμε! Serial.println ("Έναρξη επικοινωνίας SM5100B …"); } void loop () {// Εάν ένας χαρακτήρας έρχεται από την κυψελοειδή μονάδα… if (cell.available ()> 0) {incoming_char = cell.read (); // Λάβετε τον χαρακτήρα από τη σειριακή θύρα κυψελοειδούς. Serial.print (incoming_char); // Εκτυπώστε τον εισερχόμενο χαρακτήρα στο τερματικό. } // Εάν ένας χαρακτήρας προέρχεται από το τερματικό στο Arduino… εάν (Serial.available ()> 0) {incoming_char = Serial.read (); // Λάβετε τον χαρακτήρα που προέρχεται από το τερματικό if (incoming_char == '~') // Εάν πρόκειται για μια tilde… incoming_char = 0x0D; //… μετατροπή σε επιστροφή μεταφοράς άλλου αν (incoming_char == '^') // Εάν πρόκειται για ένα up caret… incoming_char = 0x1A? //… μετατροπή σε ctrl-Z cell.print (incoming_char); // Αποστολή του χαρακτήρα στην κυψελοειδή μονάδα. Serial.print (incoming_char); // Επανάληψη στο τερματικό}} / * SM5100B Quck Reference for AT Command Set * Εκτός εάν σημειώνονται διαφορετικά οι εντολές AT τερματίζονται πατώντας το πλήκτρο "enter". 1.) Βεβαιωθείτε ότι η σωστή ζώνη GSM έχει επιλεγεί για τη χώρα σας. Για τις ΗΠΑ, η ζώνη πρέπει να ρυθμιστεί σε 7. Για να ορίσετε τη ζώνη, χρησιμοποιήστε αυτήν την εντολή: AT+SBAND = 7 2.) Αφού ενεργοποιήσετε το Arduino με εγκατεστημένη την ασπίδα, βεβαιωθείτε ότι η μονάδα διαβάζει και αναγνωρίζει την κάρτα SIM. Με ένα κεντρικό παράθυρο ανοιχτό και ρυθμισμένο στη θύρα Arduino και 9600 buad, ενεργοποιήστε το Arduino. Η ακολουθία εκκίνησης θα πρέπει να μοιάζει κάπως έτσι: Έναρξη επικοινωνίας SM5100B… +SIND: 1 +SIND: 10, "SM", 1, "FD", 1, "LD", 1, "MC", 1, "RC", 1, "ME", 1 Η επικοινωνία με τη μονάδα ξεκινά μετά την εμφάνιση της πρώτης γραμμής. Η δεύτερη γραμμή επικοινωνίας, +SIND: 10, μας λέει εάν η μονάδα μπορεί να δει μια κάρτα SIM. Εάν εντοπιστεί η κάρτα SIM, κάθε άλλο πεδίο είναι 1. εάν η κάρτα SIM δεν ανιχνευθεί, κάθε άλλο πεδίο είναι 0. 3.) Περιμένετε για σύνδεση δικτύου πριν ξεκινήσετε την αποστολή εντολών. Μετά την απόκριση +SIND: 10, η μονάδα θα ξεκινήσει αυτόματα να προσπαθεί να συνδεθεί σε ένα δίκτυο. Περιμένετε έως ότου λάβετε τις ακόλουθες επαναλήψεις: +SIND: 11 +SIND: 3 +SIND: 4 Η απάντηση +SIND από την κυψελοειδή μονάδα υποδεικνύει την κατάσταση των ενοτήτων. Ακολουθεί μια γρήγορη μείωση των εννοιών απόκρισης: 0 Αφαιρέθηκε κάρτα SIM 1 Εισήχθη κάρτα SIM 2 Μελωδία κλήσης 3 Η μονάδα AT είναι εν μέρει έτοιμη διατίθεται για κλήση έκτακτης ανάγκης 8 Το δίκτυο έχει χαθεί 9 ioχος ΕΝΕΡΓΟΠΟΙΗΣΗ 10 Εμφάνιση της κατάστασης κάθε τηλεφωνικού καταλόγου μετά τη φράση έναρξης 11 Εγγραφή στο δίκτυο Αφού εγγραφείτε στο δίκτυο, μπορείτε να ξεκινήσετε την αλληλεπίδραση. Ακολουθούν μερικές απλές και χρήσιμες εντολές για να ξεκινήσετε: Για να πραγματοποιήσετε μια κλήση: AT εντολή-ATDxxxyyyzzzz Αριθμός τηλεφώνου με τη μορφή: (xxx) yyy-zzz try ---- cell.print ("ATDxxxyyyzzzz"); Εάν πραγματοποιείτε μια τηλεφωνική κλήση, φροντίστε να αναφέρετε το φύλλο δεδομένων των συσκευών για να συνδέσετε ένα μικρόφωνο και ηχείο στην ασπίδα. Για να στείλετε ένα μήνυμα txt: εντολή AT - AT+CMGF = 1 Αυτή η εντολή ορίζει τη λειτουργία μηνύματος κειμένου σε "κείμενο". AT command = AT+CMGS = "xxxyyyzzzz" (επιστροφή μεταφοράς) 'Text to send' (CTRL+Z) Αυτή η εντολή είναι λίγο συγκεχυμένη για περιγραφή. Ο αριθμός τηλεφώνου, σε μορφή (xxx) yyy-zzzz μπαίνει σε διπλές τιμές. Πατήστε 'enter' αφού κλείσετε τις προσφορές. Στη συνέχεια, εισάγετε το κείμενο προς αποστολή. Τερματίστε την εντολή AT στέλνοντας CTRL+Z. Αυτός ο χαρακτήρας δεν μπορεί να σταλεί από το τερματικό του Arduino. Χρησιμοποιήστε ένα εναλλακτικό πρόγραμμα τερματικού όπως Hyperterminal, Tera Term, Bray Terminal ή X-CTU. Η μονάδα SM5100B μπορεί να κάνει πολύ περισσότερα από αυτό! Ελέγξτε τα φύλλα δεδομένων στη σελίδα του προϊόντος για να μάθετε περισσότερα σχετικά με τη μονάδα.*/Ανοίξτε τη σειριακή θύρα στο τερματικό. Σε Mac αυτό επιτυγχάνεται πληκτρολογώντας: screen /dev/tty.usbmodemfa131 9600 (αντικαταστήστε το tty.usbmodemfa131 με τη σειριακή διεύθυνση του Arduino) Περιμένετε να εμφανιστεί η ακόλουθη ακολουθία: Έναρξη επικοινωνίας SM5100B… +SIND: 3 +SIND: 4 +SIND: 11 (Εάν αυτή η ακολουθία δεν επιστραφεί, ελέγξτε τους κωδικούς σφάλματος που αναφέρονται στο κάτω μέρος του παραπάνω κώδικα και κάντε τον κατάλληλο εντοπισμό σφαλμάτων. Mayσως χρειαστεί να ορίσετε τη μονάδα για χρήση στη Βόρεια Αμερική - δείτε παρακάτω - προτού εγγραφεί στο δίκτυο (δηλ. +SIND 11)) Στείλτε τις ακόλουθες εντολές στη σειριακή θύρα: Στείλτε το για χρήση στη Βόρεια Αμερική: AT+SBAND = 7 Ρυθμίστε την τρέχουσα ώρα - εε/mm/dd: AT+CCLK = "13/05/15, 11: 02:00 "Αποστολή δοκιμαστικής κλήσης: ATD4155551212

Βήμα 8: Μηνύματα κειμένου

Μηνύματα κειμένου
Μηνύματα κειμένου

Κατεβάστε και εγκαταστήστε το SerialGSM στη βιβλιοθήκη σας Arduino.

Για να στείλετε ένα μήνυμα κειμένου επισκεφτείτε το σεμινάριο κυψελοειδούς μονάδας Tronixstuff και χρησιμοποιήστε τον κωδικό παραδείγματος 26.3:

Εάν θέλετε να εκτελέσετε τον παράδειγμα κώδικα για να λάβετε ένα κείμενο, συνδέστε ένα LED στο pin 8 και τοποθετήστε το σε σειρά με αντίσταση 220 ohm στη γείωση.

Για να στείλετε ένα μήνυμα κειμένου επισκεφτείτε το σεμινάριο κυψελοειδούς μονάδας Tronixstuff και χρησιμοποιήστε τον κωδικό παραδείγματος 26.5:

Στείλτε μία από τις ακόλουθες εντολές στην κυψελοειδή μονάδα σας:

// ανάβει το LED #a1

// απενεργοποιεί το LED #a0

Βήμα 9: Φωνή

Φωνή
Φωνή
Φωνή
Φωνή
Φωνή
Φωνή

Συνδέστε ένα μικρόφωνο και ένα ηχείο στην ασπίδα χρησιμοποιώντας γειωμένο καλώδιο ήχου. Το κεντρικό καλώδιο σήματος πρέπει να πηγαίνει στους ακροδέκτες ήχου συν και η θωράκιση πρέπει να πηγαίνει στους αντίστοιχους αρνητικούς ακροδέκτες της ασπίδας. Αυτά τα καλώδια θα πρέπει να συνδέονται παρόμοια στην πλευρά του μικροφώνου και του ηχείου.

Για να ξεκινήσετε μια φωνητική κλήση, ανεβάστε τον ακόλουθο κώδικα:

//**********************************************************************************

// ΚΑΝΤΕ ΚΛΗΣΗ // // ΚΩΔΙΚΟΣ ΜΠΟΥΦΕΡ ΒΑΣΕΙΣ: // // //********************************************************************************** #include #define BUFFSIZ 90 //Set up buffer array char at_buffer[BUFFSIZ]; char buffidx; //Network state variables int network_registered; int network_AT_ready; //Code state variables int firstTimeInLoop = 1; int firstTimeInOtherLoop = 1; int x; //Will hold the incoming character from the Serial Port. char incoming_char=0; //Create a 'fake' serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin. SoftwareSerial cell(2, 3); void setup() { //Initialize Arduino serial port for debugging. Serial.begin(9600); //Initialize virtual serial port to talk to Phone. cell.begin(9600); //Hello World. Serial.println("Starting SM5100B Communication…"); delay(1000); //Set initial network state network_registered = 0; network_AT_ready = 0; } //Read AT strings from the cellular shield void readATString(void) { char c; buffidx= 0; // start at begninning for (x = 0; x 0) { c=cell.read(); if (c == -1) { at_buffer[buffidx] = '\0'; return; } if (c == '\n') { continue; } if ((buffidx == BUFFSIZ - 1) || (c == '\r')){ at_buffer[buffidx] = '\0'; return; } at_buffer[buffidx++]= c; } } } //Process the AT strings void ProcessATString() { if(strstr(at_buffer, "+SIND: 8") != 0) { network_registered = 0; Serial.println("network Network Not Available"); } if(strstr(at_buffer, "+SIND: 11") != 0) { network_registered=1; Serial.println("network Registered"); } if(strstr(at_buffer, "+SIND: 4") != 0) { network_AT_ready=1; Serial.println("network AT Ready"); } } void loop() { /* If called for the first time, loop until network and AT is ready */ if(firstTimeInLoop == 1) { firstTimeInLoop = 0; while (network_registered == 0 || network_AT_ready == 0) { readATString(); ProcessATString(); } } //LET'S MAKE A PHONE CALL! if(firstTimeInOtherLoop == 1){ //Change the 10 digit phone number to whatever you wish cell.println("ATD4155551212"); firstTimeInOtherLoop = 0; } }

To receive a voice call upload the following code

//**********************************************************************************

// ANSWER A CALL // // BUFFERING CODE BASED UPON: // // // ****************************************** ********************************* #include #define BUFFSIZ 90 // Ρύθμιση buffer array char at_buffer [BUFFSIZ]; char buffidx? // Μεταβλητές κατάστασης δικτύου int network_registered; int network_AT_ready; // Μεταβλητές κατάστασης κώδικα int firstTimeInLoop = 1; int firstTimeInOtherLoop = 1; int x; // Θα κρατήσει τον εισερχόμενο χαρακτήρα από τη σειριακή θύρα. char incoming_char = 0; // Δημιουργήστε μια «ψεύτικη» σειριακή θύρα. Ο πείρος 2 είναι ο πείρος Rx, ο ακροδέκτης 3 είναι ο πείρος Tx. SoftwareSerial cell (2, 3); void setup () {// Αρχικοποίηση σειριακής θύρας Arduino για εντοπισμό σφαλμάτων. Serial.begin (9600); // Αρχικοποιήστε την εικονική σειριακή θύρα για να μιλήσετε στο τηλέφωνο. cell.begin (9600); //Γειά σου Κόσμε. Serial.println ("Έναρξη επικοινωνίας SM5100B …"); καθυστέρηση (1000)? // Ορισμός αρχικής κατάστασης δικτύου network_registered = 0; network_AT_ready = 0; } // Διαβάστε συμβολοσειρές AT από την κυψελοειδή ασπίδα void readATString (void) {char c; buffidx = 0; // ξεκινήστε από την αρχή για (x = 0; x 0) {c = cell.read (); εάν (c == -1) {at_buffer [buffidx] = '\ 0'; ΕΠΙΣΤΡΟΦΗ; } if (c == '\ n') {Continue; } if ((buffidx == BUFFSIZ - 1) || (c == '\ r')) {at_buffer [buffidx] = '\ 0'; ΕΠΙΣΤΡΟΦΗ; } at_buffer [buffidx ++] = c; }}} // Επεξεργασία των συμβολοσειρών AT άκυρο ProcessATString () {if (strstr (at_buffer, "+SIND: 8")! = 0) {network_registered = 0; Serial.println ("Δίκτυο δικτύου δεν είναι διαθέσιμο"); } if (strstr (at_buffer, "+SIND: 11")! = 0) {network_registered = 1; Serial.println ("εγγεγραμμένο δίκτυο"); } if (strstr (at_buffer, "+SIND: 4")! = 0) {network_AT_ready = 1; Serial.println ("network AT Ready"); }} void loop () { / * Εάν κληθεί για πρώτη φορά, κάντε βρόχο έως ότου το δίκτυο και το AT είναι έτοιμα * / εάν (firstTimeInLoop == 1) {firstTimeInLoop = 0; while (network_registered == 0 || network_AT_ready == 0) {readATString (); ProcessATString (); }} if (firstTimeInOtherLoop == 1) {// Αναζητήστε εισερχόμενη κλήση εάν (strstr (at_buffer, "+CPAS: 3")! = 0) {// Απαντήστε στο cell.println του τηλεφώνου ("ATA"); firstTimeInOtherLoop = 0; }}}

Εικόνα
Εικόνα

Το βρήκατε χρήσιμο, διασκεδαστικό ή διασκεδαστικό; Ακολουθήστε @madeineuphoria για να δείτε τα τελευταία έργα μου.

Συνιστάται: