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

Βιβλιοθήκη για BMP280 και BME280: 7 βήματα
Βιβλιοθήκη για BMP280 και BME280: 7 βήματα

Βίντεο: Βιβλιοθήκη για BMP280 και BME280: 7 βήματα

Βίντεο: Βιβλιοθήκη για BMP280 και BME280: 7 βήματα
Βίντεο: Lesson 29: Introduction to BMP280 Temperature Sensor| Arduino Step By Step Course 2024, Ιούλιος
Anonim
Βιβλιοθήκη για BMP280 και BME280
Βιβλιοθήκη για BMP280 και BME280
Βιβλιοθήκη για BMP280 και BME280
Βιβλιοθήκη για BMP280 και BME280
Βιβλιοθήκη για BMP280 και BME280
Βιβλιοθήκη για BMP280 και BME280

Εισαγωγή

Δεν είχα σκοπό να γράψω αυτήν τη βιβλιοθήκη. "Συνέβη" ως παρενέργεια ενός έργου που ξεκίνησα και χρησιμοποιεί ένα BMP280. Αυτό το έργο δεν έχει ακόμη ολοκληρωθεί, αλλά νομίζω ότι η βιβλιοθήκη είναι έτοιμη να μοιραστεί με άλλους. Στη συνέχεια, χρειάστηκε να χρησιμοποιήσω ένα BME280, το οποίο προσθέτει μέτρηση υγρασίας στην ικανότητα πίεσης και θερμοκρασίας του BMP280. Το BME280 είναι "συμβατό προς τα πίσω" με το BMP280 - δηλαδή, όλοι οι καταχωρητές και τα βήματα που απαιτούνται για την ανάγνωση της πίεσης και της θερμοκρασίας από το BME280 είναι τα ίδια με αυτά που χρησιμοποιούνται για το BMP280. Υπάρχουν επιπλέον καταχωρητές και βήματα που απαιτούνται για την ανάγνωση της υγρασίας, που ισχύουν μόνο για το BME280. Αυτό εγείρει το ερώτημα, μία βιβλιοθήκη και για τις δύο ή δύο ξεχωριστές βιβλιοθήκες. Το υλικό για τους δύο τύπους συσκευών είναι πλήρως εναλλάξιμο. Ακόμα και πολλές από τις ενότητες που πωλούνται (για παράδειγμα σε Ebay και AliExpress) φέρουν την ετικέτα BME/P280. Για να μάθετε ποιος τύπος είναι, πρέπει να κοιτάξετε την (μικροσκοπική) γραφή στον ίδιο τον αισθητήρα ή να δοκιμάσετε το byte της ταυτότητας της συσκευής. Αποφάσισα να πάω για μια μόνο βιβλιοθήκη. Φαίνεται ότι λειτούργησε ΟΚ.

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

Χαρακτηριστικά και δυνατότητες βιβλιοθήκης

Μια βιβλιοθήκη είναι ένα κομμάτι λογισμικού που παρέχει διεπαφή προγραμματισμού εφαρμογών (API) για έναν προγραμματιστή να ασκεί τις δυνατότητες της συσκευής, χωρίς απαραίτητα να χρειάζεται να ασχοληθεί με όλες τις λεπτομερείς λεπτομέρειες. Επιθυμητά, το API θα πρέπει να είναι εύκολο για έναν αρχάριο με απλές απαιτήσεις να ξεκινήσει, ενώ θα παρέχει πλήρη εκμετάλλευση των δυνατοτήτων της συσκευής. Κατά προτίμηση, η βιβλιοθήκη θα πρέπει να ακολουθεί τυχόν συγκεκριμένες οδηγίες από τον κατασκευαστή της συσκευής, καθώς και γενικές καλές πρακτικές λογισμικού. Έχω προσπαθήσει να τα πετύχω όλα αυτά. Όταν ξεκίνησα με το BMP280, βρήκα 3 διαφορετικές βιβλιοθήκες για αυτό: Adafruit_BMP280; Seeed_BMP280; και ένα που ονομάζεται BMP280 από τον κατασκευαστή της συσκευής. Ούτε η Adafruit ούτε η Seeed παρείχαν εκτεταμένες δυνατότητες, αν και λειτούργησαν καλά και ήταν εύχρηστες για βασικές εφαρμογές. Δεν μπορούσα να καταλάβω πώς να χρησιμοποιήσουμε αυτό που παράγεται από τον κατασκευαστή της συσκευής (Bosch Sensortec). Αυτό μπορεί να είναι η δική μου ανεπάρκεια, παρά η δική τους. Ωστόσο, η βιβλιοθήκη ήταν πολύ πιο περίπλοκη από τις άλλες δύο, δεν μπορούσα να βρω οδηγίες ή παραδείγματα χρήσης (στη συνέχεια βρήκα παραδείγματα στο αρχείο "bmp280_support.c", ωστόσο αυτά δεν ήταν ιδιαίτερα χρήσιμα για μένα).

Ως αποτέλεσμα αυτών των παραγόντων, αποφάσισα να γράψω τη δική μου βιβλιοθήκη για το BMP280.

Εξετάζοντας την κατάσταση της βιβλιοθήκης για το BME280, βρήκα ξεχωριστές βιβλιοθήκες Adafruit_BME280, Seed_BME280 και μια άλλη BME280_MOD-1022 γραμμένη από Embedded Adventures. Κανένα από αυτά δεν συνδύασε τις λειτουργίες για το BMP280 σε μια βιβλιοθήκη ικανή να χρησιμοποιήσει το BME280. Κανένα από αυτά δεν υποστήριξε ρητά την ικανότητα των συσκευών να αποθηκεύουν μερικά bits δεδομένων ενώ η συσκευή και ο μικροεπεξεργαστής ελέγχου της κοιμούνται (αυτή η δυνατότητα είναι εμφανής στο φύλλο δεδομένων και υποστηρίζεται στη βιβλιοθήκη που έχω γράψει και περιγράψει εδώ).

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

