Σύνδεση μικροφώνου στη μονάδα gsm. Budget συναγερμός GSM με εγκεφάλους Arduino

Πριν από λίγο καιρό, ένας φίλος μου πρόσφερε μια εργασία σχετικά με τη δημιουργία υλικολογισμικού για έναν μικροελεγκτή που υποτίθεται ότι επικοινωνούσε με τον διακομιστή χρησιμοποιώντας τη μονάδα SIM900D GSM. Δεν είχα ποτέ καμία σχέση με τον προγραμματισμό μικροελεγκτών πριν, και η τελευταία φορά που προγραμματίστηκα σε C ήταν κατά τη διάρκεια των φοιτητικών μου ημερών, αλλά η περιέργεια κυριάρχησε και έπιασα δουλειά. Η τεκμηρίωση για αυτό το κομμάτι του υλικού είναι διαθέσιμη στο Διαδίκτυο, αλλά δεν ήταν δυνατό να βρεθούν καλά παραδείγματα εργασίας με TCP/IP σε κώδικα. Δεν έμενε τίποτα άλλο να κάνουμε από το να φορτώσουμε έγγραφα, να εφοδιάσουμε με τσιγάρα και τσάι και να αρχίσουμε να κάνουμε ελιγμούς ανάμεσα στις τσουγκράνες. Και υπήρχαν πολλές ρακές. Στην πραγματικότητα, γι' αυτό έγραψα αυτό το άρθρο - για να το κάνω πιο εύκολο για τους άλλους.

Τι χρειαζόταν

Ήταν απαραίτητο να γραφτεί κώδικας που θα μπορούσε να προετοιμάσει τη μονάδα GSM, να δημιουργήσει μια σύνδεση με τον διακομιστή, να λάβει και να στείλει αυθαίρετα δεδομένα, να ελέγξει την κατάσταση της σύνδεσης και να λειτουργήσει χωρίς αποτυχίες. Και επίσης να είναι αρκετά συμπαγής ώστε να χωράει στην περιορισμένη μνήμη του μικροελεγκτή και να αφήνει χώρο για την κύρια λειτουργικότητα και λίγο περισσότερο απόθεμα.

Τι έγινε στο τέλος

Το αποτέλεσμα ήταν ένας κωδικός C που μπορούσε να κάνει ό,τι χρειαζόταν. Λόγω απαιτήσεων συμπαγούς, έπρεπε να αναλύσουμε τις απαντήσεις και να δημιουργήσουμε συμβολοσειρές χρησιμοποιώντας τον δικό μας κώδικα, κάτι που είναι ακόμη και ντροπιαστικό να δείξουμε σε ειλικρινείς ανθρώπους. Επομένως, συνιστώ σε όλους να χρησιμοποιούν κανονικές εκφράσεις για αυτούς τους σκοπούς. Θα μεταφέρω επίσης τον κώδικά μου σε έναν ελαφρύ κινητήρα κανονικής έκφρασης, αλλά αφού δημιουργήσω ένα πλήρως λειτουργικό υλικολογισμικό.

Ο κώδικας απαιτεί λειτουργίες/μακροεντολές για να λειτουργήσει με τη σειριακή θύρα, καθώς και την παρουσία των λειτουργιών memset και memcpy. Έτσι μπορεί να μεταφερθεί σε άλλη πλατφόρμα με σχετική ευκολία, χωρίς να αγγίξει ένα σωρό βιβλιοθήκες στην πορεία.

Και πώς μοιάζει;

Ο προγραμματισμός και οι δοκιμές πραγματοποιήθηκαν στα Windows 7. Ο κώδικας που προέκυψε έγινε το κύριο υλικό για αυτό το άρθρο. Δεν θα δώσω τον κωδικό ολόκληρο και θα τον σχολιάσω, αλλά θα δείξω τον αλγόριθμο για τη ρύθμιση και την εργασία με τη μονάδα GSM.

Χαρακτηριστικά που απαιτεί ο κώδικας:

  • uint16_t init_serial_port(char *port_name) Αυτή η συνάρτηση διαμορφώνει την καθορισμένη σειριακή θύρα. Κάτω από τα Windows.
  • uint16_t puts_serial(uint8_t *buffer, uint16_t μέγεθος) Και αυτό γράφει μια συμβολοσειρά byte σε αυτήν τη θύρα.
  • gets_serial(uint8_t *buffer, uint16_t μέγεθος) Αυτό, κατά συνέπεια, διαβάζει μια συμβολοσειρά byte από τη σειριακή θύρα.
Λειτουργίες που παρέχει ο κώδικας:
  • init_gprs() & stop_gprs() Η μονάδα GSM αρχικοποιείται και απενεργοποιείται ανάλογα.
  • uint16_t connect_gprs (ευρετήριο uint8_t, λειτουργία uint8_t, char *διεύθυνση, θύρα char) Δημιουργεί μια σύνδεση με το διακομιστή. Αξίζει να σημειωθεί ότι το module μπορεί να λειτουργήσει με τα πρωτόκολλα TCP και UDP τόσο ως πελάτης όσο και ως πελάτης. Υποστηρίζονται το πολύ 8 ταυτόχρονες συνδέσεις.
  • uint16_t close_gprs(uint8_t index) Κλείνει την καθορισμένη σύνδεση.
  • uint16_t send_gprs(uint8_t index, uint8_t *buffer, uint16_t μέγεθος) Στέλνει ένα μήνυμα μέσω της καθορισμένης σύνδεσης.
  • uint16_t recv_gprs(uint8_t index, uint8_t *buffer, uint16_t μέγεθος) Λάβετε ένα μήνυμα. Μια λειτουργία μη αποκλεισμού, που σημαίνει ότι δεν θα περιμένει να εμφανιστούν δεδομένα στη ροή, αλλά θα επιστρέψει τον έλεγχο εάν δεν υπάρχει τίποτα για λήψη. Αξίζει να σημειωθεί ότι αυτή η συμπεριφορά είναι πιο εύκολο να εφαρμοστεί από το μπλοκάρισμα.

Πώς να εργαστείτε με μια σειριακή θύρα

Είναι αρκετά απλό. Υπάρχουν μακροεντολές για τον μικροελεγκτή προορισμού για αποστολή/λήψη δεδομένων μέσω USART, αλλά επειδή είναι ευκολότερο να εντοπιστεί σφάλματα τέτοιου κώδικα από έναν επιτραπέζιο υπολογιστή, μου δόθηκε ένα πακέτο από έναν προσαρμογέα USB<->Μονάδα USART και GSM. Το μόνο που έμεινε ήταν να μάθουμε πώς να δουλεύουμε με τη σειριακή θύρα στα Windows. Αποδείχθηκε απλό. Εν ολίγοις, μια σειριακή θύρα αναπαρίσταται στο λειτουργικό σύστημα ως κανονικό αρχείο, οι πληροφορίες μεταφέρονται χρησιμοποιώντας τις λειτουργίες ReadFile και WriteFile. Απλώς πρέπει να ορίσετε ορισμένες παραμέτρους χρησιμοποιώντας τις συναρτήσεις SetCommTimeouts και SetCommState.

