- Κιτ ανάπτυξης nRF52:
- Segger Embedded Studio
- DHT11 με nRF52DK
- Πώς να εργαστείτε με Bluetooth χαμηλής ενέργειας (BLE);
- Διάγραμμα υπηρεσίας / χαρακτηριστικών BLE
- Επεξήγηση προγράμματος nRF52 BLE
- Δοκιμή του προγράμματός μας χρησιμοποιώντας το nRF Connect
Με τις ζώνες γυμναστικής, τα έξυπνα ρολόγια και άλλες φορητές συσκευές να γίνονται όλο και πιο δημοφιλή η χρήση του Bluetooth 5 / Bluetooth χαμηλής ενέργειαςΤα πρότυπα επικοινωνίας υιοθετούνται ευρέως. Το BLE μας βοηθά να ανταλλάσσουμε δεδομένα σε μικρή απόσταση με πολύ μικρή ισχύ, κάτι που είναι πολύ σημαντικό για συσκευές που λειτουργούν με μπαταρία, όπως τα φορητά. Μας βοηθά επίσης να δημιουργήσουμε ασύρματα δίκτυα πλέγματος BLE, αυτή η λειτουργία είναι χρήσιμη για συσκευές οικιακού αυτοματισμού όπου πολλές συσκευές πρέπει να επικοινωνούν μεταξύ τους σε κλειστό περιβάλλον. Έχουμε ήδη χρησιμοποιήσει το BLE με Raspberry Pi και το BLE με ESP32 για να εκτελέσουμε κάποιες βασικές λειτουργίες BLE. Οι μηχανικοί πειραματίζονται με το BLE για να σχεδιάσουν φορητές ασύρματες συσκευές που μπορούν να λειτουργούν για μεγάλο χρονικό διάστημα σε μικρές μπαταρίες και, υπάρχουν πολλά κιτ ανάπτυξης που είναι διαθέσιμα για εργασία με το BLE. Στην πρόσφατη αναθεώρησή μας για το Arduino Nano 33, παρατηρήσαμε επίσης ότι ο πίνακας διαθέτει nRF52840 με δυνατότητες BLE.
Σε αυτό το σεμινάριο, θα διερευνήσουμε έναν άλλο συναρπαστικό και δημοφιλή πίνακα ανάπτυξης που ονομάζεται nRF52 DK για τη μέτρηση της θερμοκρασίας και της υγρασίας χρησιμοποιώντας το BLE. Από προεπιλογή, το BLE Environment Sensing Profiles υποστηρίζει ένα ευρύ φάσμα περιβαλλοντικών παραμέτρων, αλλά αυτό το σεμινάριο περιορίζεται μόνο σε τιμές θερμοκρασίας και υγρασίας. Αυτή η λύση συνδέεται με ένα Smartphone μέσω Bluetooth χαμηλής ενέργειας και παρέχει μια συχνή ενημέρωση σχετικά με τις περιβαλλοντικές παραμέτρους, π.χ. Θερμοκρασία, Υγρασία. Θα χρησιμοποιήσουμε τον αισθητήρα DHT1 και η μέτρηση της θερμοκρασίας θα γίνει με ανάλυση 0,01 βαθμών Κελσίου και η μέτρηση υγρασίας θα γίνει με ανάλυση 0,01 τοις εκατό.
Κιτ ανάπτυξης nRF52:
Το nRF52DK είναι μια πλήρης πρωτότυπη πλατφόρμα για εφαρμογή Bluetooth Low Energy και 2,4 GHz Wireless Internet of Things. Το κιτ ανάπτυξης υποστηρίζει διάφορα τυπικά Nordic Toolchains όπως ανοιχτού κώδικα, GCC και εμπορικά περιβάλλοντα ολοκληρωμένης ανάπτυξης όπως Keil, IAR και Segger Embedded Studio κ.λπ. Το Nordic παρέχει επίσης ένα πλήρες κιτ ανάπτυξης λογισμικού για το nRF52, το οποίο περιλαμβάνει πλήρη υποστήριξη για το nRF52DK.
Το nRF52DK τροφοδοτείται με μικροελεγκτή nRF52832 ARM Cortex-M4F, ο οποίος είναι ενσωματωμένος 512Kbytes μνήμης flash και 64 Kbytes SRAM. Το nRF52DK διαθέτει ενσωματωμένο πρόγραμμα εντοπισμού σφαλμάτων Segger J-Link On Board, που παρέχει ευκολότερο και ταχύτερο εντοπισμό σφαλμάτων χωρίς εξωτερική / πρόσθετη συσκευή εντοπισμού σφαλμάτων jtag. Περιλαμβάνει επίσης το συμβατό με το Arduino Uno Rev3 βύσμα, που υποστηρίζει τη διασύνδεση των αναλογικών και ψηφιακών εισόδων με τον μικροεπεξεργαστή και περιλαμβάνει επίσης τυπικά πρωτόκολλα επικοινωνίας όπως, I2C (Inter-Integrated Circuit), SPI (Serial Peripheral Interface) και UART (Universal Asynchronous Receiver and Transmitter). Αυτό το κιτ ανάπτυξης έχει σχεδιαστεί με ενσωματωμένη κεραία PCB που παρέχει ασύρματη επικοινωνία μικρής εμβέλειας χρησιμοποιώντας Bluetooth Low Energy για σύνδεση με έξυπνο τηλέφωνο, φορητούς υπολογιστές και tablet.
Segger Embedded Studio
Για να προγραμματίσουμε τον πίνακα ανάπτυξης, θα χρησιμοποιήσουμε το Segger Embedded Studio με nRF52. Το Segger Embedded Studio είναι ένα ισχυρό περιβάλλον ολοκληρωμένης ανάπτυξης (IDE) C / C ++ που στοχεύει ειδικά για την ανάπτυξη ενσωματωμένων συστημάτων. Αυτό παρέχει μια πλήρη λύση all-in-one που περιέχει όλα όσα χρειάζονται για τον ενσωματωμένο προγραμματισμό, την ανάπτυξη και τον εντοπισμό σφαλμάτων C. Αυτό περιλαμβάνει πλήρη ροή εργασιών για προγραμματισμό και ανάπτυξη ενσωματωμένων συστημάτων, με δυνατότητα διαχείρισης έργου, πρόγραμμα επεξεργασίας, εντοπισμού σφαλμάτων που υποστηρίζει συσκευές ARM Cortex Αυτό το ισχυρό και εύχρηστο IDE είναι εντελώς δωρεάν για σκανδιναβικούς πελάτες με πλήρη άδεια χωρίς περιορισμούς στο μέγεθος του κώδικα. Μπορείτε να κατεβάσετε το IDE από τον παρακάτω σύνδεσμο,
Λήψη Segger Embedded Studio
DHT11 με nRF52DK
Το DHT11 είναι ένας πλήρης χαρακτηριστικός αισθητήρας θερμοκρασίας και υγρασίας με ένα στοιχείο μέτρησης υγρασίας αντίστασης τύπου και ένα στοιχείο μέτρησης θερμοκρασίας τύπου NTC. Προσφέρει εξαιρετική ποιότητα, ταχύτερη απόκριση και οικονομική σχέση. Από προεπιλογή, όλοι οι αισθητήρες DHT11 βαθμονομούνται στο εργαστήριο που οδηγεί σε εξαιρετική ακρίβεια και αξιοπιστία. Επικοινωνεί χρησιμοποιώντας σύστημα σειριακής διασύνδεσης ενιαίου καλωδίου και άλλες προδιαγραφές δίνονται παρακάτω
Προδιαγραφές DHT11:
- Εύρος υγρασίας: 20 - 90% RH
- Εύρος θερμοκρασίας: 0 - 50 βαθμούς Κελσίου
- Ακρίβεια υγρασίας: ± 5 % RH
- Ακρίβεια θερμοκρασίας: ± 2 ℃
Διάγραμμα χρονισμού του DHT11:
Η ανάγνωση των δεδομένων από τον αισθητήρα DHT11 είναι σχετικά απλή χρησιμοποιώντας το διάγραμμα χρονισμού που φαίνεται παραπάνω. Η διαδικασία είναι παρόμοια με οποιονδήποτε ελεγκτή και έχουμε ήδη χρησιμοποιήσει αυτόν τον αισθητήρα με άλλες πλατφόρμες ανάπτυξης όπως
- Αισθητήρας DHT11 με Raspberry Pi
- Αισθητήρας DHT11 με PIC16F877A
- Αισθητήρας DHT11 με STM32F103C8
- Αισθητήρας DHT11 με NodeMCU
Για διασύνδεση του αισθητήρα θερμοκρασίας και υγρασίας DHT11 με το κιτ ανάπτυξης nRF52, ακολουθήστε το διάγραμμα σύνδεσης που δίνεται παρακάτω.
Χρησιμοποιώ μια μονάδα σύνδεσης για να συνδέσω τον αισθητήρα στην πλακέτα μου, οπότε η τελική μου ρύθμιση μοιάζει με αυτό
Διάγραμμα ροής για επικοινωνία με DHT11:
Το παρακάτω διάγραμμα ροής εξηγεί τη λογική ροή του προγράμματος που θα χρησιμοποιούμε για την επικοινωνία μεταξύ nRF52DK και DHT11
Μορφή δεδομένων:
Πώς να εργαστείτε με Bluetooth χαμηλής ενέργειας (BLE);
Για να κατανοήσουμε πώς να χρησιμοποιήσετε τη λειτουργία BLE, πρέπει να κατανοήσουμε μερικές βασικές ορολογίες που εξηγούνται παρακάτω, μπορείτε επίσης να διαβάσετε το άρθρο ESP32 BLE για να μάθετε περισσότερα για το BLE
Γενικό προφίλ πρόσβασης (GAP)
Το Προφίλ Γενικής Πρόσβασης φέρει την πλήρη ευθύνη για τη δημιουργία της σύνδεσης επικοινωνίας μεταξύ περιφερειακών και κεντρικών συσκευών BLE. Το GAP παρέχει επίσης διάφορες διαδικασίες, όπως σάρωση / ανακάλυψη συσκευών, εγκατάσταση σύνδεσης επιπέδου συνδέσμου, τερματισμό συνδέσμου, χειραψία λειτουργιών ασφαλείας και πλήρη διαμόρφωση συσκευών. Το GAP λειτουργεί στις ακόλουθες καταστάσεις συσκευών
Κράτη GAP |
Περιγραφή |
Περίμενε |
Αρχική κατάσταση συσκευής κατά την επαναφορά |
Διαφημιστής |
Διαφήμιση συσκευών με δεδομένα που βοηθούν στη σάρωση εκκινητών |
Ερευνητής |
Λαμβάνει το αίτημα σάρωσης και αποστέλλει στον διαφημιζόμενο |
Μυητής |
Στέλνει ένα αίτημα σύνδεσης για να δημιουργήσει έναν σύνδεσμο |
Δούλος / Δάσκαλος |
Κατά τη σύνδεση, η συσκευή ως σκλάβος εάν διαφημιζόμενος, κυριαρχήσει εάν ένας εκκινητής |
Γενικό επίπεδο προφίλ χαρακτηριστικών (GATT)
Το GATT αντιπροσωπεύει το Generic Attribute Profile Layer, είναι υπεύθυνο για την επικοινωνία δεδομένων μεταξύ δύο συσκευών BLE (Peripheral & Central). Η επικοινωνία δεδομένων χαρακτηρίζεται με τη μορφή χαρακτηριστικών, τα οποία επικοινωνούν και αποθηκεύουν τα δεδομένα. Η συσκευή BLE παίζει δύο διαφορετικούς ρόλους για την επικοινωνία συσκευών που δίνεται παρακάτω,
- Ο διακομιστής GATT περιέχει τις πληροφορίες χαρακτηριστικών που θα χρησιμοποιηθούν για ανάγνωση και εγγραφή. Στο σεμινάριό μας, ο αισθητήρας DHT11 και ο dev. το κιτ είναι ο διακομιστής GATT μας.
- Ο πελάτης GATT διαβάζει και γράφει τα δεδομένα από / προς τον διακομιστή GATT. Το smartphone είναι ένας πελάτης GATT που διαβάζει και γράφει τα δεδομένα στον πίνακα αισθητήρων μας.
Bluetooth SIG
Το Bluetooth Special Interest Group (SIG) είναι ο οργανισμός τυποποίησης που παρακολουθεί την ανάπτυξη προτύπων Bluetooth και την αδειοδότηση των τεχνολογιών Bluetooth. Η ομάδα SIG δεν παράγει ή πωλεί προϊόντα Bluetooth. Καθορίζει τις προδιαγραφές και την τυποποίηση Bluetooth. Καθορίζουν το μοναδικό αναγνωριστικό για προφίλ χαμηλής ενέργειας Bluetooth και τα αντίστοιχα χαρακτηριστικά. Οι προδιαγραφές προφίλ GATT μπορείτε να βρείτε στον παρακάτω σύνδεσμο
Προδιαγραφές προφίλ GATT
Με βάση την προδιαγραφή GATT που δίνεται στον παραπάνω σύνδεσμο, συλλέξαμε τα μοναδικά αναγνωριστικά που απαιτούνται για το έργο μας, τα οποία παρατίθενται παρακάτω.
Προφίλ / Χαρακτηριστικά |
UUID |
GAP (Γενική πρόσβαση) |
0x1800 |
GATT (Γενικό χαρακτηριστικό) |
0x1801 |
ESS (ανίχνευση περιβάλλοντος) |
0x181Α |
Θερμοκρασία |
0x2A6E |
Υγρασία |
0x2A6F |
Διάγραμμα υπηρεσίας / χαρακτηριστικών BLE
BLE UUIDs
UUID |
Τιμή 16 bit |
UUID 128 bit |
Υπηρεσία ESS |
0x181Α |
0000181A-0000-0000-0000-00000000000 |
Temp Char |
0x2A6E |
00002A6E-0000-0000-0000-00000000000 |
Υγρασία Char |
0x2A6F |
00002A6F-0000-0000-0000-00000000000 |
Χαρακτηριστικά θερμοκρασίας
Ιδιοκτησία |
Περιγραφή |
Μονάδα |
Βαθμός Κελσίου με ανάλυση 0,01 βαθμού |
Μορφή |
sint16 |
UUID |
0x2A6E |
Δεκαδικός εκθέτης |
2 |
Ανάγνωση |
Επιτακτικός |
Χαρακτηριστικά υγρασίας
Ιδιοκτησία |
Περιγραφή |
Μονάδα |
Ποσοστό με ανάλυση 0,01 τοις εκατό |
Μορφή |
uint16 |
UUID |
0x2A6F |
Δεκαδικός εκθέτης |
2 |
Ανάγνωση |
Επιτακτικός |
Επεξήγηση προγράμματος nRF52 BLE
Θα χρησιμοποιήσουμε το nRF5 SDK για να προγραμματίσουμε το κιτ ανάπτυξης nRF52. Το nRF5 SDK είναι ένα πλήρες κιτ ανάπτυξης λογισμικού ενσωματωμένο με πολλά προφίλ Bluetooth χαμηλής ενέργειας, GATT Serializer και υποστήριξη προγράμματος οδήγησης για όλα τα περιφερειακά των σειρών nRF5 SoCs. Αυτό το SDK βοηθά τους προγραμματιστές να δημιουργήσουν πλήρως λειτουργίες, αξιόπιστες και ασφαλείς εφαρμογές χαμηλής ενέργειας Bluetooth με σειρές μικροελεγκτών nRF52 και nRF51. Μπορείτε να κατεβάσετε το πλήρες πρόγραμμα από εδώ, η εξήγηση του κώδικα έχει ως εξής.
Διαμορφώστε τον ακροδέκτη DHT11 DATA ως είσοδο στο nrf52 με δυνατότητα pull up. Η κατάσταση του pin πρέπει να είναι υψηλή για να επιβεβαιώσετε ότι το nRF52 παρέχει το κατάλληλο PULLUP για την καρφίτσα δεδομένων DHT11
/ * ορίστε την είσοδο και ελέγξτε αν το σήμα τραβιέται * / Data_SetInput (); ΚαθυστέρησηUSec (50); εάν (Data_GetVal () == 0) {return DHT11_NO_PULLUP; }
Δημιουργήστε σήμα START από τον μικροελεγκτή nRF52 και ελέγξτε για σήμα αναγνώρισης.
/ * αποστολή σήματος έναρξης * / Data_SetOutput (); Δεδομένα_ClrVal (); Καθυστέρηση MSec (20); / * κρατήστε το σήμα χαμηλό για τουλάχιστον 18 ms * / Data_SetInput (); ΚαθυστέρησηUSec (50); / * ελέγξτε για σήμα αναγνώρισης * / εάν (Data_GetVal ()! = 0) {/ * το σήμα πρέπει να τραβηχτεί χαμηλά από τον αισθητήρα * / return DHT11_NO_ACK_0 } / * περιμένετε έως 100 εμάς για το σήμα ack από τον αισθητήρα * / cntr = 18; ενώ (Data_GetVal () == 0) {/ * περιμένετε μέχρι να ανεβεί το σήμα * / DelayUSec (5); εάν (--cntr == 0) {return DHT11_NO_ACK_1; / * Το σήμα πρέπει να είναι ενεργοποιημένο για το ACK εδώ * /}} / * περιμένετε μέχρι να πάει ξανά κάτω, τέλος της ακολουθίας ack * / cntr = 18 ενώ (Data_GetVal ()! = 0) {/ * περιμένετε μέχρι να μειωθεί το σήμα * / DelayUSec (5); εάν (--cntr == 0) {return DHT11_NO_ACK_0; / * Το σήμα θα πρέπει να μηδενιστεί ξανά εδώ * /}}
Τώρα διαβάστε τα 40 bit δεδομένων που περιέχουν 2 byte θερμοκρασίας, 2 byte υγρασίας και 1 byte από ένα checksum.
/ * διαβάστε τώρα τα δεδομένα 40 bit * / i = 0; δεδομένα = 0; loopBits = 40; κάνετε {cntr = 11; / * περιμένετε έως 55 us * / while (Data_GetVal () == 0) {DelayUSec (5); εάν (--cntr == 0) {return DHT11_NO_DATA_0; }} cntr = 15; / * περιμένετε έως 75 us * / while (Data_GetVal ()! = 0) {DelayUSec (5); εάν (--cntr == 0) {return DHT11_NO_DATA_1; }} δεδομένα << = 1; / * επόμενο bit δεδομένων * / εάν (cntr <10) {/ * σήμα δεδομένων υψηλό> 30 us ==> bit δεδομένων 1 * / δεδομένα - = 1; } if ((loopBits & 0x7) == 1) {/ * επόμενο byte * / buffer = δεδομένα; i ++; δεδομένα = 0; }} ενώ (- loopBits! = 0);
Επικυρώστε τα δεδομένα με τη βοήθεια του Checksum.
/ * δοκιμή CRC * / if ((uint8_t) (buffer + buffer + buffer + buffer)! = buffer) {return DHT11_BAD_CRC; }
Χειριστείτε και αποθηκεύστε τη θερμοκρασία και την υγρασία
/ * αποθήκευση τιμών δεδομένων για καλούντα * / υγρασία = ((int) buffer) * 100 + buffer; θερμοκρασία = ((int) buffer) * 100 + buffer;
Αρχικοποιήστε την υπηρεσία καταγραφής SDR nRF5. Το nRF52 SDK διαθέτει μια διεπαφή ελέγχου καταγραφής που ονομάζεται nrf_log και χρησιμοποιεί το προεπιλεγμένο backend για την καταγραφή των πληροφοριών. Το προεπιλεγμένο backend θα είναι μια σειριακή θύρα. Εδώ αρχικοποιούμε και το nrf_log interface interface και το nrf_log default backends
ret_code_t err_code = NRF_LOG_INIT (NULL); APP_ERROR_CHECK (err_code); NRF_LOG_DEFAULT_BACKENDS_INIT ();
Το nRF52 SDK έχει λειτουργίες χρονοδιακόπτη εφαρμογής. Η ενότητα χρονοδιακόπτη εφαρμογής επιτρέπει τη δημιουργία πολλαπλών παρουσιών χρονοδιακόπτη με βάση το περιφερειακό RTC1. Εδώ αρχικοποιούμε τη μονάδα χρονοδιακόπτη εφαρμογής nRF5. Σε αυτήν τη λύση, χρησιμοποιούνται δύο χρονοδιακόπτες εφαρμογών και το διάστημα ενημέρωσης δεδομένων.
ret_code_t err_code = app_timer_init (); APP_ERROR_CHECK (err_code);
Το nRF52 SDK διαθέτει την πλήρη λειτουργική μονάδα διαχείρισης ισχύος, καθώς οι συσκευές BLE πρέπει να λειτουργούν για πολλούς μήνες σε μια μπαταρία Coin. Η διαχείριση ισχύος παίζει ζωτικό ρόλο στις εφαρμογές BLE. Η μονάδα διαχείρισης ισχύος nRF52 χειρίζεται πλήρως το ίδιο. Εδώ αρχικοποιούμε την ενότητα Power Management του nRF5 SDK
ret_code_t err_code; err_code = nrf_pwr_mgmt_init (); APP_ERROR_CHECK (err_code);
Το nRF52 SDK διαθέτει ένα ενσωματωμένο hex αρχείο υλικολογισμικού Nordic Soft Device, το οποίο διαθέτει κεντρική και περιφερειακή στοίβα χαμηλής ενέργειας Bluetooth. Αυτή η στοίβα πρωτοκόλλων υψηλής ειδίκευσης περιλαμβάνει GATT, GAP, ATT, SM, L2CAP και Link Layer. Εδώ ακολουθούμε την ακολουθία αρχικοποίησης, που αρχικοποίησε το nRF5 BLE Radio Stack (Nordic Soft Device)
ret_code_t err_code; err_code = nrf_sdh_enable_request (); APP_ERROR_CHECK (err_code); // Διαμορφώστε τη στοίβα BLE χρησιμοποιώντας τις προεπιλεγμένες ρυθμίσεις. // Λήψη της αρχικής διεύθυνσης της εφαρμογής RAM. uint32_t ram_start = 0; err_code = nrf_sdh_ble_default_cfg_set (APP_BLE_CONN_CFG_TAG και ram_start); APP_ERROR_CHECK (err_code); // Ενεργοποίηση στοίβας BLE. err_code = nrf_sdh_ble_enable (& ram_start); APP_ERROR_CHECK (err_code); // Καταχωρίστε έναν χειριστή για εκδηλώσεις BLE. NRF_SDH_BLE_OBSERVER (m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL).
Το GAP είναι υπεύθυνο για τη σάρωση / ανακάλυψη συσκευών, τη δημιουργία συνδέσμων, τον τερματισμό συνδέσμου, την έναρξη λειτουργιών ασφαλείας και διαμόρφωσης. Το GAP έχει εμφανιστεί με βασικές παραμέτρους σύνδεσης, όπως διάστημα σύνδεσης, λανθάνοντα χρόνο λειτουργίας, χρονικό όριο επίβλεψης κ.λπ.
ret_code_terr_code; ble_gap_conn_params_tgap_conn_params; ble_gap_conn_sec_mode_t sec_mode; BLE_GAP_CONN_SEC_MODE_SET_OPEN (& sec_mode); err_code = sd_ble_gap_device_name_set (& sec_mode, (const uint8_t *) DEVICE_NAME, strlen (DEVICE_NAME)); APP_ERROR_CHECK (err_code); memset (& gap_conn_params, 0, sizeof (gap_conn_params)); gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL; gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL; gap_conn_params.slave_latency = SLAVE_LATENCY; gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT; err_code = sd_ble_gap_ppcp_set (& gap_conn_params); APP_ERROR_CHECK (err_code);
Η GATT είναι υπεύθυνη για την επικοινωνία δεδομένων μεταξύ περιφερειακών και κεντρικών συσκευών BLE. Η ενότητα nRF52 GATT είναι χρήσιμη για τη διαπραγμάτευση και την παρακολούθηση του μέγιστου μεγέθους ATT_MTU. Εδώ αρχικοποιούμε το nRF52 SDK Generic Attribute Module, ret_code_t err_code = nrf_ble_gatt_init (& m_gatt, NULL); APP_ERROR_CHECK (err_code);
Η GATT κάνει επικοινωνία δεδομένων με τη μορφή υπηρεσιών και χαρακτηριστικών. Εδώ αρχικοποιούμε τις υπηρεσίες ανίχνευσης περιβάλλοντος GATT, οι οποίες περιλαμβάνουν την αρχικοποίηση χαρακτηριστικών όπως η θερμοκρασία και η υγρασία.
ret_code_terr_code; nrf_ble_qwr_init_t qwr_init = {0}; // Αρχικοποιήστε την ενότητα ουράς εγγραφής. qwr_init.error_handler = nrf_qwr_error_handler; err_code = nrf_ble_qwr_init (& m_qwr, & qwr_init); APP_ERROR_CHECK (err_code); m_ess.notif_write_handler = ble_ess_notif_write_handler; err_code = ble_ess_init (& m_ess); APP_ERROR_CHECK (err_code);
Η διαφήμιση διαδραματίζει ζωτικό ρόλο στο περιβάλλον εφαρμογής BLE. Τα πακέτα περιλαμβάνουν τις πληροφορίες για τον τύπο διεύθυνσης, τον τύπο διαφήμισης, τα δεδομένα διαφήμισης, τα δεδομένα για τον κατασκευαστή της συσκευής και τα δεδομένα απόκρισης σάρωσης Το nRF52 SDK διαθέτει μια ενότητα διαφημίσεων. Εδώ κάνουμε αρχικοποίηση της διαφημιστικής ενότητας με τις παραμέτρους.
ret_code_terr_code; ble_advdata_t advdata; ble_advdata_t srdata; ble_uuid_t adv_uuids = {{ESS_UUID_SERVICE, BLE_UUID_TYPE_BLE}}; // Δημιουργήστε και ορίστε δεδομένα διαφήμισης. memset (& advdata, 0, sizeof (advdata)); advdata.name_type = BLE_ADVDATA_FULL_NAME; advdata.include_appearance = true; advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE; memset (& srdata, 0, sizeof (srdata)); srdata.uuids_complete.uuid_cnt = sizeof (adv_uuids) / sizeof (adv_uuids); srdata.uuids_complete.p_uuids = adv_uuids; err_code = ble_advdata_encode (& advdata, m_adv_data.adv_data.p_data, & m_adv_data.adv_data.len); APP_ERROR_CHECK (err_code); err_code = ble_advdata_encode (& srdata, m_adv_data.scan_rsp_data.p_data, & m_adv_data.scan_rsp_data.len); APP_ERROR_CHECK (err_code); ble_gap_adv_params_t adv_params; // Ορισμός παραμέτρων διαφήμισης. memset (& adv_params, 0, sizeof (adv_params)); adv_params.primary_phy = BLE_GAP_PHY_1MBPS; adv_params.duration = APP_ADV_DURATION; adv_params.properties.type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED; adv_params.p_peer_addr = NULL; adv_params.filter_policy = BLE_GAP_ADV_FP_ANY; adv_params.interval = APP_ADV_INTERVAL; err_code = sd_ble_gap_adv_set_configure (& m_adv_handle, & m_adv_data, & adv_params); APP_ERROR_CHECK (err_code);
Το BLE Connection θα χειρίζεται και θα παρακολουθείται με διάφορες παραμέτρους σύνδεσης, όπως η καθυστέρηση ενημέρωσης παραμέτρων πρώτης σύνδεσης, οι επόμενες διαδοχικές καθυστερήσεις, ο αριθμός ενημερώσεων, η λειτουργία επανάκλησης χειριστή συμβάντων σύνδεσης και ο χειριστής συμβάντων επιστροφής σφαλμάτων σύνδεσης. Εδώ κάνουμε αρχικοποίηση παραμέτρων εγκατάστασης σύνδεσης BLE και χειριστής συμβάντων επανάκλησης για συμβάντα σύνδεσης και συμβάντα σφάλματος.
ret_code_terr_code; ble_conn_params_init_t cp_init; memset (& cp_init, 0, sizeof (cp_init)); cp_init.p_conn_params = NULL; cp_init.first_conn_params_update_delay = FIRST_CONN_PARAMS_UPDATE_DELAY; cp_init.next_conn_params_update_delay = NEXT_CONN_PARAMS_UPDATE_DELAY; cp_init.max_conn_params_update_count = MAX_CONN_PARAMS_UPDATE_COUNT; t_on_notify_cccd_handle = BLE_GATT_HANDLE_INVALID; cp_init.disconnect_on_fail = false; cp_init.evt_handler = on_conn_params_evt; cp_init.error_handler = conn_params_error_handler; err_code = ble_conn_params_init (& cp_init); APP_ERROR_CHECK (err_code);
Μετά την ολοκλήρωση της αρχικοποίησης του συστήματος, εδώ ξεκινάμε με τη διαφήμιση του ονόματος συσκευής BLE και των πληροφοριών ικανότητας. Από εδώ, αυτό το περιφερειακό μπορεί να προβληθεί στη λίστα σάρωσης Ble smartphone.
ret_code_terr_code; err_code = sd_ble_gap_adv_start (m_adv_handle, APP_BLE_CONN_CFG_TAG); APP_ERROR_CHECK (err_code);
Ο κύριος βρόχος τρέχει σε διάστημα 2 δευτερολέπτων, διαβάζει τη θερμοκρασία και την υγρασία και ενημερώνει σε μια συνδεδεμένη έξυπνη συσκευή χρησιμοποιώντας είτε ανάγνωση είτε ειδοποίηση
για (;;) { uint16_t θερμοκρασία, υγρασία; DHTxx_ErrorCode dhtErrCode; idle_state_handle (); εάν (updtmrexp) { dhtErrCode = DHTxx_Read (& θερμοκρασία και υγρασία); if (dhtErrCode == DHT11_OK) { NRF_LOG_INFO ("Θερμοκρασία:% d Υγρασία:% d \ n", θερμοκρασία, υγρασία); εάν (temp_notif_enabled) { ble_ess_notify_temp (m_conn_handle, & m_ess, θερμοκρασία); } αλλιώς { ble_ess_update_temp (& m_ess, θερμοκρασία); } εάν (humid_notif_enabled) { ble_ess_notify_humid (m_conn_handle, & m_ess, υγρασία); } αλλιώς { ble_ess_update_humid (& m_ess, υγρασία); } } updtmrexp = false; } }
Δοκιμή του προγράμματός μας χρησιμοποιώντας το nRF Connect
Το nRF Connect είναι ένα ισχυρό εργαλείο χαμηλής ενέργειας Bluetooth που επιτρέπει τη σάρωση και την εξερεύνηση των περιφερειακών με δυνατότητα BLE. Το nRF Connect για κινητά υποστηρίζει ένα ευρύ φάσμα τυπικών προφίλ Bluetooth SIG. Μπορούμε να επαληθεύσουμε το πρόγραμμά μας χρησιμοποιώντας αυτό, αφού εγκαταστήσουμε την εφαρμογή μπορούμε να αντιστοιχίσουμε την πλακέτα nRF52 με το τηλέφωνό μας ανιχνεύσουμε συσκευές BLE στην εφαρμογή. Μέσα στο χαρακτηριστικό περιβαλλοντικής ανίχνευσης, μπορούμε να παρατηρήσουμε ότι οι τιμές θερμοκρασίας και υγρασίας ενημερώνονται όπως φαίνεται στις παρακάτω εικόνες.
Ο Hariharan Veerappan είναι ανεξάρτητος σύμβουλος με εμπειρία άνω των 15 ετών στην ανάπτυξη ενσωματωμένων προϊόντων. Παρέχει συμβουλευτικές υπηρεσίες στην ενσωματωμένη ανάπτυξη υλικολογισμικού / Linux, παρέχει επίσης εταιρική και διαδικτυακή εκπαίδευση. Ο Hariharan είναι κάτοχος πτυχίου Bachelor of Engineering στον κλάδο της Ηλεκτρονικής & Μηχανικής Επικοινωνίας, μέσω των άρθρων και των σεμιναρίων του που μοιράζεται την εμπειρία και τις σκέψεις του με τους αναγνώστες του Circuit Digest.