Δυνατότητες συσκευής

Τα BMP280 και BME280 είναι συσκευές επιφανειακής τοποθέτησης περίπου 5mm τετραγωνικού και 1 mm ύψους. Υπάρχουν 8 μαξιλάρια διασύνδεσης, συμπεριλαμβανομένων 2 ξεχωριστών επιθέσεων εισόδου ισχύος και δύο επιθέματα γείωσης. Είναι διαθέσιμα στο eBay ως ενότητα με 4 ή 6 ακίδες. Η μονάδα 4 ακίδων έχει μια σταθερή διεύθυνση I2C και δεν μπορεί να ρυθμιστεί ώστε να χρησιμοποιεί το πρωτόκολλο SPI.

Η μονάδα 6 ακίδων ή η γυμνή συσκευή μπορούν να χρησιμοποιηθούν είτε με πρωτόκολλα I2C είτε με SPI. Στη λειτουργία I2C μπορεί να έχει δύο διαφορετικές διευθύνσεις, επιτυγχάνοντας τη σύνδεση του πείρου SDO είτε στο Ground (για διεύθυνση βάσης = 0x76) είτε στο Vdd (για διεύθυνση βάσης +1 = 0x77). Στη λειτουργία SPI έχει τη συνήθη διάταξη 1 ρολογιού, 2 δεδομένων (ένα για κάθε κατεύθυνση) και ενός πείρου επιλογής συσκευής (CS).

Η βιβλιοθήκη που έγραψα και περιγράφω εδώ υποστηρίζει μόνο I2C. Οι βιβλιοθήκες Adafruit_BMP280 και BME_MOD-1022 έχουν υποστήριξη τόσο για i2C όσο και για SPI.

Μπορείτε να κατεβάσετε τη βιβλιοθήκη εδώ:

github.com/farmerkeith/BMP280-library

Βήμα 1: Ρύθμιση του υλικού

Ρύθμιση του υλικού
Ρύθμιση του υλικού

Πριν η βιβλιοθήκη είναι χρήσιμη, είναι απαραίτητο να συνδέσετε έναν μικροελεγκτή στο BMP280 (ή σε δύο από αυτούς, εάν το επιθυμείτε).

Χρησιμοποίησα ένα WeMos D1 mini pro, οπότε θα δείξω τις συνδέσεις του. Άλλοι μικροελεγκτές θα είναι παρόμοιοι, απλά πρέπει να συνδέσετε σωστά τις ακίδες SDA και SCL.

Στην περίπτωση του WeMos D1 mini pro, οι συνδέσεις είναι:

Λειτουργία WeMos pin BMP280 pin Notes

SDA D2 SDA SCL D1 SCL Vdd 3V3 Vin Ονομαστική 3.3V Ground GND Διεύθυνση ελέγχου SDO Ground ή Vdd I2C επιλέξτε CSB Vdd (GND επιλέγει SPI)

Σημειώστε ότι η καρφίτσα SDO σε ορισμένες από τις μονάδες MP280 φέρει ετικέτα SDD και η καρφίτσα Vdd μπορεί να φέρει ετικέτα VCC. Σημείωση: Οι γραμμές SDA και SCL πρέπει να έχουν αντιστάσεις έλξης μεταξύ της γραμμής και του πείρου Vin. Συνήθως μια τιμή 4,7K θα πρέπει να είναι εντάξει. Ορισμένες μονάδες BMP280 και BME280 έχουν αντιστάσεις έλξης 10K που περιλαμβάνονται στη μονάδα (κάτι που δεν είναι καλή πρακτική, καθώς η τοποθέτηση πολλαπλών συσκευών στο δίαυλο I2C μπορεί να το φορτώσει υπερβολικά). Ωστόσο, η χρήση 2 μονάδων BME/P280 το καθένα με αντίσταση 10K δεν θα πρέπει να αποτελεί πρόβλημα στην πράξη, εφόσον δεν υπάρχουν πάρα πολλές άλλες συσκευές στον ίδιο δίαυλο επίσης με αντιστάσεις έλξης.

Μόλις συνδέσετε το υλικό, μπορείτε εύκολα να ελέγξετε αν η συσκευή σας είναι BMP280 ή BME280 εκτελώντας το σκίτσο I2CScan_ID που μπορείτε να βρείτε εδώ:

Μπορείτε επίσης να ελέγξετε αν έχετε BMP280 ή BME280 κοιτάζοντας την ίδια τη συσκευή. Θεώρησα απαραίτητο να χρησιμοποιήσω ένα ψηφιακό μικροσκόπιο για να το κάνω αυτό, αλλά αν η όρασή σας είναι πολύ καλή, μπορεί να το κάνετε χωρίς κανένα βοήθημα. Υπάρχουν δύο γραμμές εκτύπωσης στο περίβλημα της συσκευής. Το κλειδί είναι το πρώτο γράμμα στη δεύτερη γραμμή, το οποίο στην περίπτωση των συσκευών BMP280 είναι ένα "K" και στην περίπτωση των συσκευών BME280 είναι ένα "U".

Βήμα 2: API που παρέχονται από τη Βιβλιοθήκη

API που παρέχονται από τη Βιβλιοθήκη
API που παρέχονται από τη Βιβλιοθήκη
API που παρέχονται από τη Βιβλιοθήκη
API που παρέχονται από τη Βιβλιοθήκη

Συμπεριλαμβανομένης της βιβλιοθήκης σε ένα σκίτσο

Η βιβλιοθήκη περιλαμβάνεται σε ένα σκίτσο με τον τυπικό τρόπο χρησιμοποιώντας τη δήλωση

#include "farmerkeith_BMP280.h"

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

Δημιουργία αντικειμένου λογισμικού BME ή BMP

Υπάρχουν 3 επίπεδα για τη δημιουργία του αντικειμένου λογισμικού BMP280. Το πιο απλό είναι απλά

bme280 objectName; ή bmp280 objectName;