Αυτή είναι η συνάρτηση προετοιμασίας της θύρας:
uint16_t init_serial_port(char *port_name) ( COMMTIMEOUTS timeouts; παράμετροι DCB; int αποτέλεσμα; serial_port_handle = CreateFile(port_name, // "\\\\.\\COMx" GENERIC_READ | GENERIC_WRITE, 0, //quent παραμέτρους διορθώνονται όταν εργάζεστε με τη θύρα NULL, OPEN_EXISTING, 0, NULL εάν (serial_port_handle == INVALID_HANDLE_VALUE) (printf("Σφάλμα ανοίγματος σειριακής θύρας!\n"); επιστροφή 1; ) // Μέγιστος χρόνος μεταξύ ανάγνωσης δύο byte) μια γραμμή timeouts.ReadIntervalTimeout = 100 ; // Η επόμενη τιμή πολλαπλασιάζεται με τον αριθμό των χαρακτήρων που διαβάζονται από τα χρονικά όρια της θύρας timeouts.ReadTotalTimeoutConstant = 1000 // Η τιμή είναι η ίδια με τις δύο προηγούμενες παραμέτρους, ωστόσο, το χρονικό όριο λήξης υπολογίζεται για την εγγραφή. ( printf("Σφάλμα ρύθμισης χρονικών ορίων για σειριακή θύρα!\ n"); close_serial_port(); επιστροφή 1; ) // Οι παράμετροι θύρας περιέχουν τις απλούστερες ρυθμίσεις - χωρίς ισοτιμία, // χωρίς έλεγχο ροής, 1 bit διακοπής. memset(¶meters,0,sizeof(parameters)); παράμετροι.DCBlength = sizeof(DCB); GetCommState(serial_port_handle, &parameters); Parameters.BaudRate = (DWORD)BAUD_RATE; παράμετροι.ByteSize = 8; Parameters.Parity = NOPARITY; Parameters.StopBits = ONESTOPBIT; parameters.fAbortOnError = TRUE; parameters.fDtrControl = DTR_CONTROL_DISABLE; parameters.fRtsControl = RTS_CONTROL_DISABLE; parameters.fBinary = TRUE; parameters.fParity = FALSE; parameters.fOutX = FALSE; parameters.fInX = FALSE; παράμετροι.XonChar = (uint8_t)0x00; παράμετροι.XoffChar = (uint8_t)0xff; parameters.fErrorChar = FALSE; parameters.fNull = FALSE; parameters.fOutxCtsFlow = FALSE; parameters.fOutxDsrFlow = FALSE; Parameters.XonLim = 128; παράμετροι.XoffLim = 128; αποτέλεσμα = SetCommState(serial_port_handle, &parameters); if (result == 0) ( printf("Σφάλμα ρύθμισης των παραμέτρων σειριακής θύρας!\n"); close_serial_port(); return 1; ) return 0; )

Πώς γίνεται η επικοινωνία με τη μονάδα GSM;

Μόλις διαμορφωθεί η σειριακή θύρα, μπορούν να σταλούν σε αυτήν εντολές AT. Η πρώτη εντολή θα πρέπει να είναι η ακολουθία "AT\r", η οποία επιτρέπει στη μονάδα να προσαρμόζει αυτόματα τον ρυθμό baud στη σειριακή θύρα. Η απάντηση που μπορεί στη συνέχεια να ληφθεί από τη θύρα θα μοιάζει με "AT\r\r\nOK\r\n".

Η εντολή είναι μια απλή συμβολοσειρά χαρακτήρων ASCII. Για να γίνει αποδεκτή η εντολή από τη μονάδα, πρέπει να βάλετε έναν χαρακτήρα επιστροφής μεταφοράς "\r" στο τέλος της. Σε απόκριση, η μονάδα θα μεταδώσει μια σειρά χαρακτήρων που αποτελείται από δύο μέρη - την εντολή στην οποία αποκρίνεται η μονάδα και την απόκριση που χωρίζεται από αυτήν με τους χαρακτήρες "\r\r\n", που τελειώνει με τους χαρακτήρες "\r\n ". Για να διευκολύνω την ανάλυση των αποκρίσεων, δημιούργησα μια μακροεντολή που ορίζει έναν δείκτη στην αρχή της απόκρισης στο buffer λήψης. Εάν θέλετε να εξάγετε την απάντηση στην κονσόλα, πρέπει να προσθέσετε έναν μηδενικό χαρακτήρα στο τέλος του ληφθέντος μηνύματος.

Void at_send(char *cmd, uint16_t μέγεθος) ( uint16_t αποτέλεσμα; cmd = "\r"; result = puts_serial(cmd, size); return; ) uint16_t at_recv(uint8_t *buffer, uint16_t size) (uint16_t αποτέλεσμα; αποτέλεσμα = παίρνει_ (buffer, μέγεθος).
Έτσι φαίνονται περίπου οι βοηθητικές λειτουργίες για την αποστολή εντολής και τη λήψη απάντησης.

Αρχικοποίηση μονάδας

Η μεγαλύτερη συνάρτηση στον κώδικα είναι υπεύθυνη για τη διαμόρφωση της μονάδας. Κατά την προετοιμασία, αποστέλλονται πολλές εντολές AT. Θα τα περιγράψω με τη σειρά που θα σταλούν στο module. Δεν περιγράφω συγκεκριμένα τα επιχειρήματα και τις επιλογές απαντήσεων λεπτομερώς, επειδή μπορούν να βρεθούν στην τεκμηρίωση.
  • "AT+CPIN=pin-code" Όπως μπορείτε να μαντέψετε, αυτή η εντολή ξεκλειδώνει την κάρτα SIM εισάγοντας έναν κωδικό PIN. Για να ελέγξετε εάν απαιτείται PIN, μπορείτε να χρησιμοποιήσετε την εντολή "AT+CPIN?" .
  • "AT+CREG;" Αυτή η εντολή επιστρέφει την κατάσταση εγγραφής της μονάδας στο δίκτυο. Πρέπει να το εκτελέσετε μέχρι να απαντήσει η μονάδα ότι είναι καταχωρημένη στο δίκτυο.
  • "AT+CGATT=1" Αναγκάζει τη μονάδα να συνδεθεί στο GPRS. Μπορείτε να ελέγξετε αν είναι συνδεδεμένο με την εντολή "AT+CGATT?" .
  • "AT+CIPRXGET=1" Επιτρέπει τη μη αυτόματη ανάκτηση δεδομένων που μεταφέρονται μέσω της σύνδεσης. Από προεπιλογή, αυτή η επιλογή είναι απενεργοποιημένη και τα δεδομένα αποστέλλονται στη σειριακή θύρα αμέσως μόλις ληφθούν. Αυτό δεν είναι πολύ βολικό, αν και δεν είναι κρίσιμο - μπορείτε να ρυθμίσετε τη μονάδα έτσι ώστε μαζί με τα δεδομένα να μεταδίδει επίσης κεφαλίδες IP, με τις οποίες μπορείτε να προσδιορίσετε από ποιον ελήφθη το πακέτο. Αποφάσισα ότι θα ήταν ευκολότερο να αποκτήσω δεδομένα χειροκίνητα και δεν έκανα λάθος. Όπως καταλαβαίνω, αυτή η εντολή είναι αποδεκτή μόνο από μονάδες GSM SIM.COM.
  • "AT+CIPMUX=1" Από προεπιλογή, η μονάδα μπορεί να δημιουργήσει μόνο μία σύνδεση. Αυτή η ρύθμιση επιτρέπει τη δυνατότητα δημιουργίας πολλαπλών συνδέσεων. Η αποστολή και η λήψη δεδομένων θα διαφέρουν μόνο κατά μία παράμετρο - το ευρετήριο σύνδεσης.
  • "AT+CSTT="internet"" APN - Όνομα σημείου πρόσβασης, όνομα σημείου πρόσβασης για GPRS. Για τον παροχέα μου φαίνεται ακριβώς έτσι.
  • "AT+CIICR" Δημιουργεί μια ασύρματη σύνδεση GPRS. Μπορεί να χρειαστεί λίγος χρόνος, επομένως πρέπει να το εκτελέσετε σε βρόχο και να ελέγξετε την απάντηση.
  • "AT+CIFSR" Επιστρέφει τη διεύθυνση IP της μονάδας. Το χρησιμοποιώ για να ελέγξω αν η μονάδα είναι συνδεδεμένη στο διαδίκτυο.
  • "AT+CDNSCFG="8.8.8.8","8.8.4.4"" Αυτή η εντολή ορίζει τους διακομιστές DNS που θα χρησιμοποιεί η λειτουργική μονάδα.
  • "AT+CIPSTATUS" Εκτός από πληροφορίες σχετικά με την κατάσταση σύνδεσης, αυτή η εντολή παρέχει πληροφορίες σχετικά με το εάν η μονάδα είναι έτοιμη να πραγματοποιήσει συνδέσεις. Πρέπει λοιπόν να ελέγξετε την απάντησή της.
Μετά την εκτέλεση αυτών των εντολών, η μονάδα θα είναι έτοιμη για χρήση. Λοιπόν, ή δεν θα γίνει. Εξαρτάται από την τύχη σου.

Δημιουργία και διακοπή συνδέσεων

Η σύνδεση δημιουργείται με την εντολή "AT+CIPSTART=index,"mode","address","port"" .
  • Το ευρετήριο υποδεικνύει τον σειριακό αριθμό της σύνδεσης, μπορεί να πάρει τιμές από 0 έως 7.
  • Η λειτουργία καθορίζει το πρωτόκολλο που θα χρησιμοποιηθεί από τη σύνδεση. Μπορεί να είναι "TCP" ή "UDP".
  • διεύθυνση καθορίζει τη διεύθυνση διακομιστή. Εάν καθορίστηκαν διακομιστές DNS κατά τη ρύθμιση, μπορείτε να χρησιμοποιήσετε και διεύθυνση IP και όνομα τομέα.
  • port καθορίζει τη θύρα διακομιστή με την οποία θα πραγματοποιηθεί η σύνδεση.
Σημειώστε ότι όταν χρησιμοποιείτε το πρωτόκολλο UDP, από προεπιλογή, τα datagrams θα αποστέλλονται και θα λαμβάνονται μόνο από μία διεύθυνση. Για να χρησιμοποιήσετε το UDP στο έπακρο και να στείλετε/λάβετε δεδομένα από οποιεσδήποτε διευθύνσεις, μπορείτε να χρησιμοποιήσετε τη λεγόμενη εκτεταμένη λειτουργία UDP, που έχει ρυθμιστεί με την εντολή "AT+CIPUDPMODE". Σας παραπέμπω στην τεκμηρίωση για λεπτομέρειες.

Σε απόκριση σε μια εντολή, μπορείτε να λάβετε πολλές πιθανές απαντήσεις. Εάν όλα είναι καλά, τότε μετά το τυπικό "OK", μετά από σύντομο χρονικό διάστημα μπορείτε να λάβετε μία από τις τρεις απαντήσεις:

  • "index,ALREADY CONNECT" αυτό σημαίνει ότι έχει ήδη δημιουργηθεί μια σύνδεση με το συγκεκριμένο ευρετήριο και αξίζει να το αναζητήσετε.
  • "ευρετήριο, ΣΥΝΔΕΣΗ ΟΚ" όλα είναι προφανή εδώ.
  • "ευρετήριο, ΑΠΟΤΥΧΙΑ ΣΥΝΔΕΣΗΣ" σημαίνει ότι παρουσιάστηκαν προβλήματα κατά τη δημιουργία της σύνδεσης.
Μπορείτε να κλείσετε τη σύνδεση με την εντολή "AT+CIPCLOSE=index" . Μπορείτε να διακόψετε όλες τις συνδέσεις και να απενεργοποιήσετε τη διεπαφή GPRS με την εντολή "AT+CIPSHUT".

Μεταφορά δεδομένων

Τα δεδομένα μεταφέρονται με την εντολή "AT+CIPSEND=index,length", όπου το ευρετήριο καθορίζει τη σύνδεση μέσω της οποίας πρέπει να σταλούν τα δεδομένα και το μήκος καθορίζει το μήκος του πακέτου δεδομένων. Παρεμπιπτόντως, μπορείτε να μάθετε το MTU για κάθε σύνδεση χρησιμοποιώντας την εντολή "AT+CIPSEND=?" .

Εάν όλα πάνε καλά, η μονάδα θα ανταποκριθεί στην εντολή με μια προτροπή ">", μετά την οποία θα πρέπει να στείλετε δεδομένα στη σειριακή θύρα. Μόλις η λειτουργική μονάδα λάβει έναν αριθμό byte ίσου με το μήκος , θα πει κάτι σαν "ευρετήριο, ΑΠΟΣΤΟΛΗ OK" . Γενικά, δεν χρειάζεται να χρησιμοποιήσετε την παράμετρο μήκος, αλλά σε αυτήν την περίπτωση το τέλος του πακέτου δεδομένων πρέπει να υποδεικνύεται ρητά χρησιμοποιώντας το σύμβολο 0x1A, στον τερματικό συνδυασμό Ctrl+Z. Αυτή η επιλογή προφανώς δεν είναι κατάλληλη για μετάδοση αυθαίρετων δεδομένων.

Όπως μπορείτε να δείτε, η μεταφορά δεδομένων δεν είναι μια πολύ περίπλοκη διαδικασία. Επομένως, ας προχωρήσουμε στο πιο ενδιαφέρον μέρος - τη λήψη δεδομένων.

Λήψη δεδομένων

Μόλις η μονάδα GSM λάβει δεδομένα, το σηματοδοτεί στέλνοντας μια συμβολοσειρά όπως "+CIPRXGET:1,index\r\n" στη σειριακή θύρα. Ειλικρινά δεν ξέρω τι εννοεί, επειδή αυτή η λειτουργία της μονάδας είναι ανεπαρκώς τεκμηριωμένη, αλλά για μένα εμφανίζεται σε όλα τα μηνύματα σχετικά με τη λήψη πακέτων.

Δεν μου άρεσε η σκέψη ότι έπρεπε να παρακολουθώ τα μηνύματα της ενότητας με τον ένα ή τον άλλο τρόπο. Ωστόσο, αφού έπαιξα λίγο με το πρόγραμμα εντοπισμού σφαλμάτων, ανακάλυψα ότι η μονάδα δεν στέλνει άλλα ασύγχρονα μηνύματα και επίσης ότι μετά την εκτέλεση οποιασδήποτε εντολής AT, αυτό το μήνυμα εμφανίζεται στην αρχή του buffer. Εφόσον έφτιαξα μια μακροεντολή για να διαχωρίσω την απάντηση από την εντολή αναζητώντας την υποσυμβολοσειρά "\r\r\n", δεν επηρεάστηκα με κανέναν τρόπο. Έτσι η λειτουργία λήψης δεδομένων υλοποιήθηκε πολύ απλά.

Έτσι, μπορείτε να λάβετε δεδομένα με την εντολή "AT+CIPRXGET=2, ευρετήριο, μήκος" . Λειτουργία λήψης δύο μέσων, στην περίπτωση αυτή τα byte απλώς χύνονται στη σειριακή θύρα. Μπορείτε επίσης να καθορίσετε τη λήψη δεδομένων ως κείμενο HEX, πιθανώς για την αποφυγή διενέξεων με τον έλεγχο ροής λογισμικού. Δεν το χρειαζόμουν αυτό, γιατί δεν χρησιμοποιώ καθόλου έλεγχο ροής. Η παράμετρος μήκος καθορίζει το μέγεθος του πακέτου δεδομένων που θέλουμε να λαμβάνουμε κάθε φορά.

Σε απάντηση, θα λάβουμε κάτι σαν "+CIPRXGET:2,index,received,excess\r\n__DATA__\r\nOK\r\n" . Το ληφθέν πεδίο θα περιέχει τον αριθμό των byte στο πακέτο δεδομένων __DATA__ και το πλεονάζον πεδίο θα περιέχει τον αριθμό των byte που περιμένουν στην προσωρινή μνήμη της λειτουργικής μονάδας. Έτσι, εάν το πεδίο λήψης είναι μηδέν, μπορείτε να πείτε με ήσυχη τη συνείδησή σας ότι δεν υπάρχει τίποτα για λήψη. Στην πραγματικότητα, χρησιμοποιώντας αυτό, εφάρμοσα μια λειτουργία μη αποκλεισμού για τη λήψη δεδομένων.

Τελικά

Πριν γράψετε κώδικα, σας συνιστώ ανεπιφύλακτα να αισθάνεστε άνετα με τις εντολές AT χρησιμοποιώντας το PuTTY, το οποίο λειτουργεί εξαιρετικά με τη σειριακή θύρα.

Ελπίζω ότι οι πληροφορίες σε αυτό το άρθρο θα βοηθήσουν κάποιον να γράψει κώδικα για τη SIM900 του. Είναι πολύ πιθανό ότι οι αρχές της εργασίας με τη μονάδα GSM που περιγράφονται παραπάνω μπορούν να εφαρμοστούν σε μονάδες άλλων μοντέλων και, πιθανώς, κατασκευαστών.

Η εμπειρία χρήσης του SIM900 που περιγράφεται παρακάτω θα είναι πιο χρήσιμη σε όσους έχουν ήδη εργαστεί λίγο με τη μονάδα. Για εκείνους τους αναγνώστες που μόλις αρχίζουν να μελετούν αυτό το μικροκύκλωμα και σχεδιάζουν να το χρησιμοποιήσουν για την ανταλλαγή δεδομένων μέσω του Διαδικτύου, έχουμε ετοιμάσει μια σειρά μαθημάτων σχετικά με αυτό το θέμα. Εδώ .

Έτσι, το SIM900 είναι μια μονάδα GSM από την SIM COM, που ελέγχεται από εντολές AT, μπορεί να στέλνει SMS, να πραγματοποιεί κλήσεις, να οργανώνει μια απευθείας σύνδεση CSD και να ανταλλάσσει πληροφορίες μέσω GPRS.

Στα χέρια μου είχα μια πλακέτα εντοπισμού σφαλμάτων ασπίδας SIM900 GPRS που παραγγέλθηκε από την Κίνα - συμβατή με την πλατφόρμα Arduino.

Η πλακέτα περιέχει το ίδιο το τσιπ SIM900, υποδοχές για μικρόφωνο και ακουστικά, διακόπτη τροφοδοσίας (από εξωτερική υποδοχή ή από Arduino), κεραία, πολλές λυχνίες LED για την ένδειξη των τρόπων λειτουργίας, υποδοχή για μπαταρία (εάν είναι σε πραγματικό χρόνο χρειάζεται ρολόι) και ένα κουμπί ενεργοποίησης/απενεργοποίησης. Βρήκα μια καλή περιγραφή στο wiki του κατασκευαστή . Υπάρχει επίσης κωδικός για τον έλεγχο του μόντεμ σε διάφορες λειτουργίες.

Όπως μας λέει ο κατασκευαστής, η πλακέτα είναι απόλυτα συμβατή με το Arduino Uno. Πράγματι, η πλακέτα SIM900 απλώς συνδέεται στο Uno και αρχίζει αμέσως να λειτουργεί. Ωστόσο, όπως αποδείχθηκε, το Arduino Uno μπορεί να αποδειχθεί "αδύναμο" για την υλοποίηση ορισμένων λειτουργιών, αλλά θα μιλήσω για αυτό παρακάτω.

Η πλακέτα λειτουργεί με το Arduino Mega με κάποιους περιορισμούς. Αυτό οφείλεται στο γεγονός ότι το Mega, σε αντίθεση με το Uno, έχει τα pin 7 και 8, τα οποία δεν είναι διαθέσιμα για χρήση ως σειριακό λογισμικό (λογισμικό USART). Αυτό μπορεί να λυθεί με εναλλαγή της διεπαφής USART στα σκέλη 0 και 1, για το σκοπό αυτό, παρέχονται jumpers στην πλακέτα SIM900.

Γενικά, η πλακέτα μπορεί να συνδεθεί με οποιονδήποτε ελεγκτή με διεπαφή USART. Για παράδειγμα, προσπάθησα να ελέγξω το μόντεμ χρησιμοποιώντας τον ελεγκτή STM32F4.

SIM900: Μηνύματα SMS και κλήσεις

Η δοκιμή της ενότητας για την ανταλλαγή μηνυμάτων SMS και κλήσεων ήταν μεγάλη επιτυχία! Η ενότητα αντιμετώπισε αυτές τις εργασίες χωρίς κανένα πρόβλημα, γι' αυτό απλώς αντέγραψα γ ίδιο site, μεταγλωττίστηκε και αναβοσβήνει αυτόν τον κώδικα στο Arduino Uno:

//Serial Relay - Το Arduino θα επιδιορθώσει μια //σειριακή σύνδεση μεταξύ του υπολογιστή και του GPRS Shield //στα 19200 bps 8-N-1 //Ο υπολογιστής είναι συνδεδεμένος στο υλικό UART //GPRS Shield συνδέεται στο λογισμικό UART #include SoftwareSerial GPRS(7, 8); ανυπόγραφο buffer χαρακτήρων. // πίνακας buffer για λήψη δεδομένων μέσω σειριακής θύρας int count=0; // μετρητής για διάταξη buffer array void setup() ( GPRS.begin(19200); // ο ρυθμός baud GPRS Serial.begin(19200); // η σειριακή θύρα του Arduino baud rate. ) void loop() ( if (GPRS .available()) // εάν η ημερομηνία έρχεται από τη σειριακή θύρα λογισμικού ==> τα δεδομένα έρχονται από το gprs shield ( while(GPRS.available()) // ανάγνωση δεδομένων στον πίνακα χαρακτήρων ( buffer=GPRS.read(); // εγγραφή δεδομένων σε πίνακα if(count == 64) Serial.write(buffer,count) // αν δεν τελειώνει η μετάδοση δεδομένων, γράψτε το buffer στη σειριακή θύρα clearBufferArray( /); / ορίστε τον μετρητή του βρόχου while στο μηδέν ) εάν (Serial.available()) // εάν τα δεδομένα είναι διαθέσιμα στη θύρα hardwareserial ==> τα δεδομένα έρχονται από τον υπολογιστή ή το notebook GPRS.write(Serial .read() // write είναι στην ασπίδα GPRS ) void clearBufferArray() // συνάρτηση για εκκαθάριση πίνακα buffer ( for (int i=0; i

Για να στείλετε εντολές στη μονάδα, πρέπει να είναι συνδεδεμένη σε υπολογιστή. Αυτό μπορεί να γίνει χρησιμοποιώντας τη θύρα USB Arduino. Σε έναν υπολογιστή, χρειάζεστε οποιαδήποτε οθόνη θύρας COM για αυτό. Μπορείτε να το κατεβάσετε από εδώ, ή μπορείτε να χρησιμοποιήσετε την οθόνη που είναι ενσωματωμένη στο Arduino IDE.

Το μόνο που κάνει το πρόγραμμα υλικολογισμικού Arduino είναι να «πιάνει» εντολές χρήστη και να τις στέλνει στη μονάδα και, στη συνέχεια, να επιστρέφει απαντήσεις στη SIM900 στον χρήστη. Έτσι, μεταδίδοντας χειροκίνητα εντολές AT στη μονάδα, δοκίμασα τη λήψη και τη μετάδοση μηνυμάτων SMS και συνδέοντας μικρόφωνο και ακουστικά στις κατάλληλες υποδοχές, χρησιμοποίησα τη μονάδα SIM900 ως κινητό τηλέφωνο.

Μεταφορά δεδομένων μέσω GPRS με χρήση SIM900

Ξεκίνησα τα πρώτα μου πειράματα στη μεταφορά δεδομένων μέσω GPRS χρησιμοποιώντας την πλατφόρμα Arduino UNO για να ελέγξω το SIM900 (απλά επειδή ήταν διαθέσιμο). Αρχικά, αγόρασα φιλοξενία με έναν διακομιστή που εκτελεί το Apatche και ανέπτυξα μια απλή εφαρμογή σε αυτό που μπορούσε να ανταποκριθεί επιδέξια σε αιτήματα GET. Συνέβη! Εξακολουθούσα να έστελνα εντολές από τον υπολογιστή στον ελεγκτή Arduino, ο οποίος με τη σειρά του τις έστειλε στη SIM900.

Όλα λειτουργούσαν σωστά εφόσον τα αιτήματα GET ήταν αρκετά σύντομα (έως 100 χαρακτήρες). Αλλά μόλις τα αιτήματα έγιναν μεγαλύτερα, άρχισαν οι αποτυχίες: τα αιτήματα δεν μεταδόθηκαν πλήρως. Έχει σημειωθεί ότι οι δυσλειτουργίες μπορούν να εμφανιστούν ή να εξαφανιστούν ακόμη και όταν αυξάνεται/μειώνεται το πρόγραμμα ελέγχου Arduino κατά πολλές γραμμές. Στη συνέχεια, αποδείχθηκε ότι οι βλάβες σχετίζονται με το λογισμικό USART, το οποίο χρησιμοποιεί το Arduino UNO για την επικοινωνία με το SIM900, επειδή ένα τέτοιο USART εξαρτάται εξ ολοκλήρου από τον κύκλο προγράμματος του πυρήνα του ελεγκτή. Εάν ο όγκος των δεδομένων είναι μικρός, έχει πάντα χρόνο για μετάδοση, και εάν η ποσότητα τους αυξάνεται, το αποτέλεσμα της μετάδοσης εξαρτάται από τη διάρκεια του κύκλου του προγράμματος.

Συμπέρασμα από όλα τα παραπάνω: είναι Αδύνατη η χρήση λογισμικού USART κατά την επικοινωνία με το SIM900, ειδικά όταν πρόκειται για μεγάλο όγκο δεδομένων που μεταδίδονται.

Το Arduino Uno έχει μόνο μία διεπαφή USART «υλισμικού», η οποία χρησιμοποιήθηκε για ανταλλαγή με υπολογιστή, οπότε έπρεπε να εγκαταλείψουμε το UNO, αντικαθιστώντας το με το Arduino Mega, το οποίο δεν πάσχει από την έλλειψη «υλισμικού» USART. Μετά από ένα τέτοιο "castling", η λειτουργία της συσκευής έγινε σταθερή και σωστή.

SIM900: Στοίβα TCP-IP ή HTTP; Τι καλύτερο;

Κατά τη μελέτη του εγχειριδίου διαχείρισης μόντεμ, ανακάλυψα ότι υπάρχουν δύο ομάδες εντολών AT. Η πρώτη ομάδα χρησιμοποιείται για τη μετάδοση δεδομένων μέσω της ενσωματωμένης στοίβας TCP-IP και η δεύτερη χρησιμοποιεί το πρωτόκολλο HTTP που έχει ήδη υλοποιηθεί από την εσωτερική λογική του SIM900. Ανεξάρτητα από το πόσο βασάνισα την Google και την Yandex προσπαθώντας να μάθω πώς διαφέρουν αυτές οι μέθοδοι, ποια είναι τα πλεονεκτήματα και τα μειονεκτήματα καθεμιάς από αυτές, δεν μπορούσα να βρω τίποτα, επομένως δοκίμασα και τα δύο και μοιράζομαι την πρακτική μου εμπειρία εδώ.

Και οι δύο μέθοδοι λειτουργούν και έχουν δικαίωμα ύπαρξης.

Η προετοιμασία της στοίβας TCP-IP είναι λίγο πιο δύσκολη (πρέπει να περάσουν περισσότερες εντολές στη μονάδα) και είναι λίγο πιο δύσκολη η διαχείρισή της. Για να στείλετε ένα αίτημα, πρέπει να ανοίξετε μια σύνδεση, να περιμένετε απάντηση και να την κλείσετε σωστά.

Το HTTP είναι, με απλά λόγια, ένα πρόγραμμα περιήγησης ενσωματωμένο στη SIM900. Είναι εύκολο να αρχικοποιήσετε για να ξεκινήσετε την επικοινωνία με τον διακομιστή, πρέπει να ανοίξετε μια συνεδρία. Ταυτόχρονα, το άνοιγμα και το κλείσιμο μιας σύνδεσης με κάθε αίτημα και η επίλυση άλλων «οργανωτικών εργασιών» πέφτουν στους ώμους του SIM900. Αυτό είναι βολικό και η μεταφορά δεδομένων με αυτόν τον τρόπο είναι κάπως πιο γρήγορη, ακριβώς επειδή η SIM900 μπορεί να εκτελέσει όλες τις "βοηθητικές λειτουργίες" πιο γρήγορα από ό,τι μπορεί να κάνει ο ελεγκτής ελέγχου.

Έτσι, κατά την επιλογή της μεθόδου ανταλλαγής, εξακολουθούσα να συμβιβάζομαι με το πρωτόκολλο HTTP.

Εσφαλμένο αίτημα GET στον διακομιστή

Στην αρχή της δουλειάς μου μεταδίδοντας δεδομένα μέσω GPRS, έκανα ένα λάθος που μου κόστισε περισσότερο από μια μέρα μαρτύριο. Μη έχοντας επαρκή εμπειρία στην αλληλεπίδραση με τον διακομιστή μέσω αιτημάτων GET, έχοντας αποκτήσει επιφανειακή γνώση στο Διαδίκτυο, συνέταξα ένα αίτημα όπως:

ΛΑΒΕ http://xxx.ru/d_command.php?UC=1111 HTTP/1.1
HOST: xxx.ru

Αυτό το αίτημα δεν είναι σωστό, αλλά "φαγώθηκε" τέλεια από το πρόγραμμα περιήγησης και τον διακομιστή μεσολάβησης από τον οποίο έστειλα αιτήματα για εντοπισμό σφαλμάτων - γι' αυτό θεώρησα το αίτημα σωστό.

Το πιο εκπληκτικό είναι ότι το SIM900 αντιμετώπισε επίσης καλά ένα «κακό» αίτημα (και τότε έστελνα αιτήματα μέσω της στοίβας TCP-IP). Ωστόσο, μια ωραία μέρα ο διακομιστής άρχισε να απαντά σε τέτοια αιτήματα με το σφάλμα 404. Αυτό συνέβη λόγω περιστάσεων που δεν έχουν ακόμη διευκρινιστεί, είτε ο πάροχος φιλοξενίας άλλαξε τους αλγόριθμους για την επεξεργασία του αιτήματος (το αρνείται), είτε ο πάροχος κινητής τηλεφωνίας το έκανε. Όμως το γεγονός παραμένει γεγονός. Στη συνέχεια προσπάθησα να στείλω το ίδιο αίτημα μέσω HTTP - όλα λειτούργησαν. Αυτό εξηγείται από το γεγονός ότι το εσωτερικό πρωτόκολλο HTTP της μονάδας SIM900 (όπως είπα ήδη, ουσιαστικά ένα ενσωματωμένο πρόγραμμα περιήγησης) είναι σε θέση να "αναλύει" σωστά λανθασμένα αιτήματα και να τα μεταδίδει στο δίκτυο με τη σωστή μορφή. Αυτό είναι ένα άλλο πλεονέκτημα (αμφίβολο, φυσικά) της χρήσης HTTP, αφού επιτρέπει στον προγραμματιστή κάποιες ανακρίβειες. Σε γενικές γραμμές, φυσικά, το αίτημα πρέπει να είναι γραμμένο σωστά και να μοιάζει με αυτό:

GET /d_command.php?UC=1111 HTTP/1.1
HOST: xxx.ru

Με ένα τέτοιο σωστό αίτημα, η SIM900 ανταλλάσσει με επιτυχία τόσο μέσω της στοίβας TCP-IP όσο και μέσω HTTP.

Η SIM900 παγώνει

Μερικές φορές, κατά την ανταλλαγή μέσω GPRS, προκύπτουν καταστάσεις μετά τις οποίες η μονάδα μπορεί να παγώσει. Αυτό θα μπορούσε να οφείλεται σε λανθασμένα δεδομένα που έφτασαν μέσω του δικτύου και οδήγησαν το SIM900 σε κούραση ή σε παρεμβολές στη γραμμή ανταλλαγής της μονάδας και του ελεγκτή, κατά την οποία το SIM900 έλαβε "όχι αυτό που περίμενε" ή κάποιο άλλο άγνωστο πρόβλημα. Ο κατασκευαστής του τσιπ προειδοποιεί ότι αυτό μπορεί να συμβεί και προτείνει σε τέτοιες περιπτώσεις, να επανεκκινήσετε τη μονάδα χρησιμοποιώντας μια ειδική ακολουθία παλμών που εφαρμόζεται στην είσοδο PWRKEY.

Ωστόσο, όπως αποδείχθηκε, αυτό δεν βοηθά πάντα - μετά από μια τέτοια επανεκκίνηση, η μονάδα μπορεί να "ξυπνήσει" ακόμα "αστραπιαία". Και ο κατασκευαστής μας προειδοποιεί επίσης για αυτό εάν διαβάσουμε προσεκτικά το Φύλλο δεδομένων για τη μονάδα. Δείτε τι προτείνει η τεκμηρίωση:

ΣΗΜΕΙΩΣΗ: Συνιστάται η απευθείας διακοπή της τροφοδοσίας VBAT αντί της χρήσης εξωτερικής ακίδας επαναφοράς όταν το SIM900 δεν μπορεί να ανταποκριθεί στην εντολή AT «AT+CPOWD=1» και στην ακίδα PWRKEY.

Επομένως, ο πιο σωστός τρόπος για να επανεκκινήσετε τη μονάδα είναι να αφαιρέσετε εντελώς την τροφοδοσία από αυτήν (από τον ακροδέκτη VBAT), να περιμένετε για λίγο (τουλάχιστον ένα δευτερόλεπτο για κάθε περίπτωση) και να εφαρμόσετε ξανά την τροφοδοσία. Για να επανεκκινήσετε τη μονάδα, είναι προτιμότερο να έχετε έναν διακόπτη ρελέ ή τρανζίστορ στην πλακέτα, που ελέγχεται από τον ελεγκτή.

συμπέρασμα

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

Αντιο σας! Μείνετε συντονισμένοι για ενημερώσεις LAZY SMART .

Η μονάδα GSM και GPRS στα έργα Arduino σάς επιτρέπει να συνδέεστε σε απομακρυσμένες αυτόνομες συσκευές μέσω κανονικών κυψελοειδών επικοινωνιών. Μπορούμε να στείλουμε εντολές στη συσκευή και να λάβουμε πληροφορίες από αυτήν χρησιμοποιώντας εντολές SMS ή μέσω σύνδεσης στο Διαδίκτυο που ανοίγει μέσω GPRS. Σε αυτό το άρθρο θα δούμε τις πιο δημοφιλείς μονάδες για το Arduino, θα κατανοήσουμε τη σύνδεση και θα δούμε παραδείγματα προγραμματισμού.

Μονάδες GSM GPRS

Η μονάδα GSM χρησιμοποιείται για την επέκταση των δυνατοτήτων των κανονικών πλακών Arduino - αποστολή SMS, πραγματοποίηση κλήσεων, ανταλλαγή δεδομένων μέσω GPRS. Υπάρχουν διάφοροι τύποι μονάδων, οι πιο συχνά χρησιμοποιούμενες είναι οι SIM900, SIM800L, A6, A7.

Περιγραφή της μονάδας SIM900

Η μονάδα SIM900 χρησιμοποιείται σε διάφορα αυτοματοποιημένα συστήματα. Χρησιμοποιώντας τη διεπαφή UART, τα δεδομένα ανταλλάσσονται με άλλες συσκευές. Η μονάδα παρέχει τη δυνατότητα πραγματοποίησης κλήσεων και ανταλλαγής μηνυμάτων κειμένου. Η μονάδα υλοποιείται στο στοιχείο SIM900, που δημιουργήθηκε από την SIMCom Wireless Solution.

Προδιαγραφές:

  • Εύρος τάσης 4,8-5,2V;
  • Σε κανονική λειτουργία, το ρεύμα φτάνει τα 450 mA, το μέγιστο ρεύμα σε λειτουργία παλμού είναι 2 A.
  • Υποστήριξη 2G.
  • Ισχύς μετάδοσης: 1 W 1800 και 1900 MHz, 2 W 850 και 900 MHz.
  • Υπάρχουν ενσωματωμένα πρωτόκολλα TCP και UDP.
  • GPRS multi-slot class 10/8;
  • Θερμοκρασία λειτουργίας από -30C έως 75C.

Χρησιμοποιώντας τη συσκευή, μπορείτε να παρακολουθείτε τη διαδρομή ενός οχήματος μαζί με τη συσκευή GLONASS ή GPS. Η δυνατότητα αποστολής μηνυμάτων SMS χρησιμοποιείται σε ασύρματους συναγερμούς και διάφορα συστήματα ασφαλείας.

Περιγραφή της μονάδας SIM800L

Η μονάδα βασίζεται στο στοιχείο SIM800L και χρησιμοποιείται για την αποστολή SMS, την πραγματοποίηση κλήσεων και την ανταλλαγή δεδομένων μέσω GPRS. Μια κάρτα micro SIM είναι εγκατεστημένη στη μονάδα. Η συσκευή διαθέτει μια ενσωματωμένη κεραία και μια υποδοχή στην οποία μπορείτε να συνδέσετε μια εξωτερική κεραία. Η τροφοδοσία της μονάδας παρέχεται από εξωτερική πηγή ή μέσω μετατροπέα DC-DC. Ο έλεγχος πραγματοποιείται με χρήση υπολογιστή μέσω UART, Arduino, Raspberry Pi ή παρόμοιων συσκευών.

Προδιαγραφές:

  • Εύρος τάσης 3,7V – 4,2V;
  • Υποστήριξη δικτύου 4 ζωνών 900/1800/1900 MHz.
  • GPRS class 12 (85,6 kB/s);
  • Μέγιστο ρεύμα 500 mA;
  • Υποστήριξη 2G.
  • Αυτόματη αναζήτηση σε τέσσερις περιοχές συχνοτήτων.
  • Θερμοκρασία λειτουργίας από –30C έως 75C.

Περιγραφή της ενότητας Α6

Η μονάδα A6 αναπτύχθηκε από την AI-THINKER το 2016. Η συσκευή χρησιμοποιείται για την ανταλλαγή μηνυμάτων SMS και την ανταλλαγή δεδομένων μέσω GPRS. Η πλακέτα χαρακτηρίζεται από χαμηλή κατανάλωση ενέργειας και μικρό μέγεθος. Η συσκευή είναι πλήρως συμβατή με ρωσικές εταιρείες κινητής τηλεφωνίας.

Προδιαγραφές:

  • Εύρος τάσης 4,5 – 5,5V;
  • Τροφοδοσία 5V;
  • Εύρος θερμοκρασίας λειτουργίας από -30C έως 80C.
  • Μέγιστη κατανάλωση ρεύματος 900mA;
  • GPRS Κατηγορία 10;
  • Υποστηρίζει πρωτόκολλα PPP, TCP, UDP, MUX.

Η μονάδα υποστηρίζει κάρτες microsim.

Περιγραφή της ενότητας Α7

Το A7 είναι η πιο πρόσφατη ενότητα από την AI-THINKER. Σε σύγκριση με τον προκάτοχό του, το A6 έχει ενσωματωμένο GPS, επιτρέποντας έναν απλοποιημένο σχεδιασμό συσκευής.

Προδιαγραφές:

  • Εύρος τάσης λειτουργίας 3,3V-4,6V;
  • Τάση τροφοδοσίας 5V;
  • Συχνότητες 850/900/1800/1900 MHz;
  • GPRS Κατηγορία 10: Μέγ. 85,6 kbit;
  • Καταστολή ηχούς και θορύβου.

Η συσκευή υποστηρίζει κάρτες microSIM. Η μονάδα υποστηρίζει ανταλλαγή κλήσεων, ανταλλαγή μηνυμάτων SMS, μετάδοση δεδομένων μέσω GPRS, λήψη σημάτων μέσω GPS.

Πού να αγοράσετε μονάδες GSM για το Arduino

Ως συνήθως, πριν ξεκινήσετε, ακολουθούν μερικές συμβουλές και χρήσιμοι σύνδεσμοι προς πωλητές Aliexpress.

Πολύ υψηλής ποιότητας μονάδα KEYES SIM900 GSM GPRS Μονάδα SIM800C για Arduino από έναν αξιόπιστο προμηθευτή
Shield for development, συμβατό με Arduino, βασισμένο στη μονάδα SIM900 GPRS/GSM Φτηνή μονάδα mini A6 GPRS GSM

Σύνδεση ασπίδας GSM GPRS στο Arduino

Σε αυτή την ενότητα θα εξετάσουμε τα θέματα σύνδεσης μονάδων GSM στην πλακέτα Aduino. Σχεδόν όλα τα παραδείγματα βασίζονται στο Arduino Uno, αλλά τα περισσότερα παραδείγματα θα χρησιμοποιηθούν επίσης για πίνακες Mega, Nano κ.λπ.

Σύνδεση της μονάδας SIM800

Για να συνδεθείτε, χρειάζεστε μια πλακέτα Arduino, μια μονάδα SIM800L, έναν μετατροπέα τάσης προς τα κάτω, καλώδια σύνδεσης και μια μπαταρία 12 V. Η μονάδα SIM800L απαιτεί μια μη τυπική τάση Arduino 3,7 V.

Το pinout της μονάδας SIM800 φαίνεται στο σχήμα.

Η πλακέτα Arduino πρέπει να συνδεθεί στον υπολογιστή μέσω καλωδίου USB. Συνδέστε μια μπαταρία 12V μέσω ενός μετατροπέα: -12V σε γείωση Arduino, από μετατροπέα γείωσης σε αρνητικό, μετατροπέα +12V σε θετικό. Οι έξοδοι από τη μονάδα TX και RX πρέπει να συνδέονται με τις ακίδες 2 και 3 του Arduino. Μπορούν να συνδεθούν πολλαπλές μονάδες σε οποιαδήποτε ψηφιακή ακίδα.

Μονάδα σύνδεσης A6

Η μονάδα A6 είναι φθηνότερη από τη SIM900 και συνδέεται πολύ εύκολα με το Arduino. Η μονάδα τροφοδοτείται από τάση 5 V, επομένως η σύνδεση δεν απαιτεί πρόσθετα στοιχεία μείωσης τάσης.

Για να συνδεθείτε, θα χρειαστείτε μια πλακέτα Arduino (στην περίπτωση αυτή θεωρείται το Arduino UNO), μια μονάδα GSM A6 και καλώδια σύνδεσης. Το διάγραμμα σύνδεσης φαίνεται στο σχήμα.

Ο ακροδέκτης RX από τη μονάδα GSM πρέπει να συνδεθεί στο TX στην πλακέτα Arduino, ο ακροδέκτης TX πρέπει να συνδεθεί με τον ακροδέκτη RX στο Arduino. Η γείωση από τη μονάδα συνδέεται με τη γείωση στον μικροελεγκτή. Ο ακροδέκτης Vcc στη μονάδα GSM πρέπει να είναι συνδεδεμένος στο PWR_KEY.

Σύνδεση χρησιμοποιώντας ασπίδα GSM-GPRS

Πριν από τη σύνδεση, είναι σημαντικό να δώσετε προσοχή στην τάση τροφοδοσίας της θωράκισης. Το ρεύμα τη στιγμή μιας κλήσης ή αποστολής δεδομένων μπορεί να φτάσει τιμές 15-2 A, επομένως δεν πρέπει να τροφοδοτείτε την ασπίδα απευθείας από το Arduino.

Πριν συνδεθείτε στο Arduino, πρέπει να εγκαταστήσετε μια κάρτα SIM στην ασπίδα GSM-GPRS. Πρέπει επίσης να εγκαταστήσετε τους βραχυκυκλωτήρες TX και RX, όπως φαίνεται στην εικόνα.

Η σύνδεση γίνεται ως εξής - η πρώτη επαφή (κίτρινο καλώδιο στο σχήμα) από την ασπίδα πρέπει να συνδεθεί στο TX στο Arduino. Η δεύτερη ακίδα (πράσινο καλώδιο) συνδέεται στο RX στο Arduino. Η γη από την ασπίδα συνδέεται με τη γη από το aruino. Το ρεύμα τροφοδοτείται στον μικροελεγκτή μέσω καλωδίου USB.

Η διάταξη της σύνδεσης μεταξύ της ασπίδας και της πλακέτας Arduino φαίνεται στο σχήμα.

Για να εργαστείτε, θα χρειαστεί να εγκαταστήσετε τη βιβλιοθήκη GPRS_Shield_Arduino.

Για να ελέγξετε την ορθότητα του συναρμολογημένου κυκλώματος, πρέπει να κάνετε τα εξής: συνδέστε το RESET και το GND στο Arduino (αυτό θα οδηγήσει στη μεταφορά δεδομένων απευθείας από την ασπίδα στον υπολογιστή), τοποθετήστε την κάρτα SIM στη θωράκιση και ενεργοποιήστε η δύναμη της ασπίδας. Η πλακέτα Arduino πρέπει να συνδεθεί στον υπολογιστή και να πατηθεί το κουμπί λειτουργίας. Εάν όλα είναι συνδεδεμένα σωστά, το κόκκινο LED θα ανάψει και το πράσινο LED θα αναβοσβήνει.

Σύντομη περιγραφή της αλληλεπίδρασης μέσω εντολών AT

Οι εντολές AT είναι ένα σύνολο ειδικών εντολών για το μόντεμ, που αποτελούνται από σύντομες συμβολοσειρές κειμένου. Για να αναγνωρίσει το μόντεμ την εντολή που του δόθηκε, οι γραμμές πρέπει να ξεκινούν με τα γράμματα στο. Η συμβολοσειρά θα γίνει αποδεκτή όταν το μόντεμ βρίσκεται σε λειτουργία εντολών. Οι εντολές AT μπορούν να αποσταλούν είτε χρησιμοποιώντας λογισμικό επικοινωνίας είτε χειροκίνητα χρησιμοποιώντας το πληκτρολόγιο. Σχεδόν όλες οι εντολές μπορούν να χωριστούν σε 3 λειτουργίες - δοκιμή, στην οποία η ενότητα απαντά εάν υποστηρίζει την εντολή. ανάγνωση – έξοδος παραμέτρων εντολής ρεύματος. εγγραφή – θα γραφτούν νέες τιμές.

Λίστα με τις πιο χρησιμοποιούμενες εντολές AT:

  • AT – για να ελέγξετε εάν η μονάδα έχει συνδεθεί σωστά. Εάν όλα είναι εντάξει, επιστρέφεται το ΟΚ.
  • A/ – επαναλάβετε την προηγούμενη εντολή.
  • AT+IPR; – λήψη πληροφοριών σχετικά με την ταχύτητα της θύρας. Η απάντηση θα είναι +IPR: 0 OK (0 σε αυτήν την περίπτωση είναι αυτόματη).
  • AT+ICF; – ρύθμιση μετάδοσης. Η απάντηση θα είναι +ICF: bit, ισοτιμία.
  • AT+IFC; – έλεγχος μετάδοσης. Η απάντηση θα είναι +IFC: τερματικό από μονάδα, μονάδα από τερματικό (0 – χωρίς έλεγχο, 1 – έλεγχος λογισμικού, 2 – έλεγχος υλικού).
  • AT+GCAP – δείχνει τις δυνατότητες της μονάδας. Ένα παράδειγμα απάντησης είναι +GCAP:+FCLASS,+CGSM.
  • AT+GSN – απόκτηση μονάδας IMEI. Παράδειγμα απάντησης 01322600XXXXXXXXX.
  • AT+COPS; – εμφανίζει τους διαθέσιμους τελεστές.
  • AT+CPAS – κατάσταση ενότητας. Απόκριση +CPAS: 0. 0 – έτοιμο για εργασία, 3 – εισερχόμενη κλήση, 4 – φωνητική σύνδεση, 2 – άγνωστο.
  • AT+CCLK; – πληροφορίες σχετικά με την τρέχουσα ώρα και ημερομηνία.
  • AT+CLIP=1 – ενεργοποίηση/απενεργοποίηση αναγνώρισης κλήσης. 1 – ενεργοποιημένο, 0 – απενεργοποιημένο.
  • AT+CSCB=0 – λήψη ειδικών μηνυμάτων SMS. 0 – επιτρέπεται, 1 – απενεργοποιημένο.
  • AT+CSCS= “GSM” – Κωδικοποίηση μηνυμάτων SMS. Μπορείτε να επιλέξετε μία από τις ακόλουθες κωδικοποιήσεις: IRA, GSM, UCS2, HEX, PCCP, PCDN, 8859-1.
  • AT+CMEE=0 – λήψη πληροφοριών σφάλματος.
  • AT+CPIN=XXXX – εισάγετε τον κωδικό PIN της κάρτας SIM.
  • AT&F – επαναφορά στις εργοστασιακές ρυθμίσεις.
  • AT+CPOWD=1 – επείγουσα (0) ή κανονική (1) διακοπή λειτουργίας μονάδας.
  • ATD+790XXXXXXXX – καλέστε στον αριθμό +790XXXXXXXXXX.
  • ATA – απάντηση στην κλήση.
  • AT+CMGS=”+790XXXXXXXXX”>Δοκιμή sms – αποστολή μηνύματος SMS στον αριθμό +790XXXXXXXXX.

Σε αυτήν την περίπτωση, λαμβάνονται υπόψη οι βασικές εντολές για τη μονάδα SIM900. Οι εντολές ενδέχεται να διαφέρουν ελαφρώς για διαφορετικές μονάδες. Τα δεδομένα για τη μονάδα θα παρέχονται μέσω ενός ειδικού προγράμματος "τερματικού", το οποίο πρέπει να εγκατασταθεί στον υπολογιστή. Μπορείτε επίσης να στείλετε εντολές στη μονάδα μέσω της οθόνης θύρας στο Arduino IDE.

Σκίτσα για εργασία με τη μονάδα GSM

Αποστολή SMS χρησιμοποιώντας τη SIM900 ως παράδειγμα

Πριν στείλετε ένα μήνυμα, πρέπει να διαμορφώσετε τη μονάδα. Πρώτα απ 'όλα, πρέπει να μετατρέψετε το μεταδιδόμενο μήνυμα σε μορφή κειμένου. Υπάρχει μια εντολή AT+CMGF=1 για αυτό. Πρέπει να μετατρέψετε την κωδικοποίηση σε GSM χρησιμοποιώντας την εντολή AT+CSCS="GSM". Αυτή η κωδικοποίηση είναι η πιο βολική, καθώς οι χαρακτήρες αντιπροσωπεύονται σε κώδικα ASCII, ο οποίος είναι εύκολα κατανοητός από τον μεταγλωττιστή.

Στη συνέχεια, πρέπει να καλέσετε ένα μήνυμα SMS. Για να γίνει αυτό, αποστέλλεται μια εντολή με τον αριθμό συνδρομητή AT+CMGS=»+79XXXXXXXXXX» r, σε απάντηση θα σας ζητηθεί να πληκτρολογήσετε ένα κείμενο SMS. Πρέπει να στείλετε ένα μήνυμα. Μετά την ολοκλήρωση, πρέπει να στείλετε τον κωδικό συνδυασμού Ctrl+Z, η ενότητα θα επιτρέψει την αποστολή κειμένου στον παραλήπτη. Όταν σταλεί το μήνυμα, θα επιστραφεί OK.

Η αλληλεπίδραση με τη μονάδα βασίζεται σε δείκτες που αντιστοιχίζονται σε κάθε νέο μήνυμα. Χρησιμοποιώντας αυτό το ευρετήριο, μπορείτε να καθορίσετε ποιο μήνυμα να διαγράψετε ή να διαβάσετε.

Λήψη SMS. Για να διαβάσετε ένα μήνυμα SMS, χρησιμοποιήστε την εντολή AT + CNMI = 2,2,0,0,0. Όταν φτάσει ένα μήνυμα κειμένου στη μονάδα, θα στείλει +CMTI: "SM",2 στη σειριακή θύρα (στην περίπτωση αυτή, το 2 είναι ο αριθμός σειράς του μηνύματος). Για να το διαβάσετε, πρέπει να στείλετε την εντολή AT+CMGR=2.

Λήψη φωνητικής κλήσης. Πρώτα απ 'όλα, για να κάνετε μια συνομιλία, πρέπει να συνδέσετε ένα ηχείο και ένα μικρόφωνο στη μονάδα. Όταν ληφθεί μια κλήση, εμφανίζεται ο αριθμός από τον οποίο έγινε. Για να λειτουργήσετε, πρέπει να ενεργοποιήσετε τη βιβλιοθήκη GSM:

#περιλαμβάνω

Εάν η κάρτα SIM είναι μπλοκαρισμένη, πρέπει να εισαγάγετε τον κωδικό PIN της. Εάν δεν απαιτείται κωδικός PIN, αυτό το πεδίο πρέπει να μείνει κενό.

#define PINNUMBER ""

Στο setup(), η μεταφορά δεδομένων στον υπολογιστή πρέπει να προετοιμαστεί. Το επόμενο βήμα είναι να δημιουργήσετε μια τοπική μεταβλητή για την παρακολούθηση της κατάστασης σύνδεσης δικτύου. Το σκίτσο δεν θα εκτελεστεί μέχρι να συνδεθεί η κάρτα SIM στο δίκτυο.

boolean notConnected = true;

Η συνάρτηση gsmAccess.begin() χρησιμοποιείται για τη σύνδεση στο δίκτυο. Όταν δημιουργηθεί η σύνδεση, θα επιστραφεί η τιμή GSM_READY.

vcs.hangCall(); – μια λειτουργία που υποδεικνύει ότι το μόντεμ είναι έτοιμο να δέχεται κλήσεις.

getvoiceCallStatus() – καθορίζει την κατάσταση του σκίτσου. Εάν κάποιος καλέσει, επιστρέφει RECEIVINGCALL. Για να καταγράψετε έναν αριθμό, πρέπει να χρησιμοποιήσετε τη συνάρτηση retrieveCallingNumber(). Όταν απαντηθεί η κλήση, το TALKING θα επιστρέψει. Στη συνέχεια, το σκίτσο θα περιμένει έναν χαρακτήρα νέας γραμμής για να τερματίσει τη συνομιλία.

Δημιουργήστε μια σύνδεση GPRS και στείλτε δεδομένα σε έναν απομακρυσμένο διακομιστή

Πρώτα πρέπει να εγκαταστήσετε τη βιβλιοθήκη SoftwareSerial, η οποία σας επιτρέπει να παρέχετε σειριακή μεταφορά πληροφοριών και να συνδέσετε τη μονάδα GSM και τον μικροελεγκτή Arduino.

Για να στείλετε δεδομένα στον διακομιστή, πρέπει να στείλετε τις ακόλουθες εντολές:

AT+SAPBR=1,1 – άνοιγμα φορέα.

Οι επόμενες τρεις εντολές σχετίζονται με τη ρύθμιση των ρυθμίσεων σύνδεσης δικτύου.

AT+SAPBR=3,1,\”APN\”,\”internet.mts.ru\” – επιλέξτε τελεστή mts, όνομα σημείου πρόσβασης.

AT+SAPBR=3,1,\”USER\”,\” mts \” – επιλέξτε τον χρήστη mts.

AT+SAPBR=3,1,\”PWD\”,\” mts\”

AT+SAPBR=1,1 – εγκατάσταση σύνδεσης.

AT+HTTPINIT – αρχικοποίηση http.

AT+HTTPPARA=”URL”, – διεύθυνση URL.

AT+HTTPREAD – αναμονή απάντησης.

AT+HTTPTERM – διακοπή http.

Εάν όλα γίνονται σωστά, γραμμές με εντολές AT θα εμφανιστούν στο port monitor. Εάν δεν υπάρχει σύνδεση με το μόντεμ, θα εμφανίζει μία γραμμή τη φορά. Όταν δημιουργηθεί επιτυχώς η σύνδεση GPRS, το LED στη μονάδα θα αρχίσει να αναβοσβήνει.

Η μονάδα GSM είναι μια συσκευή για τον (απομακρυσμένο) έλεγχο της εξόδου ενός ρελέ που είναι εγκατεστημένο στην πλακέτα. Υπάρχει μια υποδοχή για κάρτα SIM στην πλακέτα. Ο κύριος σκοπός είναι ο έλεγχος των πυλών, των φραγμών και των ρολών.

Πώς λειτουργεί ένας ελεγκτής GSM;

Κάθε ελεγκτής GSM έχει τη δική του βάση δεδομένων στην οποία αποθηκεύονται οι εξουσιοδοτημένοι αριθμοί. Η μονάδα GSM έχει επίσης τον δικό της αριθμό (αριθμός κάρτας SIM) που είναι εγκατεστημένος σε αυτήν. Εάν ο αριθμός σας είναι καταγεγραμμένος στη βάση δεδομένων του ελεγκτή, τότε όταν κάνετε μια κλήση σε αυτόν, το ρελέ στην πλακέτα θα κλείσει για 1 δευτερόλεπτο, δίνοντας έτσι εντολή στον ενεργοποιητή (πύλη, φράγμα) να ανοίξει. Εάν ο αριθμός σας δεν βρίσκεται στη βάση δεδομένων, τότε θα ακούτε τακτικά μπιπ στο τηλέφωνο και το φράγμα δεν θα ανοίξει.

Πώς να προσθέσετε/διαγράψετε έναν αριθμό σε έναν ελεγκτή GSM;

Ανάλογα με το μοντέλο του ελεγκτή, συνοδεύεται από το δικό του λογισμικό για υπολογιστή ή smartphone, καθώς και τις δικές του εντολές για προσθήκη και διαγραφή αριθμού μέσω SMS. Είναι πιο βολικό να χρησιμοποιείτε υπολογιστή για να προσθέτετε αριθμούς. Αυτό σας επιτρέπει να δημιουργήσετε μια βάση δεδομένων με αριθμούς στον υπολογιστή σας και, στη συνέχεια, να τη πραγματοποιήσετε λήψη μέσω καλωδίου USB στον ελεγκτή. Υπάρχουν ελεγκτές GSM με τη δική τους υπηρεσία cloud. Τι σημαίνει? Η υπηρεσία cloud σάς επιτρέπει να προσθέτετε και να διαγράφετε αριθμούς μέσω Διαδικτύου, χωρίς να συνδέετε καλώδιο USB σε αυτό. Αυτό είναι πολύ βολικό, αλλά υπάρχει ένα μειονέκτημα - η κάρτα SIM θα καταναλώσει την κίνηση στο Διαδίκτυο.

Πώς να συνδέσετε έναν ελεγκτή GSM;

Η σύνδεση για όλες τις μονάδες είναι σχεδόν η ίδια. Η πλακέτα διαθέτει ένα μπλοκ ακροδεκτών για τη σύνδεση ισχύος 12-24 Volt, ένα μπλοκ εξόδου ρελέ NO - COM (κανονικά ανοιχτή λειτουργία), στο οποίο είναι συνδεδεμένο το καλώδιο από τις επαφές ελέγχου της πλακέτας. Η ισχύς για τη μονάδα GSM λαμβάνεται συνήθως από την πλακέτα ελέγχου αυτοματισμού, για παράδειγμα από τους κινητήρες Doorhan, AN, η πλακέτα έχει ακροδέκτες 12 Volt. BFT, Came - 24 Volt.

Τι τιμολόγιο πρέπει να επιλέξω για έναν ελεγκτή GSM;

Τις περισσότερες φορές, προτείνουμε ένα τιμολόγιο χωρίς μηνιαία χρέωση. Πριν αγοράσετε μια κάρτα SIM, πρέπει να προσδιορίσετε ποιος πάροχος έχει καλύτερη ποιότητα επικοινωνίας σε μια συγκεκριμένη τοποθεσία. Για ελεγκτές GSM που χρησιμοποιούν δεδομένα κινητής τηλεφωνίας, συνιστούμε τη σύνδεση ενός πακέτου κίνησης στο Διαδίκτυο, όπως το ELDES Esim 320. Το οποίο λειτουργεί μέσω Διαδικτύου.


Γειά σου!
Εδώ προέκυψε το καθήκον της διαχείρισης μιας εξοχικής κατοικίας, παρακολούθησης της θερμοκρασίας, των θυρών και των παραθύρων. Και τότε προέκυψε το ερώτημα σχετικά με το μέσο μετάδοσης δεδομένων. Λοιπόν, καλώδια και ραδιοφωνικό κανάλι δεν χρειάζονται πλέον λόγω του υψηλού κόστους, οι γραμμές επικοινωνίας με οπτικές ίνες είναι απλώς ένα όνειρο, αλλά το GSM είναι αυτό που χρειάζεστε. Στην αρχή το μάτι μου έπεσε στα παλιά τηλέφωνα "Motorola", "Nokia", "SonyEricsson". Κοίταξα, γύρισα και άλλαξα γνώμη. Πρώτον, δεν ήθελα να κολλήσω στις επαφές του κουμπιού και δεν υπήρξαν σχόλια. Δεύτερον, η κατανόηση του λογισμικού του τηλεφώνου δεν είναι καθόλου χρήσιμη. Γενικά, μέσα από τη δημιουργική σκέψη και το κολύμπι στην απεραντοσύνη του Παγκόσμιου Ιστού, έχοντας κολλήσει δυο ιούς, βρέθηκε ένας συμβιβασμός. Και δουλέψτε με λογισμικό και χωρίς κανένα κουμπί. Όλα αυτά προσφέρονται από τη μονάδα SIM900D. Γιατί μου άρεσε;
- Το πρώτο είναι η ευκολία εγκατάστασης. Θα το δείτε αργότερα. - Το δεύτερο είναι η επικοινωνία μέσω UART. (Αυτό σημαίνει MK + SIM900D = κανονική επικοινωνία) - Το τρίτο είναι το τροφοδοτικό της μονάδας από 3 έως 4,8 βολτ. Hosh AVR, hosh ARM. Γεύση. Λοιπόν, αρκετά με τους στίχους, ήρθε η ώρα να ασχοληθείτε.
Αυτή η ενότητα μοιάζει με αυτό.

Σχετικά με την εγκατάσταση. Όπως μπορείτε να δείτε, η μονάδα έχει σχεδιαστεί για επιφανειακή τοποθέτηση. Οι διαστάσεις των μαξιλαριών επαφής είναι αρκετά μεγάλες ακόμα και για LUT. Παρακάτω είναι μια εικόνα της συσκευής μου.

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

Ναι, υπάρχουν πολλά πράγματα, αλλά δεν θα τα χρησιμοποιήσουμε όλα. Το πρώτο πράγμα που πρέπει να κάνουμε είναι να δέσουμε όλες τις ακίδες "GND" μεταξύ τους. Αν κοιτάξετε στην επάνω δεξιά γωνία, θα παρατηρήσετε τρεις ξεχωριστές καρφίτσες. Δύο "GND" και "ANT". Αυτά τα συμπεράσματα εντοπίζονται έτσι για κάποιο λόγο. Ας δούμε την τεκμηρίωση για μια εικόνα της σύνδεσης της κεραίας.

Οι επαφές 59 και 61 θα πρέπει να είναι όσο το δυνατόν πιο κοντά στο τερματικό της κεραίας. Απαιτούνται πρόσθετα κυκλώματα που επισημαίνονται με διακεκομμένες γραμμές για τη σύνδεση κεραιών με καλώδιο. Ως εκ τούτου, κόλλησα το βύσμα SMA όσο το δυνατόν πιο κοντά στις ακίδες 59, 60, 61 και δεν ασχολήθηκα με το αντίστοιχο κύκλωμα, ενώ με κεραία σε καλώδιο 3 μέτρων και σε μέρος με πολύ κακή λήψη, έσφιξα 13 πόντους. από 31 από τη μονάδα Ο σύνδεσμος είναι ορατός στην παραπάνω εικόνα. Πιο συγκεκριμένα, τα πόδια είναι από αυτό)) Ο ίδιος ο σύνδεσμος βρίσκεται στην άλλη πλευρά. Σε αυτή την περίπτωση, οι επαφές 59 και 61 φαίνεται να αγκαλιάζουν την κεραία. Λοιπόν, κάτι τέτοιο. Στη συνέχεια, ας μιλήσουμε για την κάρτα SIM. Για να το εγκαταστήσω, χρησιμοποίησα αυτόν τον σύνδεσμο (SIM ICA-501-006-01-F7)

Το πιο ενδιαφέρον είναι ότι βρήκα 3 επιλογές για pinout καρτών SIM. Ποιο να χρησιμοποιήσω; Δεν θα παρουσιάσω καμία ίντριγκα, αλλά για απλότητα, θα δώσω το pinout αυτού του συνδέσμου. Θέα από ψηλά.

Αλλά δεν είναι μόνο αυτό. Αν κοιτάξετε στο εγχειρίδιο το διάγραμμα σύνδεσης για την κάρτα SIM, μπορείτε να δείτε εκεί ένα συγκεκριμένο μικροκύκλωμα που ονομάζεται SMF05C. Αυτό το μικροκύκλωμα περιέχει έως και 5 προστατευτικές διόδους. Απαιτείται για την προστασία των επαφών της κάρτας SIM. Φυσικά, δεν χρειάζεται να το εγκαταστήσετε, αλλά μετά προσέξτε και μην αγγίζετε τις επαφές με τα δάχτυλά σας!!! Ως αμαρτωλός άνθρωπος, δεν μπορώ να εγγυηθώ για τον εαυτό μου, έτσι κόλλησα το mikruhu. Και εδώ είναι το ίδιο το διάγραμμα.

Δίνεται βέβαια για κάρτα SIM 8 ακίδων, αλλά για 6άρι θα είναι το ίδιο. Υπάρχουν πραγματικά δύο προβλήματα με αυτό το μικροκύκλωμα. Το πρώτο είναι ότι όπου στο διάολο μπορείς να τη βρεις. Και το δεύτερο είναι το μέγεθός του... Όταν παρέλαβα την παραγγελία και το έβγαλα, το έβαλα στο τραπέζι... Εν ολίγοις, στη δεύτερη εικόνα από πάνω είναι κολλημένο μεταξύ της κάρτας SIM και της μπαταρίας. Για σύγκριση, οι αντιστάσεις είναι 0805. Λοιπόν, στα δεξιά είναι ένα τρανζίστορ σε πακέτο SOT-23. Έτσι, φαίνεται ότι έχουμε τακτοποιήσει την κάρτα SIM, ας προχωρήσουμε. Και μετά τεχνολογία φωτισμού. Γενικά, δεν είναι επίκτητη γεύση. Δεδομένου ότι όλα αυτά τα σήματα μπορούν να εισαχθούν απευθείας στο MK και αφήστε το να το ταξινομήσει μόνο του. Τους έβγαλα όλους από την αίσθηση της ομορφιάς τους. Αποφασίστε λοιπόν μόνοι σας.
- Το πρώτο είναι το σήμα αν η μονάδα είναι ενεργοποιημένη ή όχι (STATUS) log 1 - Το δεύτερο είναι το σήμα ότι το δίκτυο είναι καταχωρημένο (NETLIGHT) log 1/0 (αναβοσβήνει) Εάν αναβοσβήνει με την ίδια συχνότητα, σημαίνει Δεν έχει εγγραφεί στο δίκτυο Εάν υπάρχει μεγάλο κενό, σημαίνει ότι υπάρχει σύνδεση με το δίκτυο. - Το τρίτο είναι το αρχείο καταγραφής σήματος κλήσης/sms (RING) 0 Ανάβει εάν υπάρχει εισερχόμενη κλήση και αναβοσβήνει όταν λαμβάνεται ένα μήνυμα SMS. Τα δύο πρώτα σήματα πρέπει να συνδεθούν μέσω ενός τρανζίστορ NPN σε λειτουργία μεταγωγής.

Και το τρίτο σήμα (RING) πρέπει να συνδεθεί μέσω τρανζίστορ PNP. Ένα άλλο σημαντικό σήμα είναι το κουμπί για την ενεργοποίηση και απενεργοποίηση της μονάδας. (Πού θα ήμασταν χωρίς αυτήν). Αυτό μας προσφέρει το εγχειρίδιο.

Δηλαδή εφαρμόσαμε το log 1 στη βάση του τρανζίστορ για 1 δευτερόλεπτο και η μονάδα ενεργοποιήθηκε.
Τώρα ας μιλήσουμε για τη διατροφή. Ναι, δεν θα με πείραζε τώρα ένα καλό πιάτο πάλης, έτσι; Εντάξει, ας προχωρήσουμε. Η μονάδα τροφοδοτείται από τάση 3 έως 4,8 βολτ. Όλα φαίνονται απλά, αλλά δεν είναι. Κατά την πραγματοποίηση κλήσης, την αποστολή SMS ή την αναζήτηση δικτύου, η μονάδα ενδέχεται να απαιτεί έως και 2Α. Ουάου. Έτσι, οι λάτρεις του LM7805 και του Krenok μπορεί να απογοητευτούν. Ευτυχώς, το εγχειρίδιο περιέχει δύο κυκλώματα που βασίζονται στα μικροκυκλώματα MIC29302 (δεν το βρήκα ποτέ στην πώληση) και LM2596 (μπορείτε να αγοράσετε αυτό). Αλλά είμαι τεμπέλης και απλά δεν ήθελα να συναρμολογήσω το κεφαλάρι με τόσο δέσιμο. Έψαξα στο Διαδίκτυο και το βρήκα. Υπάρχει ένας τόσο καλός σταθεροποιητής για επεξεργαστές όπως "Stump", "AMD" στα 3,3V και έως 7,5A. Λοιπόν, νομίζω ότι αυτό χρειάζεστε και μπορείτε να τροφοδοτήσετε το ARM και τη μονάδα. Εδώ είναι ένα διάγραμμα αυτού του θαύματος.

Και εδώ είναι πώς φαίνεται συναρμολογημένο.

Τοποθέτησα το καλοριφέρ από φόβο καταρχήν, το μικροκύκλωμα δεν θερμαίνεται ούτε κατά τη διάρκεια μιας κλήσης. Και το τελευταίο πράγμα που πρέπει να προσέξεις είναι η μπαταρία. Χρειάζεται για να διατηρείται ζωντανό το ρολόι του πραγματικού χρόνου. Το πιο σημαντικό είναι ότι δεν μπορείτε να αφήσετε αυτό το συμπέρασμα στον αέρα. Προσωπικά, συμφώνησα να συνδέσω την μπαταρία, κάτι που σας εύχομαι. Μπορείτε, φυσικά, να κολλήσετε δύο AA)) αλλά είναι κάπως πολύ μεγάλο, αλλά με τη μορφή tablet 2032 στα 3v είναι αυτό που χρειάζεστε. Ευτυχώς, δεν είναι ακριβά και τα διαμερίσματα μπορούν να συγκολληθούν απευθείας στην πλακέτα. Κατά τη γνώμη μου αυτή είναι η απλούστερη λύση. Εσύ αποφασίζεις. Λοιπόν, αυτό είναι όλο. Έτσι μοιάζει όλο αυτό το αίσχος μαζί και σε κατάσταση λειτουργίας.