για παράδειγμα, BMP280 bmp0.

Αυτό δημιουργεί ένα αντικείμενο λογισμικού με την προεπιλεγμένη διεύθυνση 0x76 (δηλαδή για SDO συνδεδεμένο στη γείωση).

Το επόμενο επίπεδο για τη δημιουργία ενός αντικειμένου λογισμικού BME280 ή BMP280 έχει μια παράμετρο 0 ή 1, ως εξής:

bme280 objectNameA (0);

bmp280 objectNameB (1);

Η παράμετρος (0 ή 1) προστίθεται στη διεύθυνση βάσης I2C, έτσι ώστε δύο συσκευές BME280 ή BMP280 να μπορούν να χρησιμοποιηθούν στον ίδιο δίαυλο I2C (συμπεριλαμβανομένης μιας από κάθε μία).

Το τρίτο επίπεδο για τη δημιουργία ενός αντικειμένου λογισμικού BME ή BMP280 έχει δύο παραμέτρους. Η πρώτη παράμετρος, η οποία είναι είτε 0 είτε 1, είναι για τη διεύθυνση, όπως και για την προηγούμενη περίπτωση. Η δεύτερη παράμετρος ελέγχει την εκτύπωση εντοπισμού σφαλμάτων. Εάν έχει οριστεί σε 1, κάθε συναλλαγή με το αντικείμενο λογισμικού οδηγεί σε εξόδους Serial.print που επιτρέπουν στον προγραμματιστή να δει τις λεπτομέρειες της συναλλαγής. Για παράδειγμα:

bmp280 objectNameB (1, 1);

Εάν η παράμετρος εκτύπωσης εντοπισμού σφαλμάτων έχει οριστεί σε 0, το αντικείμενο λογισμικού επανέρχεται στην κανονική συμπεριφορά (χωρίς εκτύπωση).

Αυτή η δήλωση ή οι δηλώσεις πρέπει να συμπεριληφθούν μετά το #include και πριν από τη συνάρτηση setup ().

Αρχικοποίηση του αντικειμένου λογισμικού BME ή BMP

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

Για μια απλή, αρχικοποίηση γενικού σκοπού, η δήλωση είναι:

objectName.begin ();

Αυτή η έκδοση begin () διαβάζει τις παραμέτρους βαθμονόμησης από τη συσκευή και ορίζει osrs_t = 7 (16 μετρήσεις θερμοκρασίας), osrs_p = 7 (16 μετρήσεις πίεσης), mode = 3 (συνεχές, κανονικό), t_sb = 0 (0,5 ms ύπνος μεταξύ σύνολα μέτρησης), φίλτρο = 0 (K = 1, άρα χωρίς φιλτράρισμα) και spiw_en = 0 (SPI απενεργοποιημένο, οπότε χρησιμοποιήστε το I2C). Στην περίπτωση του BME280, υπάρχει μια επιπλέον παράμετρος osrs_h = 7 για 16 μετρήσεις υγρασίας.

Υπάρχει μια άλλη έκδοση αρχής () που λαμβάνει και τις έξι (ή 7) παραμέτρους. Το ισοδύναμο της παραπάνω δήλωσης είναι

objectName.begin (7, 7, 3, 0, 0, 0); // osrs_t, osrs_p, mode, t_sb, filter, spiw_en

ή objectName.begin (7, 7, 3, 0, 0, 0, 7)? // osrs_t, osrs_p, mode, t_sb, filter, spiw_en, osrs_h

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

Απλή μέτρηση θερμοκρασίας και πίεσης

Για να λάβετε μια μέτρηση θερμοκρασίας, ο απλούστερος τρόπος είναι

διπλή θερμοκρασία = objectName.readTemperature (); // μετρήστε τη θερμοκρασία

Για να λάβετε μια μέτρηση πίεσης, ο απλούστερος τρόπος είναι

διπλή πίεση = objectName.readPressure (); // μετρήστε την πίεση

Ο απλούστερος τρόπος είναι να μετρήσετε την υγρασία

διπλή υγρασία = objectName.readHumidity (); // μέτρηση υγρασίας (μόνο BME280)

Για να λάβετε τη θερμοκρασία και την πίεση, οι δύο παραπάνω προτάσεις μπορούν να χρησιμοποιηθούν η μία μετά την άλλη, αλλά υπάρχει μια άλλη επιλογή, η οποία είναι:

διπλή θερμοκρασία?

διπλή πίεση = objectName.readΠίεση (θερμοκρασία); // μετρήστε πίεση και θερμοκρασία

Αυτή η δήλωση διαβάζει τα δεδομένα από τη συσκευή BME280 ή BMP280 μόνο μία φορά και επιστρέφει τη θερμοκρασία και την πίεση. Αυτή είναι ελαφρώς πιο αποτελεσματική χρήση του διαύλου I2C και διασφαλίζει ότι οι δύο ενδείξεις αντιστοιχούν στον ίδιο κύκλο μέτρησης.

Για το BME 280, μια συνδυασμένη δήλωση που λαμβάνει και τις τρεις τιμές (υγρασία, θερμοκρασία και πίεση) είναι:

διπλή θερμοκρασία, πίεση · διπλή υγρασία = objectName.readHumidity (θερμοκρασία, πίεση). // μετρήστε την υγρασία, την πίεση και τη θερμοκρασία

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

Αυτές οι περιπτώσεις χρήσης καλύπτονται από παραδείγματα σκίτσων που παρέχονται με τη βιβλιοθήκη, όπως BasicTemperature.ino, basicPressure.ino, basicHumidity.ino, basicTemperatureAndPressure.ino και basicHumidityAndTemperatureAndPressure.ino.

Πιο εξελιγμένη μέτρηση θερμοκρασίας και πίεσης

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

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