Στο επόμενο άρθρο θα σας πω πώς έσπασα αυτήν την ενότητα, αλλά μέσω προγραμματισμού μέσω του τερματικού χρησιμοποιώντας εντολές AT.
Έκανα τα διαγράμματα στο PCAD-2006
Αρχειοθέτηση με αρχεία μονάδας GSM.
Αρχειοθέτηση με αρχεία μπλοκ σταθεροποίησης.
Συνέχεια της σειράς άρθρων για τη μονάδα GSM.
Εντολές ΑΤ.
Επικοινωνία της ενότητας με το ATmega8515.
Πλακέτα ανάπτυξης βασισμένη σε SIM900D


Φολή 14/03/13

Θα ήθελα να μάθω περισσότερα για τις εντολές AT, το UART και την άμεση εργασία με αυτό στο CodeVision

Alexey 15/03/13

Καταλαβαίνω τις εντολές AT. Δεν θέλω να δημοσιεύσω τη μισή δουλειά γιατί έχω κάποιες ερωτήσεις. Αλλά με το UART και το CVAVR όλα είναι απλά. Μόλις καταλάβω τις εντολές AT, θα δημοσιεύσω αμέσως ποιες εντολές και πώς να τις υποβάλω από το CVAVR.

Anatok 04.11.13

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

Alexey 04.11.13

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

Αρκούδα 11.11.13

Αν εξακολουθεί να είναι σχετικό και ενδιαφέρον...δείτε το EAT για SIM900. Μέσα στο ARM υπάρχει ένα SDK στο οποίο μπορείτε να φορτώσετε εφαρμογές στη SIM900 από την οποία μπορείτε να κάνετε πολλά πράγματα... πχ να στείλετε τις ίδιες εντολές AT... + πληκτρολόγιο + οθόνη SPI... + 2 ADC :) Να έχετε ένα διασκεδαστικό βράδυ :)

Αρκούδα 11.11.13

Αλλά εξακολουθεί να είναι πολύ ωραίο να τροφοδοτείτε το L5973D. Ναι, είναι γραμμένο για 2Α στο φύλλο δεδομένων... αλλά στην πράξη πρόκειται για πολύ βραχυπρόθεσμες παρορμήσεις. Λειτουργεί εξαιρετικά για μένα, για παράδειγμα, με το Arduino Mega, το οποίο τροφοδοτείται από μια θύρα USB (η οποία έχει ρεύμα 0,5 A)

Alexey 11.11.13

Αυτό είναι το τρίψιμο. Στην αρχή το τροφοδοτούσα και από το 7805, όλα δούλευαν και μετά μπαμ... Και όταν συνδεθεί στο δίκτυο σβήνουν όλα και μετά κάνει επανεκκίνηση. Προφανώς ο σκύλος φύλακας ξαναρχίζει μετά από μια επίθεση σίτισης. Και με το L7953D θα είναι όμορφο, αλλά που μπορώ να το πάρω και πόσο θα κοστίσει :) Οπότε άλλαξα στο IRU1075