Ένα αποτέλεσμα που καταναλώνει λιγότερη ενέργεια και δίνει θερμοκρασία που είναι πιο κοντά στο περιβάλλον, μπορεί να επιτευχθεί με τη χρήση της αρχής () με παραμέτρους που το θέτουν σε κατάσταση αναμονής (π.χ. λειτουργία = 0). Για παράδειγμα:

objectName.begin (1, 1, 0, 0, 0, 0 [, 1]); // osrs_t, osrs_p, mode, t_sb, filter, spiw_en [, osrs_h]

Στη συνέχεια, όταν απαιτείται μέτρηση, ξυπνήστε τη συσκευή με μια εντολή διαμόρφωσης για να καταχωρήσει το F2 (εάν απαιτείται) και το F4 που ορίζει τις κατάλληλες τιμές των osrs_h, osrs_t και osrs_p, συν λειτουργία = 1 (λειτουργία μονής λήψης). Για παράδειγμα:

[objectName.updateF2Control (1);] // osrs_h - δεν χρειάστηκε ποτέ για BMP280, // και δεν απαιτείται για BME280 εάν ο αριθμός των μετρήσεων δεν αλλάζει // από την τιμή που παρέχεται στην αρχή (). objectName.updateF4Control (1, 1, 1); // osrs_t, osrs_p, λειτουργία

Αφού ξυπνήσει η συσκευή, θα αρχίσει να μετρά, αλλά το αποτέλεσμα δεν θα είναι διαθέσιμο για μερικά χιλιοστά του δευτερολέπτου - τουλάχιστον 4 ms, ίσως έως και 70 ms ή περισσότερο, ανάλογα με τον αριθμό των μετρήσεων που έχουν καθοριστεί. Εάν η εντολή ανάγνωσης αποσταλεί αμέσως, η συσκευή θα επιστρέψει τις τιμές από την προηγούμενη μέτρηση - οι οποίες μπορεί να είναι αποδεκτές σε ορισμένες εφαρμογές, αλλά στις περισσότερες περιπτώσεις είναι πιθανότατα καλύτερα να καθυστερήσετε μέχρι να είναι διαθέσιμη η νέα μέτρηση.

Αυτή η καθυστέρηση μπορεί να γίνει με διάφορους τρόπους.

  1. περιμένετε ένα σταθερό χρονικό διάστημα για να καλύψετε τη μεγαλύτερη αναμενόμενη καθυστέρηση
  2. περιμένετε ένα χρονικό διάστημα που υπολογίζεται από τον μέγιστο χρόνο μέτρησης ανά μέτρηση (δηλαδή 2,3 ms) επί τον αριθμό των μετρήσεων, συν τα γενικά έξοδα, συν ένα περιθώριο.
  3. περιμένετε μικρότερο χρονικό διάστημα που υπολογίζεται όπως παραπάνω, αλλά χρησιμοποιώντας τον ονομαστικό χρόνο μέτρησης (δηλαδή 2 ms) συν τα γενικά έξοδα και, στη συνέχεια, ξεκινήστε να ελέγχετε το bit "Μετράω" στο μητρώο κατάστασης. Όταν το bit κατάστασης διαβάζει 0 (δηλαδή, δεν μετρά), λάβετε τις ενδείξεις θερμοκρασίας και πίεσης.
  4. ξεκινήστε αμέσως τον έλεγχο του καταχωρητή κατάστασης και λάβετε τις ενδείξεις θερμοκρασίας και πίεσης όταν το bit κατάστασης διαβάζει 0,

Θα δείξω ένα παράδειγμα ενός τρόπου για να το κάνουμε αυτό λίγο αργότερα.

Λειτουργίες καταχωρητή διαμόρφωσης

Για να γίνουν όλα αυτά, χρειαζόμαστε αρκετά εργαλεία που δεν έχω ακόμη εισαγάγει. Αυτοί είναι:

byte readRegister (reg)

void updateRegister (reg, value)

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

Το παράδειγμα powerSaverPressureAndTemperature.ino χρησιμοποιεί τη μέθοδο Νο. 3. Η γραμμή κώδικα που κάνει τον επαναλαμβανόμενο έλεγχο είναι

while (bmp0.readRegister (0xF3) >> 3); // βρόχος untl F3bit 3 == 0

Σημειώστε ότι αυτό το σκίτσο είναι για μικροελεγκτή ESP8266. Χρησιμοποίησα ένα WeMos D1 mini pro. Το σκίτσο δεν θα λειτουργήσει με μικροελεγκτές Atmega, οι οποίοι έχουν διαφορετικές οδηγίες για τον ύπνο. Αυτό το σκίτσο ασκεί πολλές άλλες εντολές, οπότε θα τις παρουσιάσω όλες πριν περιγράψω αυτό το σκίτσο με περισσότερες λεπτομέρειες.

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

updateRegister (reg, value)

αλλά είναι λίγο πιο εύκολο με τις ακόλουθες τρεις εντολές:

updateF2Control (osrs_h); // BME280 μόνο

updateF4Control (osrs_t, osrs_p, mode); updateF5Config (t_sb, φίλτρο, spi3W_en);

Αφού ολοκληρωθεί η μέτρηση, εάν η λειτουργία που χρησιμοποιείται είναι Ενιαία λήψη (Αναγκαστική λειτουργία), τότε η συσκευή θα επιστρέψει αυτόματα στον ύπνο. Ωστόσο, εάν το σύνολο μετρήσεων περιλαμβάνει πολλαπλές μετρήσεις χρησιμοποιώντας συνεχή (Κανονική) λειτουργία, τότε το BMP280 θα πρέπει να τεθεί ξανά σε κατάσταση αναστολής λειτουργίας. Αυτό μπορεί να γίνει με οποιαδήποτε από τις δύο ακόλουθες εντολές:

updateF4Control16xSleep ();

updateF4ControlSleep (τιμή);

Και τα δύο αυτά ορίζουν τα bit λειτουργίας σε 00 (δηλαδή κατάσταση αναστολής λειτουργίας). Ωστόσο, το πρώτο ορίζει το osrs_t και το osrs_p σε 111 (δηλαδή 16 μετρήσεις), ενώ το δεύτερο αποθηκεύει τα χαμηλά 6 bits από την "τιμή" στα bit 7: 2 του μητρώου 0xF4.

Ομοίως, η ακόλουθη δήλωση αποθηκεύει τα χαμηλά έξι bits "value" σε bits 7: 2 του μητρώου 0xF5.

updateF5ConfigSleep (τιμή);

Η χρήση αυτών των τελευταίων εντολών επιτρέπει την αποθήκευση 12 bit πληροφοριών στα μητρώα BMP280 F4 και F5. Τουλάχιστον στην περίπτωση του ESP8266, όταν ο μικροελεγκτής ξυπνά μετά από μια περίοδο ύπνου, ξεκινά στην αρχή του σκίτσου χωρίς να γνωρίζει την κατάστασή του πριν από την εντολή ύπνου. Για να αποθηκεύσετε τη γνώση της κατάστασής του πριν από την εντολή ύπνου, τα δεδομένα μπορούν να αποθηκευτούν στη μνήμη flash, χρησιμοποιώντας είτε τις λειτουργίες EEPROM είτε γράφοντας ένα αρχείο χρησιμοποιώντας SPIFFS. Ωστόσο, η μνήμη flash έχει έναν περιορισμό στον αριθμό των κύκλων εγγραφής, της τάξης των 10, 000 έως 100, 000. Αυτό σημαίνει ότι εάν ο μικροελεγκτής περνά από έναν κύκλο ύπνου-αφύπνισης κάθε λίγα δευτερόλεπτα, μπορεί να υπερβεί την επιτρεπόμενη εγγραφή μνήμης όριο σε λίγους μήνες. Η αποθήκευση μερικών bits δεδομένων στο BMP280 δεν έχει τέτοιο περιορισμό.

Τα δεδομένα που είναι αποθηκευμένα στους καταχωρητές F4 και F5 μπορούν να ανακτηθούν όταν ο μικροελεγκτής ξυπνήσει χρησιμοποιώντας τις εντολές

readF4Sleep ();

readF5Sleep ();

Αυτές οι συναρτήσεις διαβάζουν τον αντίστοιχο καταχωρητή, μετατοπίζουν το περιεχόμενο για να αφαιρέσουν τα 2 LSB και επιστρέφουν τα υπόλοιπα 6 bits. Αυτές οι λειτουργίες χρησιμοποιούνται στο παράδειγμα σκίτσο powerSaverPressureAndTemperatureESP.ino ως εξής:

// ανάγνωση της τιμής του EventCounter πίσω από το bmp0

byte bmp0F4value = bmp0.readF4Sleep (); // 0 έως 63 byte bmp0F5value = bmp0.readF5Sleep (); // 0 έως 63 eventCounter = bmp0F5value*64+bmp0F4value; // 0 έως 4095

Αυτές οι συναρτήσεις διαβάζουν τον αντίστοιχο καταχωρητή, μετατοπίζουν το περιεχόμενο για να αφαιρέσουν τα 2 LSB και επιστρέφουν τα υπόλοιπα 6 bits. Αυτές οι λειτουργίες χρησιμοποιούνται στο παράδειγμα σκίτσο powerSaverPressureAndTemperature.ino ως εξής:

// ανάγνωση της τιμής του EventCounter πίσω από το bmp1

byte bmp1F4value = bmp1.readF4Sleep (); // 0 έως 63 byte bmp1F5value = bmp1.readF5Sleep (); // 0 έως 63 eventCounter = bmp1F5value*64+bmp1F4value; // 0 έως 4095

Λειτουργίες ωμής θερμοκρασίας και πίεσης

Οι βασικές λειτουργίες readTemperature, readPressure και readHumidity έχουν δύο στοιχεία. Αρχικά οι τιμές θερμοκρασίας και πίεσης των 20-bit από το BME/P280 λαμβάνονται, ή η τιμή της υγρασίας των 16-bit από το BME280. Στη συνέχεια, ο αλγόριθμος αντιστάθμισης χρησιμοποιείται για τη δημιουργία των τιμών εξόδου σε βαθμούς Κελσίου, hPa ή %RH.

Η βιβλιοθήκη παρέχει ξεχωριστές λειτουργίες για αυτά τα συστατικά, έτσι ώστε τα δεδομένα της θερμοκρασίας, της πίεσης και της υγρασίας να μπορούν να ληφθούν και ίσως να χειριστούν με κάποιο τρόπο. Παρέχεται επίσης ο αλγόριθμος για τη λήψη της θερμοκρασίας, της πίεσης και της υγρασίας από αυτές τις πρώτες τιμές. Στη βιβλιοθήκη αυτοί οι αλγόριθμοι υλοποιούνται χρησιμοποιώντας αριθμητική κυμαινόμενου σημείου διπλού μήκους. Λειτουργεί καλά με τον ESP8266 που είναι επεξεργαστής 32-bit και χρησιμοποιεί 64 bits για "διπλές" μεταβλητές float. Η πρόσβαση σε αυτές τις συναρτήσεις μπορεί να είναι χρήσιμη για την αξιολόγηση και ενδεχομένως την αλλαγή του υπολογισμού για άλλες πλατφόρμες.

Αυτές οι λειτουργίες είναι:

readRawPressure (rawTemperature); // διαβάζει ακατέργαστα δεδομένα πίεσης και θερμοκρασίας από BME/P280readRawHumidity (rawTemperature, rawPressure). // διαβάζει ακατέργαστα δεδομένα υγρασίας, θερμοκρασίας και πίεσης από BME280 calcTemperature (rawTemperature, t_fine). calcPressure (ακατέργαστη πίεση, t_fine); calcHumidity (ακατέργαστη υγρασία, t_fine)