Alexey 11.11.13

Ζητώ συγγνώμη για τα λάθη, είναι ο καταραμένος GOODROYD που μου σμιλεύει τους κραυγές. Νομίζει ότι είναι πιο έξυπνος. Δεν θα κάνω επεξεργασία, αφήστε την Google να ντρέπεται για τη δουλειά της.

Θείος Μίσα 24/12/13

Όταν κάνω εγγραφή στο δίκτυο Atmega, κάνει επανεκκίνηση. Αν και κοστίζει παλμικό dcdc. Πυκνωτές 200 microfarad. Και μερικές φορές λειτουργεί σταθερά. Έχω ήδη εξαντληθεί.

Alexey 25/12/13

Σχέδιο στο στούντιο. Είναι αρκετά δύσκολο να καταλάβει κανείς το πρόβλημα με λόγια.

Θείος Misha 25/12/13
Θείος Misha 25/12/13

Http://ybex.com/d/tk7kgiefpklpeujb1zbl4lo5 mrkf7ayvci04ouq3.html Το MK τροφοδοτείται από 2,8 (δοκίμασα ακόμα και 3,7) Volt, για να μην παρεμβαίνει ο μετατροπέας στάθμης.

Alexey 25/12/13
Σεργκέι 19/07/14

Γεια σου Alexey! Έχεις έτοιμες πλακέτες με sim900 μπορώ να τις αγοράσω;

Alexey 19/07/14

Έτοιμοι με ποια έννοια; Η ίδια η μονάδα έχει ήδη συναρμολογηθεί και το μόνο που μένει είναι να φτιάξουμε μια πλακέτα με τις απαιτούμενες εξόδους και εισόδους για μια συγκεκριμένη συσκευή. Αυτός σε αυτό το άρθρο είναι απλώς ένας πίνακας επίδειξης για τον εντοπισμό σφαλμάτων προγραμμάτων. Μια συγκεκριμένη συσκευή απαιτεί διαστάσεις, θέση υποδοχών, εξόδους ακουστικών και μικροφώνου. Πού θα είναι το βύσμα της κεραίας; Δώστε πιο λεπτομερείς πληροφορίες για το τι χρειάζεστε.

Andrey 28/09/14

Όπως καταλαβαίνω, αυτό είναι ένα πρωτότυπο του κασκόλ που ανυπομονώ να δω. Μόνο στην εμπορική έκδοση παντρεύτηκε με τροφοδοτικό και αναβαθμίστηκε με εξόδους ήχου. Ότι υπάρχει μεγάλος θόρυβος.

Alexey 28/09/14

Στην πραγματικότητα είναι. Μόλις σκότωσα πολλά πουλιά με μια πέτρα. Λύθηκε το παλιό πρόβλημα με την τροφοδοσία και την αντιστοίχιση στάθμης στο UART. Και για κομψή πρόσθετη είσοδο και έξοδο ήχου. Στην πραγματικότητα ένα έτοιμο κινητό.

Andrey 28/09/14

Θα ήθελα να κάνω μια συμβολή για το μέλλον. Στην πραγματικότητα, αυτός ο πίνακας είναι μια πλήρης μονάδα. Και μπορεί ΠΡΑΚΤΙΚΑ να χρησιμοποιηθεί στο τελικό προϊόν. ωστόσο, υπάρχει ένα ΑΛΛΑ. Με ένα κουβούκλιο μεσόνιου, είναι καλύτερα να το τοποθετήσετε από πάνω (βύσμα κεραίας, πρόσβαση στην κάρτα SIM), επομένως είναι πολύ σκόπιμο να αφήνετε τρύπες παράλληλες σε όλες τις ακίδες για τα "περιφερειακά" για τις ίδιες ακίδες με δυνατότητα συγκολλώντας τα προς την «κάτω» κατεύθυνση. Εκείνοι. Ήθελα να συνδέσω αυτήν τη συσκευή σε μια πλακέτα μικροελεγκτή, τη δρομολόγησα στη δική σας, κόλλησα τις συνδέσεις σύνδεσης σε αυτήν και τη σύνδεσα. Επίσης με

Andrey 28/09/14

Έφαγα το μισό μήνυμα, αλλά ελπίζω η ιδέα να είναι ξεκάθαρη-)