Το επιχείρημα "t-fine" σε αυτές τις συναρτήσεις αξίζει μια μικρή εξήγηση. Τόσο οι αλγόριθμοι αντιστάθμισης πίεσης όσο και υγρασίας περιλαμβάνουν ένα εξαρτώμενο από τη θερμοκρασία συστατικό που επιτυγχάνεται μέσω της μεταβλητής t_fine. Η συνάρτηση calcTemperature γράφει μια τιμή σε t_fine με βάση τη λογική του αλγορίθμου αντιστάθμισης θερμοκρασίας, η οποία στη συνέχεια χρησιμοποιείται ως είσοδος τόσο στο calcPressure όσο και στο calcHumidity.

Ένα παράδειγμα χρήσης αυτών των συναρτήσεων μπορεί να βρεθεί στο παράδειγμα σκίτσο rawPressureAndTemperature.ino, καθώς και στον κώδικα για τη λειτουργία readHumidity () στο αρχείο.cpp της βιβλιοθήκης.

Υψόμετρο και πίεση στο επίπεδο της θάλασσας

Υπάρχει γνωστή σχέση μεταξύ ατμοσφαιρικής πίεσης και υψομέτρου. Ο καιρός επηρεάζει επίσης την πίεση. Όταν οι μετεωρολογικοί οργανισμοί δημοσιεύουν πληροφορίες για την ατμοσφαιρική πίεση, συνήθως τις προσαρμόζουν ανάλογα με το υψόμετρο και έτσι ο "συνοπτικός χάρτης" δείχνει ισοβαρές (γραμμές σταθερής πίεσης) τυποποιημένες ως μέση στάθμη της θάλασσας. Πραγματικά, υπάρχουν 3 τιμές σε αυτή τη σχέση και η γνώση δύο από αυτές επιτρέπει την εξαγωγή της τρίτης. Οι 3 τιμές είναι:

  • υψόμετρο πάνω από την επιφάνεια της θάλασσας
  • πραγματική πίεση του αέρα σε αυτό το υψόμετρο
  • ισοδύναμη ατμοσφαιρική πίεση στο επίπεδο της θάλασσας (πιο αυστηρά, μέση στάθμη της θάλασσας, επειδή η στιγμιαία στάθμη της θάλασσας αλλάζει συνεχώς)

Αυτή η βιβλιοθήκη παρέχει δύο λειτουργίες για αυτήν τη σχέση, ως εξής:

calcAltitude (πίεση, θάλασσαLevelhPa);

κανονική πίεση (πίεση, υψόμετρο).

Υπάρχει επίσης μια απλοποιημένη έκδοση, η οποία υποθέτει την τυπική πίεση στάθμης θάλασσας 1013,15 hPa.

calcAltitude (πίεση); // Υποτίθεται η τυπική θαλάσσια πίεση

Βήμα 3: Λεπτομέρειες συσκευής BMP280

BMP280 Λεπτομέρειες συσκευής
BMP280 Λεπτομέρειες συσκευής

Δυνατότητες υλικού

Το BMP280 έχει 2 byte δεδομένων διαμόρφωσης (σε διευθύνσεις καταχωρητή 0xF4 και 0xF5) τα οποία χρησιμοποιούνται για τον έλεγχο πολλαπλών επιλογών μέτρησης και εξόδου δεδομένων. Παρέχει επίσης 2 bits πληροφοριών κατάστασης και 24 byte παραμέτρων βαθμονόμησης που χρησιμοποιούνται για τη μετατροπή των ακατέργαστων τιμών θερμοκρασίας και πίεσης σε συμβατικές μονάδες θερμοκρασίας και πίεσης. Το BME280 έχει επιπλέον δεδομένα ως εξής:

  • 1 επιπλέον byte δεδομένων διαμόρφωσης στη διεύθυνση μητρώου 0xF2 που χρησιμοποιείται για τον έλεγχο πολλαπλών μετρήσεων υγρασίας.
  • 8 επιπλέον byte παραμέτρων βαθμονόμησης που χρησιμοποιούνται για τη μετατροπή της τιμής της ακατέργαστης υγρασίας σε ποσοστό σχετικής υγρασίας.

Οι καταχωρητές θερμοκρασίας, πίεσης και κατάστασης για το BME280 είναι οι ίδιοι με τους BMP280 με μικρές εξαιρέσεις ως εξής:

  • τα δυαδικά ψηφία "ID" του BME280 έχουν οριστεί σε 0x60, οπότε μπορεί να διακριθεί από το BMP280 που μπορεί να είναι 0x56, 0x57 ή 0x58
  • ο έλεγχος του χρόνου ύπνου (t_sb) αλλάζει έτσι ώστε οι δύο μεγάλοι χρόνοι στο BMP280 (2000 ms και 4000 ms) να αντικατασταθούν στο BME280 με μικρούς χρόνους 10 ms και 20 ms. Ο μέγιστος χρόνος ύπνου στο BME280 είναι 1000 ms.
  • Στο BME280 η θερμοκρασία και η πίεση των ακατέργαστων τιμών είναι πάντα 20 bits εάν εφαρμόζεται φιλτράρισμα. Η χρήση τιμών 16 έως 19 bit περιορίζεται σε περιπτώσεις χωρίς φιλτράρισμα (δηλ. Φίλτρο = 0).

Η θερμοκρασία και η πίεση είναι κάθε τιμή 20 bit, η οποία πρέπει να μετατραπεί σε συμβατική θερμοκρασία και πίεση μέσω ενός μάλλον πολύπλοκου αλγορίθμου χρησιμοποιώντας 3 16 bit παραμέτρους βαθμονόμησης για τη θερμοκρασία και 9 16 bit παραμέτρους βαθμονόμησης συν τη θερμοκρασία πίεσης. Η κοκκοποίηση της μέτρησης της θερμοκρασίας είναι 0.0003 βαθμοί Κελσίου για μια ελάχιστη σημαντική αλλαγή bit (ανάγνωση 20 bit), αυξανόμενη στους 0.0046 βαθμούς Κελσίου εάν χρησιμοποιείται η ανάγνωση των 16 bit.

Η υγρασία είναι μια τιμή 16 bit που πρέπει να μετατραπεί σε σχετική υγρασία μέσω ενός άλλου πολύπλοκου αλγορίθμου χρησιμοποιώντας 6 παραμέτρους βαθμονόμησης που είναι ένα μείγμα 8, 12 και 16 bit.

Το φύλλο δεδομένων δείχνει την απόλυτη ακρίβεια της ανάγνωσης θερμοκρασίας ως +-0,5 C στους 25 C και +-1 C στο εύρος 0 έως 65 C.

Η λεπτομέρεια της μέτρησης της πίεσης είναι 0,15 Pascals (δηλαδή 0,0015 hectoPascals) σε ανάλυση 20 bit ή 2,5 Pascals σε ανάλυση 16 bit. Η τιμή της ακατέργαστης πίεσης επηρεάζεται από τη θερμοκρασία, έτσι ώστε γύρω στους 25C, η αύξηση της θερμοκρασίας κατά 1 βαθμό C μειώνει τη μετρούμενη πίεση κατά 24 Pascals. Η ευαισθησία θερμοκρασίας υπολογίζεται στον αλγόριθμο βαθμονόμησης, επομένως οι τιμές πίεσης που πρέπει να παρέχονται πρέπει να είναι ακριβείς σε διαφορετικές θερμοκρασίες.

Το φύλλο δεδομένων δείχνει την απόλυτη ακρίβεια της ένδειξης πίεσης ως +-1 hPa για θερμοκρασίες μεταξύ 0 C και 65 C.

Η ακρίβεια της υγρασίας δίνεται στο φύλλο δεδομένων ως +-3% RH, και +-1% υστέρηση.

Πως δουλεύει

Τα 24 bytes δεδομένων βαθμονόμησης θερμοκρασίας και πίεσης, καθώς και στην περίπτωση του BME280 τα 8 bytes δεδομένων βαθμονόμησης υγρασίας, πρέπει να διαβαστούν από τη συσκευή και να αποθηκευτούν σε μεταβλητές. Αυτά τα δεδομένα προγραμματίζονται ξεχωριστά στη συσκευή στο εργοστάσιο, επομένως διαφορετικές συσκευές έχουν διαφορετικές τιμές - τουλάχιστον για ορισμένες από τις παραμέτρους. Ένα BME/P280 μπορεί να βρίσκεται σε μία από τις δύο καταστάσεις. Σε μια κατάσταση μετράει. Στην άλλη κατάσταση περιμένει (κοιμάται).

Σε ποια κατάσταση βρίσκεται μπορεί να ελεγχθεί κοιτάζοντας το bit 3 του καταχωρητή 0xF3.

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

Υπάρχουν επίσης δύο τρόποι λειτουργίας του BME/P280. Η μία είναι η Συνεχής λειτουργία (ονομάζεται Κανονική λειτουργία στο φύλλο δεδομένων) η οποία κάνει επανειλημμένα κύκλους μεταξύ καταστάσεων μέτρησης και ύπνου. Σε αυτήν τη λειτουργία, η συσκευή εκτελεί ένα σύνολο μετρήσεων, μετά πηγαίνει για ύπνο, μετά ξυπνά για ένα άλλο σύνολο μετρήσεων κ.ο.κ. Ο αριθμός των μεμονωμένων μετρήσεων και η διάρκεια του ύπνου του κύκλου μπορούν να ελεγχθούν μέσω των καταχωρητών διαμόρφωσης.

Ο άλλος τρόπος λειτουργίας του BME/P280 είναι η λειτουργία Single Shot (ονομάζεται Αναγκαστική λειτουργία στο φύλλο δεδομένων). Σε αυτήν τη λειτουργία, η συσκευή ξυπνά από τον ύπνο με μια εντολή μέτρησης, κάνει μια σειρά μετρήσεων και μετά επιστρέφει για ύπνο. Ο αριθμός των μεμονωμένων μετρήσεων στο σύνολο ελέγχεται στην εντολή διαμόρφωσης που ξυπνά τη συσκευή.

Στο BMP280, εάν γίνει μία μόνο μέτρηση, συμπληρώνονται τα 16 πιο σημαντικά bit της τιμής και τα τέσσερα λιγότερο σημαντικά bits στην τιμή ανάγνωσης είναι όλα μηδενικά. Ο αριθμός των μετρήσεων μπορεί να οριστεί σε 1, 2, 4, 8 ή 16 και καθώς ο αριθμός των μετρήσεων αυξάνεται, ο αριθμός των δυαδικών ψηφίων που συμπληρώνονται με δεδομένα αυξάνεται, έτσι ώστε με 16 μετρήσεις και τα 20 δυαδικά ψηφία να συμπληρώνονται με δεδομένα μετρήσεων. Το δελτίο δεδομένων αναφέρεται σε αυτήν τη διαδικασία ως υπερα δειγματοληψία.

Στο BME280, η ίδια διάταξη ισχύει για όσο διάστημα το αποτέλεσμα δεν φιλτράρεται. Εάν χρησιμοποιείται φιλτράρισμα, οι τιμές είναι πάντα 20 bits, ανεξάρτητα από το πόσες μετρήσεις λαμβάνονται σε κάθε κύκλο μέτρησης.

Κάθε μεμονωμένη μέτρηση διαρκεί περίπου 2 χιλιοστά του δευτερολέπτου (τυπική τιμή, η μέγιστη τιμή είναι 2,3 ms). Προσθέστε σε αυτό μια σταθερή επιβάρυνση περίπου 2 ms (συνήθως λίγο λιγότερο) σημαίνει ότι μια ακολουθία μέτρησης, η οποία μπορεί να αποτελείται από 1 έως 32 μεμονωμένες μετρήσεις, μπορεί να διαρκέσει από 4 ms έως 66 ms.

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

Καταχωρητές ελέγχου διαμόρφωσης