Alexey 28/09/14
Σεργκέι 02/01/15

Πείτε μου γιατί η μονάδα θερμαίνεται και δεν συνδέεται στο δίκτυο;

Alexey 02/01/15

Υπάρχουν διάφοροι λόγοι για αυτό. Πρώτον, η διατροφή γίνεται υπέρβαση. Δεύτερον, το συν πήγε στο γενικό; Πρέπει να κοιτάξετε προσεκτικά τα πόδια δύναμης. Τρίτον, εάν η κοιλιά της μονάδας αγγίζει τις γραμμές παροχής. Υπάρχουν αρκετές τεχνολογικές επαφές στην κοιλιά που πρέπει να απομονωθούν από τυχόν αγωγούς. Τέταρτον, είναι βραχυκυκλωμένος ο ακροδέκτης της κεραίας στον κοινό ακροδέκτη; Για να είμαστε πιο ακριβείς, πρέπει να κοιτάξετε τον πίνακα. Στείλτε μου το τέλος μέσω email και θα δω αν υπάρχει κάτι λάθος εκεί.

Σεργκέι 02/01/15

Έχω εργοστασιακές πλακέτες MasterKit BM8039 και οι δύο έχουν το ίδιο πρόβλημα... όταν βάζεις κάρτα SIM αρχίζει να ζεσταίνεται η μονάδα και δεν υπάρχει δίκτυο.

Alexey 02/01/15

Είναι αρκετά δύσκολο να πούμε. Το κύκλωμα είναι εργοστασιακό, πρέπει να ανέβεις στην πλακέτα. Από την τεκμηρίωση είναι σαφές ότι η πλακέτα δεν έχει τις προτεινόμενες προστατευτικές διόδους για την κάρτα SIM. Η ίδια η κάρτα και το βύσμα έχουν τις ίδιες ακίδες; Η μονάδα 300 είναι παλιά και κατά τη γνώμη μου λειτουργεί μόνο με κάρτες SIM 5V, αλλά τώρα είναι όλες 3V. Αλλά μπορεί να κάνω λάθος. Πρέπει να κοιτάξεις τον ίδιο τον πίνακα, είναι τόσο δύσκολο να πεις οτιδήποτε. Αν το σύμπτωμα είναι το ίδιο και στα δύο, τότε θα έπεφτα προς την κατεύθυνση του βύσματος και της τάσης των καρτών SIM. Για άλλη μια φορά, οι σύγχρονες κάρτες SIM είναι 3 volt.

Σεργκέι 02/01/15

Κοστίζει sim900D...δεν υπάρχουν δίοδοι όταν βάζω την κάρτα εμφανίζεται ρεύμα στο module και αρχίζει να ζεσταίνεται, αλλά για παράδειγμα στην κάρτα SIM. δεν δουλεύει από 9 πόδια...

Σεργκέι 02/01/15

Αρχικά δούλευαν καλά... μετά κάτι πήγε στραβά... Δεν μπορώ να καταλάβω τι..

Σεργκέι 02/01/15

Υπάρχει κάποιος τρόπος να ελέγξω τη μονάδα χωρίς να την αποκολλήσω;

Alexey 02/01/15

Τι ακριβώς βραχυκύκλωσε; Εάν δεν υπάρχει ρεύμα στην κάρτα SIM, τότε φοβάμαι ότι η γραμμή για την κάρτα SIM είναι νεκρή. Πόσα πόδια έχει η Simka; 6 ή 8; Για έλεγχο, μπορείτε να επικοινωνήσετε με τη μονάδα μέσω του διαύλου UART 3, 4 leg χωρίς να τοποθετήσετε κάρτα SIM. Αν αρνηθεί να δεχτεί εντολές ΑΤ, τότε νομίζω ότι μπορούμε να τον θάψουμε.

ΑΝΩΝΥΜΟΣ 01/02/15

Δεν ξέρω τι ακριβώς το βραχυκύκλωσε .. 8 πόδια .. αλλά πώς να επικοινωνήσω;

Alexey 02/01/15

Υπάρχει και 8 στο βύσμα; Πάρτε το τσιπ FT232RL και συναρμολογήστε τον προσαρμογέα USB<->TTL, κολλήστε στο UART της μονάδας, ξεκινήστε ένα τερματικό, για παράδειγμα Putty, γράψτε AT και πατήστε enter. Αν επιστρέψει ΟΚ, τότε δεν χάνονται όλα. Αν υπάρχει σιωπή... Στα σκουπίδια. Και ναι, τι είδους LED υπάρχουν στην πλακέτα; Πώς καθορίζεται η εγγραφή στο δίκτυο;

Σεργκέι 02.02.15 03:12

Υπάρχουν και 8 στην υποδοχή...υπάρχουν δύο LED στην πλακέτα, πράσινο και κόκκινο, η παρουσία δικτύου καθορίζεται από το πράσινο φως που αναβοσβήνει μία φορά κάθε τρία δευτερόλεπτα...μπορώ να βάλω κάπως μια φωτογραφία της πλακέτας ?

Alexey 02.02.15 07:42

Είναι πιο εύκολο να πας στο φόρουμ.

Σεργκέι 02.02.15 14:02

Εάν δεν τοποθετήσετε κάρτα SIM, σημαίνει ότι πρέπει να τροφοδοτήσετε τη μονάδα με ρεύμα;

Alexey 02.02.15 15:48

Δεν μπορώ να διαβάσω φύλλα τσαγιού. Χρειάζομαι είτε ένα σχηματικό είτε έναν πίνακα. Και τι σχέση έχει το τροφοδοτικό της μονάδας και της κάρτας SIM; Πιθανότατα διασταυρώνεται με κάποιον άλλο μικροελεγκτή. Προμηθεύει τρόφιμα. Γενικά, χρειάζεστε ένα διάγραμμα. Και είναι σαν να κάνεις διάγνωση μέσω τηλεφώνου.

Σεργκέι 02.02.15 15:56

Πού στο φόρουμ μπορώ να δημοσιεύσω το διάγραμμα;

Σεργκέι 02.02.15 15:57

Η τροφοδοσία έρχεται στη μονάδα μόνο όταν τοποθετείτε μια κάρτα SIM

Alexey 02.02.15 19:27

Λοιπόν, η μονάδα SIM900D δεν το έχει αυτό. Για να ενεργοποιήσετε τη μονάδα, πρέπει να κρατήσετε το χαμηλό επίπεδο στο πόδι 12 και μετά να το σηκώσετε. Η κάρτα SIM δεν μπορεί να τοποθετηθεί ή να αφαιρεθεί καθόλου όταν η μονάδα είναι ενεργοποιημένη, υπάρχει πιθανότητα να καεί η θύρα. Αν κοιτάξετε την τεκμηρίωση, μπορείτε να βρείτε συστάσεις εκεί για την εγκατάσταση προστατευτικών διόδων στη γραμμή θύρας κάρτας SIM. Στο φόρουμ. Δημιουργήστε ένα θέμα και δημοσιεύστε μια φωτογραφία.

Evgeniy 09/08/15 12:04

Όταν εφαρμόζω τάση στη μονάδα, υπάρχει θετικό δυναμικό στο 12ο σκέλος και θετικό δυναμικό στο 5ο σκέλος (υπό την προϋπόθεση ότι αυτά τα πόδια κρέμονται στον αέρα). Παρακαλώ πείτε μου, υποτίθεται ότι υπάρχει μηδέν στο 5ο σκέλος; Αν όχι, διορθώστε με.

Alexey 09/08/15 13:21

Το 12ο σκέλος είναι η συμπερίληψη της ενότητας. Όταν εφαρμόζεται τροφοδοσία, το 1 κρέμεται σε αυτό Για να ενεργοποιήσετε τη μονάδα, πρέπει να πιέσετε το 12ο πόδι στο κοινό καλώδιο για μερικά δευτερόλεπτα, δηλαδή, να εφαρμόσετε 0. Όταν παρέχεται ρεύμα στη μονάδα 5, το πόδι πρέπει να είναι. να τραβηχτεί στο κοινό καλώδιο από δύο αντιστάσεις (αυτό φαίνεται από το διάγραμμα σύνδεσης τρανζίστορ σε λειτουργία διακόπτη) και θα πρέπει να είναι 0, αφού η βάση πρέπει να τραβηχτεί μέχρι το μηδέν για να κλείσει τελείως το τρανζίστορ. Αφού πατήσετε το 12ο σκέλος στο μηδέν, θα πρέπει να εμφανιστεί το 1 στο 5ο σκέλος και μετά από λίγο ένας μαίανδρος που υποδεικνύει την κατάσταση διαθεσιμότητας και σύνδεσης στο δίκτυο.

mob_info