Οι δύο καταχωρητές ελέγχου διαμόρφωσης στο BMP280 βρίσκονται σε διευθύνσεις μητρώου 0xF4 και 0xF5 και αντιστοιχίζονται σε 6 μεμονωμένες τιμές ελέγχου διαμόρφωσης. 0xF4 αποτελείται από:

  • 3 bits osrs_t (μετρήστε τη θερμοκρασία 0, 1, 2, 4, 8 ή 16 φορές).
  • 3 bits osrs_p (μετρήστε την πίεση 0, 1, 2, 4, 8 ή 16 φορές). και
  • Λειτουργία 2 bits (Sleep, Forced (δηλαδή Single Shot)), Normal (δηλαδή συνεχής).

0xF5 αποτελείται από:

  • 3 bits t_sb (χρόνος αναμονής, 0,5ms έως 4000 ms).
  • Φίλτρο 3 bit (δείτε παρακάτω). και
  • 1 bit spiw_en που επιλέγει SPI ή I2C.

Η παράμετρος φίλτρου ελέγχει έναν τύπο αλγόριθμου εκθετικής διάσπασης ή φίλτρου απεριόριστης απόκρισης (IIR), που εφαρμόζεται στις τιμές μέτρησης της ακατέργαστης πίεσης και θερμοκρασίας (αλλά όχι στις τιμές υγρασίας). Η εξίσωση δίνεται στο φύλλο δεδομένων. Μια άλλη παρουσίαση είναι:

Τιμή (n) = Τιμή (n-1) * (K-1) / K + μέτρηση (n) / K

όπου (n) υποδεικνύει την πιο πρόσφατη τιμή μέτρησης και εξόδου · και K είναι η παράμετρος φίλτρου. Η παράμετρος φίλτρου Κ και μπορεί να ρυθμιστεί σε 1, 2, 4, 8 ή 16. Αν το Κ έχει οριστεί σε 1, η εξίσωση γίνεται απλά Τιμή (n) = μέτρηση (n). Η κωδικοποίηση της παραμέτρου φίλτρου είναι:

  • φίλτρο = 000, Κ = 1
  • φίλτρο = 001, Κ = 2
  • φίλτρο = 010, Κ = 4
  • φίλτρο = 011, Κ = 8
  • φίλτρο = 1xx, Κ = 16

Το BME 280 προσθέτει έναν περαιτέρω καταχωρητή ελέγχου διαμόρφωσης στη διεύθυνση 0xF2, "ctrl_hum" με μία μόνο παράμετρο 3-bit osrs_h (μετρήστε την υγρασία 0, 1, 2, 4, 8 ή 16 φορές).

Βήμα 4: Μέτρηση και χρόνος ανάγνωσης

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

Iddt - ρεύμα στη μέτρηση θερμοκρασίας. Τυπική τιμή 325 uA

Iddp - ρεύμα στη μέτρηση πίεσης. Τυπική τιμή 720 uA, μέγιστο 1120 uA

Iddsb - τρέχει σε κατάσταση αναμονής. Τυπική τιμή 0,2 uA, μέγιστο 0,5 uA

Iddsl - τρέχουσα σε κατάσταση αναστολής λειτουργίας. Τυπική τιμή 0,1 uA, μέγιστο 0,3 uA

Βήμα 5: Οδηγίες λογισμικού

Οδηγίες λογισμικού
Οδηγίες λογισμικού
Οδηγίες λογισμικού
Οδηγίες λογισμικού

Λειτουργία ριπής I2C

Το φύλλο δεδομένων BMP280 παρέχει οδηγίες σχετικά με την ανάγνωση δεδομένων (ενότητα 3.9). Λέει "συνιστάται ανεπιφύλακτα να χρησιμοποιείτε μια ριπή ανάγνωση και να μην απευθύνεστε σε κάθε καταχωρητή ξεχωριστά. Αυτό θα αποτρέψει μια πιθανή ανάμειξη byte που ανήκουν σε διαφορετικές μετρήσεις και θα μειώσει την κίνηση της διεπαφής." Δεν παρέχονται οδηγίες σχετικά με την ανάγνωση των παραμέτρων αντιστάθμισης/βαθμονόμησης. Πιθανότατα αυτά δεν είναι θέμα γιατί είναι στατικά και δεν αλλάζουν.

Αυτή η βιβλιοθήκη διαβάζει όλες τις συνεχόμενες τιμές σε μία μόνο λειτουργία ανάγνωσης - 24 byte στην περίπτωση των παραμέτρων αντιστάθμισης θερμοκρασίας και πίεσης, 6 byte για θερμοκρασία και πίεση σε συνδυασμό και 8 byte για υγρασία, θερμοκρασία και πίεση σε συνδυασμό. Όταν ελέγχεται μόνο η θερμοκρασία, διαβάζονται μόνο 3 byte.

Χρήση μακροεντολών (#define κ.λπ.)

Δεν υπάρχουν μακροεντολές σε αυτήν τη βιβλιοθήκη εκτός από τη συνηθισμένη μακροεντολή βιβλιοθήκης "include guard", η οποία αποτρέπει την επικάλυψη.

Όλες οι σταθερές ορίζονται χρησιμοποιώντας τη λέξη -κλειδί const και η εκτύπωση εντοπισμού σφαλμάτων ελέγχεται με τυπικές συναρτήσεις C.

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

Η περίπτωση για τη χρήση του const και όχι του #define είναι αρκετά σαφής - το const χρησιμοποιεί τους ίδιους πόρους με το #define (δηλαδή μηδέν) και οι τιμές που προκύπτουν ακολουθούν τους κανόνες του πεδίου εφαρμογής, μειώνοντας έτσι την πιθανότητα σφάλματος.

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

Βήμα 6: Απόδοση θερμοκρασίας

Σκοπεύω να το προσθέσω αργότερα.

Βήμα 7: Απόδοση πίεσης

Σκοπεύω να το προσθέσω αργότερα.

Συνιστάται: