Πίνακας περιεχομένων:
- Βήμα 1: BoM - Bill of Materials
- Βήμα 2: Εγκατάσταση του αισθητήρα θερμοκρασίας και υγρασίας
- Βήμα 3: Εγκατάσταση DS18B20 - Αισθητήρας θερμοκρασίας
- Βήμα 4: Εγκατάσταση του BMP180
- Βήμα 5: Μέτρηση του καιρού και του υψομέτρου με BMP180
- Βήμα 6: Το πλήρες HW
- Βήμα 7: Αποστολή δεδομένων στο ThingSpeak
- Βήμα 8: Αποστολή απομακρυσμένων δεδομένων στο ThingSpeak χρησιμοποιώντας το ESP8266
- Βήμα 9: Τελικές σημειώσεις
- Βήμα 10: Συμπέρασμα
Βίντεο: Μετεωρολογικός σταθμός IoT με RPi και ESP8266: 10 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:35
Σε προηγούμενα μαθήματα, παίζαμε με το NodeMCU, τους αισθητήρες και μάθαμε πώς να καταγράφουμε και να καταγράφουμε δεδομένα στην πλατφόρμα ThingSpeak (Internet of Things (IoT) που σας επιτρέπει να συλλέγετε και να αποθηκεύετε δεδομένα αισθητήρων στο cloud και να αναπτύσσετε εφαρμογές IoT):
IOT MADE EASY: ΑΠΟΚΑΤΑΣΤΑΣΗ ΔΕΔΟΜΕΝΑ ΑΠΟ ΤΟΝ ΤΕΛΙΚΟ ΚΑΙΡΟ: UV και ΘΕΡΜΟΚΡΑΣΙΑ ΑΕΡΑ & ΥΓΡΑΣΙΑ
Με αυτό το νέο σεμινάριο, θα μάθουμε πώς να κάνουμε το ίδιο, αλλά αυτή τη στιγμή, χρησιμοποιώντας ένα Raspberry Pi για τη λήψη δεδομένων από διάφορους αισθητήρες και επίσης διερευνώντας διαφορετικούς τρόπους επικοινωνίας μεταξύ συσκευών και ιστού:
Αισθητήρες και τύπος δημιουργίας:
- DHT22 (Θερμοκρασία και Υγρασία) ==> Digitalηφιακή επικοινωνία
- BMP180 (Θερμοκρασία και Πίεση) ==> Πρωτόκολλο I2C
- DS18B20 (Θερμοκρασία) ==> 1-Wire Protocol
Το διάγραμμα μπλοκ δείχνει τι θα πάρουμε στο τέλος με αυτό το έργο:
Βήμα 1: BoM - Bill of Materials
- Raspberry Pi V3 - 32,00 $
- Αισθητήρας θερμοκρασίας και σχετικής υγρασίας DHT22 - 9,95 USD
- Αντίσταση 4K7 ohm
- Αδιάβροχος αισθητήρας θερμοκρασίας DS18B20 - 5,95 USD
- Αντίσταση 4K7 ohm
- BMP180 Αισθητήρας βαρομετρικής πίεσης, θερμοκρασίας και υψομέτρου - 6,99 USD
Βήμα 2: Εγκατάσταση του αισθητήρα θερμοκρασίας και υγρασίας
Ο πρώτος αισθητήρας που θα εγκατασταθεί θα είναι ο DHT22 για τη λήψη δεδομένων θερμοκρασίας αέρα και σχετικής υγρασίας. Ο ιστότοπος ADAFRUIT παρέχει εξαιρετικές πληροφορίες σχετικά με αυτούς τους αισθητήρες. Παρακάτω, μερικές πληροφορίες που ανακτήθηκαν από εκεί:
ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ
Οι χαμηλού κόστους αισθητήρες θερμοκρασίας και υγρασίας DHT είναι πολύ βασικοί και αργοί, αλλά είναι ιδανικοί για χομπίστες που θέλουν να κάνουν κάποιες βασικές καταγραφές δεδομένων. Οι αισθητήρες DHT αποτελούνται από δύο μέρη, έναν χωρητικό αισθητήρα υγρασίας και ένα θερμίστορ. Υπάρχει επίσης ένα πολύ βασικό τσιπ στο εσωτερικό που κάνει κάποια αναλογική σε ψηφιακή μετατροπή και εκπέμπει ένα ψηφιακό σήμα με τη θερμοκρασία και την υγρασία. Το ψηφιακό σήμα είναι αρκετά εύκολο να διαβαστεί χρησιμοποιώντας οποιοδήποτε μικροελεγκτή.
DHT22 Κύρια χαρακτηριστικά:
- Χαμηλό κόστος
- Ισχύς 3 έως 5V και I/O
- Μέγιστη τρέχουσα χρήση 2,5mA κατά τη μετατροπή (ενώ ζητάτε δεδομένα)
- Καλό για μετρήσεις υγρασίας 0-100% με ακρίβεια 2-5%
- Καλό για μετρήσεις θερμοκρασίας -40 έως 125 ° C. Ακρίβεια ± 0,5 ° C
- Δεν υπερβαίνει το ρυθμό δειγματοληψίας 0,5 Hz (μία φορά κάθε 2 δευτερόλεπτα)
- Μέγεθος αμαξώματος 15,1mm x 25mm x 7,7mm
- 4 ακίδες με απόσταση 0,1"
Μόλις συνήθως χρησιμοποιείτε τον αισθητήρα σε αποστάσεις μικρότερες των 20m, θα πρέπει να συνδεθεί αντίσταση 4K7 ohm μεταξύ ακίδων δεδομένων και VCC. Ο ακροδέκτης δεδομένων εξόδου DHT22 θα συνδεθεί στο Raspberry GPIO 16. Ελέγξτε το παραπάνω ηλεκτρικό διάγραμμα, συνδέοντας τον αισθητήρα με ακίδες RPi όπως παρακάτω:
- Καρφίτσα 1 - Vcc ==> 3.3V
- Καρφίτσα 2 - Δεδομένα ==> GPIO 16
- Καρφίτσα 3 - Δεν συνδέεται
- Καρφίτσα 4 - Gnd ==> Gnd
Μην ξεχάσετε να εγκαταστήσετε την αντίσταση 4K7 ohm μεταξύ των καρφιτσών Vcc και Data
Μόλις συνδεθεί ο αισθητήρας, πρέπει επίσης να εγκαταστήσουμε τη βιβλιοθήκη του στο RPi μας.
Εγκατάσταση της βιβλιοθήκης DHT:
Στο Raspberry σας, ξεκινώντας από /στο σπίτι, μεταβείτε στο /Documents
cd Έγγραφα
Δημιουργήστε έναν κατάλογο για να εγκαταστήσετε τη βιβλιοθήκη και μεταβείτε εκεί:
mkdir DHT22_ Αισθητήρας
cd DHT22_Sensor
Στο πρόγραμμα περιήγησής σας, μεταβείτε στο Adafruit GitHub:
github.com/adafruit/Adafruit_Python_DHT
Κατεβάστε τη βιβλιοθήκη κάνοντας κλικ στον σύνδεσμο zip λήψης στα δεξιά και αποσυμπιέστε το αρχείο στον φάκελο Raspberry Pi που δημιουργήσατε πρόσφατα. Στη συνέχεια, μεταβείτε στον κατάλογο της βιβλιοθήκης (υποφάκελος που δημιουργείται αυτόματα κατά την αποσυμπίεση του αρχείου) και εκτελέστε την εντολή:
sudo python3 setup.py install
Ανοίξτε ένα δοκιμαστικό πρόγραμμα (DHT22_test.py) από το GITHUB μου
εισαγωγή Adafruit_DHT
DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 υγρασία, θερμοκρασία = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin) εάν η υγρασία δεν είναι Καμία και η θερμοκρασία δεν είναι Καμία: εκτύπωση ('Temp = {0: 0.1f}*C Υγρασία = {1: 0.1 f}%'. μορφή (θερμοκρασία, υγρασία)) άλλο: εκτύπωση ("Αποτυχία ανάγνωσης. Δοκιμάστε ξανά!")
Εκτελέστε το πρόγραμμα με την εντολή:
python3 DHT22_test.py
Η παρακάτω οθόνη εκτύπωσης τερματικού εμφανίζει το αποτέλεσμα.
Βήμα 3: Εγκατάσταση DS18B20 - Αισθητήρας θερμοκρασίας
Επισκόπηση αισθητήρα:
Θα χρησιμοποιήσουμε σε αυτό το σεμινάριο μια αδιάβροχη έκδοση του αισθητήρα DS18B20. Είναι πολύ χρήσιμο για απομακρυσμένη θερμοκρασία σε υγρές συνθήκες, για παράδειγμα σε υγρό έδαφος. Ο αισθητήρας είναι απομονωμένος και μπορεί να λάβει μετρήσεις έως τους 125oC (η Adafrut δεν συνιστά τη χρήση του πάνω από 100oC λόγω του καλωδίου PVC μπουφάν).
Ο DS18B20 είναι ένας ψηφιακός αισθητήρας που το κάνει καλό ακόμη και σε μεγάλες αποστάσεις! Αυτοί οι ψηφιακοί αισθητήρες θερμοκρασίας 1 καλωδίου είναι αρκετά ακριβείς (± 0,5 ° C σε μεγάλο εύρος) και μπορούν να δώσουν έως και 12 bits ακρίβειας από τον ενσωματωμένο ψηφιακό σε αναλογικό μετατροπέα. Λειτουργούν τέλεια με το NodeMCU χρησιμοποιώντας ένα μόνο ψηφιακό pin, και μπορείτε ακόμη και να συνδέσετε πολλαπλά στον ίδιο pin, καθένα έχει ένα μοναδικό αναγνωριστικό 64-bit εγγεγραμμένο στο εργοστάσιο για να τα διαφοροποιήσει.
Ο αισθητήρας λειτουργεί από 3,0 έως 5,0V, πράγμα που σημαίνει ότι μπορεί να τροφοδοτηθεί απευθείας από το 3,3V που παρέχεται από μία από τις ακίδες Raspberry (1 ή 17).
Ο αισθητήρας έχει 3 καλώδια:
- Μαύρο: GND
- Κόκκινο: VCC
- Κίτρινο: 1-Wire Data
Εδώ, μπορείτε να βρείτε τα πλήρη δεδομένα: DS18B20 Datasheet
Εγκατάσταση αισθητήρα:
Ακολουθήστε το παραπάνω διάγραμμα και κάντε τις συνδέσεις:
- Vcc ==> 3,3V
- Gnd ==> Gnd
- Δεδομένα ==> GPIO 4 (προεπιλογή για βιβλιοθήκη)
Εγκατάσταση της βιβλιοθήκης Python:
Στη συνέχεια, ας εγκαταστήσουμε τη βιβλιοθήκη Python που θα χειρίζεται τον αισθητήρα:
sudo pip3 εγκατάσταση w1thermsensor
Πριν από την εκτέλεση του σεναρίου για τον έλεγχο του αισθητήρα, ελέγξτε εάν η διεπαφή "1-Wire" είναι ενεργοποιημένη στο RPi (δείτε την παραπάνω οθόνη εκτύπωσης)
Μην ξεχάσετε να κάνετε επανεκκίνηση του RPi, αφού αλλάξετε τη διαμόρφωσή του
Δοκιμή του αισθητήρα:
Για τον έλεγχο του αισθητήρα μπορεί να χρησιμοποιηθεί ένα απλό σενάριο python:
χρόνο εισαγωγής
από w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor () while True: temperature = ds18b20Sensor.get_temperature () print ("The temperature is % s celsius" % temperature) time.sleep (1)
Βήμα 4: Εγκατάσταση του BMP180
Επισκόπηση αισθητήρα:
Το BMP180 είναι ο διάδοχος του BMP085, μιας νέας γενιάς ψηφιακών αισθητήρων πίεσης υψηλής ακρίβειας για εφαρμογές καταναλωτών. Τα ηλεκτρονικά εξαιρετικά χαμηλής ισχύος και χαμηλής τάσης του BMP180 είναι βελτιστοποιημένα για χρήση σε κινητά τηλέφωνα, PDA, συσκευές πλοήγησης GPS και εξωτερικό εξοπλισμό. Με χαμηλό υψόμετρο μόλις 0,25 μέτρα σε γρήγορο χρόνο μετατροπής, το BMP180 προσφέρει ανώτερες επιδόσεις. Η διασύνδεση I2C επιτρέπει την εύκολη ενσωμάτωση του συστήματος με έναν μικροελεγκτή. Το BMP180 βασίζεται στην πιεζοανθεκτική τεχνολογία για στιβαρότητα EMC, υψηλή ακρίβεια και γραμμικότητα καθώς και μακροπρόθεσμη σταθερότητα.
Το πλήρες φύλλο δεδομένων BMP μπορείτε να το βρείτε εδώ: BMP180 - Pressηφιακός αισθητήρας πίεσης
Εγκατάσταση αισθητήρα: Ακολουθήστε το παραπάνω διάγραμμα και πραγματοποιήστε τις συνδέσεις:
- Vin ==> 3,3V
- GND ==> GND
- SCL ==> GPIO 3
- SDA ==> GPIO 2
Ενεργοποίηση διεπαφής I2C
Μεταβείτε στη Διαμόρφωση RPi και επιβεβαιώστε ότι η διεπαφή I2C είναι ενεργοποιημένη. Εάν όχι, ενεργοποιήστε το και επανεκκινήστε το RPi.
Χρησιμοποιώντας το BMP180
Εάν όλα έχουν εγκατασταθεί εντάξει και όλα έχουν συνδεθεί εντάξει, είστε πλέον έτοιμοι να ενεργοποιήσετε το Pi σας και να αρχίσετε να βλέπετε τι σας λέει το BMP180 για τον κόσμο γύρω σας.
Το πρώτο πράγμα που πρέπει να κάνετε είναι να ελέγξετε αν το Pi βλέπει το BMP180 σας. Δοκιμάστε τα παρακάτω σε ένα παράθυρο τερματικού:
sudo i2cdetect -y 1
Εάν η εντολή λειτούργησε, θα πρέπει να δείτε κάτι παρόμοιο με την παραπάνω οθόνη τερματικού εκτύπωσης, δείχνοντας ότι το BMP180 βρίσκεται στο κανάλι '77'.
Εγκατάσταση της Βιβλιοθήκης BMP180:
Δημιουργήστε έναν κατάλογο για να εγκαταστήσετε τη βιβλιοθήκη:
mkdir BMP180_Sensorcd BMP180_Sensor
Στο πρόγραμμα περιήγησής σας, μεταβείτε στο Adafruit GITHub:
github.com/adafruit/Adafruit_Python_BMP
Κατεβάστε τη βιβλιοθήκη κάνοντας κλικ στον σύνδεσμο zip λήψης στα δεξιά και αποσυμπιέστε το αρχείο στο φάκελο που δημιουργήσατε στο Raspberry Pi. Στη συνέχεια, μεταβείτε στον υποφάκελο που δημιουργήθηκε και εκτελέστε την ακόλουθη εντολή στον κατάλογο της βιβλιοθήκης:
sudo python3 setup.py install
Ανοίξτε το Python IDE και δημιουργήστε ένα δοκιμαστικό πρόγραμμα και ονομάστε το, για παράδειγμα BMP180Test.py
εισαγωγή Adafruit_BMP. BMP085 ως BMP085sensor = BMP085. BMP085 () print ('Temp = {0: 0.2f} *C'.format (sensor.read_temperature ())) print (' Pressure = {0: 0.2f} Pa ' format (sensor.read_pressure ())) print ('Altitude = {0: 0.2f} m'.format (sensor.read_altitude ())) print (' Sealevel Pressure = {0: 0.2f} Pa'.format (sensor.read_sealevel_pressure ()))
Εκτελέστε το πρόγραμμα δοκιμών:
python3 BMP180Test.py
Η παραπάνω οθόνη εκτύπωσης τερματικού εμφανίζει το αποτέλεσμα.
Σημειώστε ότι αυτή η πίεση παρουσιάζεται σε Pa (Pascals). Δείτε το επόμενο βήμα για να κατανοήσετε καλύτερα αυτήν τη μονάδα.
Βήμα 5: Μέτρηση του καιρού και του υψομέτρου με BMP180
Ας αφιερώσουμε λίγο χρόνο για να καταλάβουμε λίγο περισσότερα για το τι θα πάρουμε, με τις ενδείξεις BMP. Μπορείτε να παραλείψετε αυτό το μέρος του σεμιναρίου ή να επιστρέψετε αργότερα.
Αν θέλετε να μάθετε περισσότερα για τις αναγνώσεις αισθητήρων, μεταβείτε σε αυτό το υπέροχο σεμινάριο:
Το BMP180 σχεδιάστηκε για να μετρήσει με ακρίβεια την ατμοσφαιρική πίεση. Η ατμοσφαιρική πίεση ποικίλλει ανάλογα με τον καιρό και το υψόμετρο.
Τι είναι η ατμοσφαιρική πίεση;
Ο ορισμός της ατμοσφαιρικής πίεσης είναι μια δύναμη που ο αέρας γύρω σας ασκεί σε όλα. Το βάρος των αερίων στην ατμόσφαιρα δημιουργεί ατμοσφαιρική πίεση. Μια κοινή μονάδα πίεσης είναι "λίβρες ανά τετραγωνική ίντσα" ή psi. Θα χρησιμοποιήσουμε εδώ τη διεθνή σημειογραφία, δηλαδή τα νιούτον ανά τετραγωνικό μέτρο, τα οποία ονομάζονται πασκάλ (Pa).
Εάν παίρνατε στήλη αέρα πλάτους 1 cm θα ζύγιζε περίπου 1 κιλό
Αυτό το βάρος, πιέζοντας προς τα κάτω το αποτύπωμα αυτής της στήλης, δημιουργεί την ατμοσφαιρική πίεση που μπορούμε να μετρήσουμε με αισθητήρες όπως το BMP180. Επειδή αυτή η στήλη πλάτους εκατοστού αέρα ζυγίζει περίπου 1Kg, προκύπτει ότι η μέση πίεση της στάθμης της θάλασσας είναι περίπου 101325 πασκάλ, ή καλύτερα, 1013,25 hPa (1 hPa είναι επίσης γνωστή ως milibar - mbar). Αυτό θα πέσει περίπου 4% για κάθε 300 μέτρα που ανεβαίνετε. Όσο πιο ψηλά ανεβαίνετε, τόσο λιγότερη πίεση θα δείτε, γιατί η στήλη στην κορυφή της ατμόσφαιρας είναι πολύ πιο κοντή και επομένως ζυγίζει λιγότερο. Αυτό είναι χρήσιμο να γνωρίζετε, επειδή μετρώντας την πίεση και κάνοντας μαθηματικά, μπορείτε να προσδιορίσετε το υψόμετρο.
Η πίεση του αέρα στα 3, 810 μέτρα είναι μόνο η μισή από αυτήν στο επίπεδο της θάλασσας.
Το BMP180 εξάγει απόλυτη πίεση σε πασκάλ (Pa). Ένα pascal είναι μια πολύ μικρή ποσότητα πίεσης, περίπου η ποσότητα που θα ασκήσει ένα φύλλο χαρτιού στηριζόμενη σε ένα τραπέζι. Πιο συχνά θα βλέπετε μετρήσεις σε εκτοπασκάλες (1 hPa = 100 Pa). Η βιβλιοθήκη που χρησιμοποιείται εδώ παρέχει εξόδους κυμαινόμενων σημείων σε hPa, η οποία τυχαίνει επίσης να ισούται με ένα χιλιοστό μπαρ (mbar).
Ακολουθούν μερικές μετατροπές σε άλλες μονάδες πίεσης:
- 1 hPa = 100 Pa = 1 mbar = 0,001 bar
- 1 hPa = 0,75006168 Torr
- 1 hPa = 0,01450377 psi (λίβρες ανά τετραγωνική ίντσα)
- 1 hPa = 0,02953337 inHg (ίντσες υδραργύρου)
- 1 hpa = 0.00098692 atm (τυπικές ατμόσφαιρες)
Επιδράσεις θερμοκρασίας
Επειδή η θερμοκρασία επηρεάζει την πυκνότητα ενός αερίου και η πυκνότητα επηρεάζει τη μάζα ενός αερίου και η μάζα επηρεάζει την πίεση (whww), η ατμοσφαιρική πίεση θα αλλάξει δραματικά με τη θερμοκρασία. Οι πιλότοι το γνωρίζουν ως "υψόμετρο πυκνότητας", το οποίο διευκολύνει την απογείωση σε μια κρύα μέρα από μια ζεστή, επειδή ο αέρας είναι πυκνότερος και έχει μεγαλύτερο αεροδυναμικό αποτέλεσμα. Για να αντισταθμίσει τη θερμοκρασία, το BMP180 περιλαμβάνει έναν αρκετά καλό αισθητήρα θερμοκρασίας καθώς και έναν αισθητήρα πίεσης.
Για να εκτελέσετε μια ανάγνωση πίεσης, παίρνετε πρώτα μια ένδειξη θερμοκρασίας και στη συνέχεια τη συνδυάζετε με μια πρώτη ένδειξη πίεσης για να καταλήξετε σε μια τελική μέτρηση πίεσης με αντιστάθμιση θερμοκρασίας. (Η βιβλιοθήκη τα κάνει όλα αυτά πολύ εύκολα.)
Μέτρηση της Απόλυτης Πίεσης
Εάν η εφαρμογή σας απαιτεί μέτρηση της απόλυτης πίεσης, το μόνο που έχετε να κάνετε είναι να λάβετε μια ένδειξη θερμοκρασίας και, στη συνέχεια, να κάνετε μια ανάγνωση πίεσης (δείτε το σκίτσο του παραδείγματος για λεπτομέρειες). Η τελική ένδειξη πίεσης θα είναι σε hPa = mbar. Εάν το επιθυμείτε, μπορείτε να το μετατρέψετε σε διαφορετική μονάδα χρησιμοποιώντας τους παραπάνω συντελεστές μετατροπής.
Σημειώστε ότι η απόλυτη πίεση της ατμόσφαιρας θα ποικίλει τόσο με το υψόμετρο όσο και με τις τρέχουσες καιρικές συνθήκες, και τα δύο είναι χρήσιμα πράγματα για μέτρηση.
Καιρικές Παρατηρήσεις
Η ατμοσφαιρική πίεση σε οποιαδήποτε τοποθεσία στη γη (ή οπουδήποτε με ατμόσφαιρα) δεν είναι σταθερή. Η περίπλοκη αλληλεπίδραση μεταξύ της περιστροφής της γης, της κλίσης του άξονα και πολλών άλλων παραγόντων οδηγεί σε κινούμενες περιοχές υψηλότερης και χαμηλότερης πίεσης, οι οποίες με τη σειρά τους προκαλούν τις μεταβολές του καιρού που βλέπουμε καθημερινά. Παρακολουθώντας τις αλλαγές στην πίεση, μπορείτε να προβλέψετε βραχυπρόθεσμες αλλαγές στον καιρό. Για παράδειγμα, η πτώση της πίεσης συνήθως σημαίνει υγρό καιρό ή πλησιάζει καταιγίδα (ένα σύστημα χαμηλής πίεσης εισέρχεται). Η αύξηση της πίεσης συνήθως σημαίνει ότι πλησιάζει ο καθαρός καιρός (ένα σύστημα υψηλής πίεσης κινείται). Αλλά θυμηθείτε ότι η ατμοσφαιρική πίεση ποικίλλει επίσης ανάλογα με το υψόμετρο. Η απόλυτη πίεση στο σπίτι μου, Lo Barnechea στη Χιλή (υψόμετρο 950μ) θα είναι πάντα χαμηλότερη από την απόλυτη πίεση στο Σαν Φρανσίσκο για παράδειγμα (λιγότερο από 2 μέτρα, σχεδόν επίπεδο θάλασσας). Εάν οι μετεωρολογικοί σταθμοί απλώς ανέφεραν την απόλυτη πίεσή τους, θα ήταν δύσκολο να συγκρίνουμε άμεσα τις μετρήσεις πίεσης από τη μια θέση στην άλλη (και οι μεγάλης κλίμακας προβλέψεις καιρού εξαρτώνται από μετρήσεις από όσο το δυνατόν περισσότερους σταθμούς).
Για την επίλυση αυτού του προβλήματος, οι μετεωρολογικοί σταθμοί αφαιρούν πάντα τις επιπτώσεις του υψομέτρου από τις αναφερόμενες ενδείξεις πίεσης προσθέτοντας μαθηματικά την ισοδύναμη σταθερή πίεση για να φαίνεται ότι η ένδειξη έγινε στη στάθμη της θάλασσας. Όταν το κάνετε αυτό, μια υψηλότερη ανάγνωση στο Σαν Φρανσίσκο από τη Lo Barnechea θα είναι πάντα λόγω των καιρικών συνθηκών και όχι λόγω του υψομέτρου.
Για να γίνει αυτό, υπάρχει μια λειτουργία στη βιβλιοθήκη που ονομάζεται στάθμη της θάλασσας (P, A). Αυτό παίρνει την απόλυτη πίεση (P) σε hPa και το τρέχον υψόμετρο του σταθμού (A) σε μέτρα και αφαιρεί τις επιπτώσεις του υψομέτρου από την πίεση. Μπορείτε να χρησιμοποιήσετε την έξοδο αυτής της λειτουργίας για να συγκρίνετε άμεσα τις ενδείξεις καιρού με άλλους σταθμούς σε όλο τον κόσμο.
Προσδιορισμός Υψομέτρου
Δεδομένου ότι η πίεση ποικίλλει ανάλογα με το υψόμετρο, μπορείτε να χρησιμοποιήσετε έναν αισθητήρα πίεσης για να μετρήσετε το υψόμετρο (με μερικές προειδοποιήσεις). Η μέση πίεση της ατμόσφαιρας στο επίπεδο της θάλασσας είναι 1013,25 hPa (ή mbar). Αυτό μειώνεται στο μηδέν καθώς ανεβαίνετε προς το κενό του χώρου. Επειδή η καμπύλη αυτής της πτώσης είναι καλά κατανοητή, μπορείτε να υπολογίσετε τη διαφορά ύψους μεταξύ δύο μετρήσεων πίεσης (p και p0) χρησιμοποιώντας μια συγκεκριμένη εξίσωση.
Εάν χρησιμοποιείτε την πίεση της στάθμης της θάλασσας (1013,25 hPa) ως βασική πίεση (p0), η έξοδος της εξίσωσης θα είναι το τρέχον υψόμετρό σας πάνω από την επιφάνεια της θάλασσας. Υπάρχει μια λειτουργία στη βιβλιοθήκη που ονομάζεται υψόμετρο (P, P0) που σας επιτρέπει να λάβετε το "υπολογισμένο υψόμετρο".
Η παραπάνω εξήγηση εξήχθη από το σεμινάριο BMP 180 Sparkfun.
Βήμα 6: Το πλήρες HW
Βήμα 7: Αποστολή δεδομένων στο ThingSpeak
Σε αυτό το σημείο, μάθαμε πώς να προετοιμάζουμε το RPi να συλλαμβάνει δεδομένα και από τους 3 αισθητήρες, εκτυπώνοντάς τους στο τερματικό. Τώρα, ήρθε η ώρα να δούμε πώς να στείλουμε αυτά τα δεδομένα στην πλατφόρμα IoT, το ThingSpeak.
Ας ξεκινήσουμε!
Πρώτον, πρέπει να έχετε λογαριασμό στο ThinkSpeak.com
Ακολουθήστε τις οδηγίες για να δημιουργήσετε ένα κανάλι και λάβετε υπόψη το αναγνωριστικό καναλιού και το κλειδί API εγγραφής
Λήψη του Python Script από το GitHub μου: localData ToTS_v1_EXT.py
Ας σχολιάσουμε τα πιο σημαντικά μέρη του κώδικα:
Αρχικά, ας εισάγουμε τη βιβλιοθήκη ThingSpeak, ορίζουμε το πρόγραμμα -πελάτη WiFi και ορίζουμε τα διαπιστευτήριά σας σε τοπικό δρομολογητή και Thinkspeak:
εισαγωγή πραγμάτων
Υπάρχουν διάφοροι τρόποι επικοινωνίας με το ThingSpeak, ο απλούστερος τρόπος θα ήταν η χρήση της βιβλιοθήκης πελάτη για το API thingspeak.com που αναπτύχθηκε από τους Mikolaj Chwaliz και Keith Ellis.
Μπορείτε να κατεβάσετε τη βιβλιοθήκη από τη διεύθυνση https://github.com/mchwalisz/thingspeak ή να χρησιμοποιήσετε PIP στο τερματικό:
sudo pip3 install thingspeak
Στη συνέχεια, μέσα στο σενάριο, ενημερώστε τα διαπιστευτήρια του καναλιού ThingSpeak
chId = 9999999 # Εισαγάγετε με το αναγνωριστικό καναλιού σας
tsKey = 'ΕΙΣΟΔΟΣ ΜΕ ΤΟ ΚΑΝΑΛΙ ΣΑΣ ΓΡΑΦΤΕ ΤΟ ΚΛΕΙΔΙ' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)
Τώρα, ας αρχικοποιήσουμε τους 3 αισθητήρες:
# DS18B20 1-Wire βιβλιοθήκη
από w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor () # Από προεπιλογή, το GPIO 4 χρησιμοποιείται από τη βιβλιοθήκη # DHT22 Library import Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180MPMPMP080MPMP085MP Θα πρέπει να ορίσετε το πραγματικό υψόμετρο όπου βρίσκεται ο Μετεωρολογικός σας Σταθμός, ενημερώνοντας την Παγκόσμια μεταβλητή "altReal". Στην περίπτωσή μου, ο Σταθμός μου βρίσκεται στα 950μ πάνω από την επιφάνεια της θάλασσας
παγκόσμιο altReal
altReal = 950
Μόλις εισέλθουμε με το πραγματικό υψόμετρο του σταθμού ως είσοδο, μπορούμε να λάβουμε την απόλυτη πίεση, την πίεση της στάθμης της θάλασσας, τη θερμοκρασία και το υψόμετρο χρησιμοποιώντας τη συνάρτηση bmp180GetData (υψόμετρο):
def bmp180GetData (υψόμετρο):
temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres/pow (1.0 - altitude/44330.0, 5.255) temp = round (temp, 1) pres = round (pres/100, 2) # απόλυτη πίεση σε hPa (ή mbar) alt=στρογγυλή (alt) presSeaLevel = στρογγυλή (presSeaLevel/100, 2) # απόλυτη πίεση σε hPa (ή mbar) θερμοκρασία επιστροφής, pres, alt, presSeaLevel
Η συνάρτηση getLocalData (), θα επιστρέψει όλα τα τοπικά δεδομένα που καταγράφονται από τον σταθμό μας:
def getLocalData ():
global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Λάβετε χρόνο για ανάγνωση τώρα = datetime.datetime.now () timeString = now.strftime ("%Y-%m-%d%H:%M") # Διαβάστε εξωτερική θερμοκρασία (απόσταση 1 μέτρου) tempExt = στρογγυλή (ds18b20Sensor.get_temperature (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT22Tensor) δεν είναι DHTH και tempDHT δεν είναι Καμία: humLab = στρογγυλή (humDHT
Αφού καταγράψετε όλα τα δεδομένα από τις παραπάνω λειτουργίες, πρέπει να τα στείλετε στο ThingSpeak. Θα το κάνετε χρησιμοποιώντας τη συνάρτηση sendDataTs ():
def sendDataTs ():
data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] Δεδομένα που στάλθηκαν για 5 πεδία: ", tempLab, tempExt, humLab, presSL, altLab)
Με τα δεδομένα του καναλιού σας ενημερωμένα, αποθηκεύστε το σενάριο και εκτελέστε το στο τερματικό σας:
sudo Python3 localData_ToTs_v1_EXT.py
Σχετικά με τα πρωτόκολλα επικοινωνίας
Λάβετε υπόψη ότι χρησιμοποιώντας τη "βιβλιοθήκη πραγμάτων", εισάγεται η "βιβλιοθήκη αιτημάτων", δηλαδή μια βιβλιοθήκη HTTP με άδεια Apache2, γραμμένη σε Python. Μπορείτε να βρείτε την επίσημη τεκμηρίωση αιτήματος εγκατάστασης εδώ:
docs.python-requests.org/en/latest/user/install/
Εάν είναι απαραίτητο, πριν εκτελέσετε το σενάριό σας, μπορείτε να επαληθεύσετε εάν έχει εγκατασταθεί η βιβλιοθήκη αιτημάτων:
sudo pip3 αιτήματα εγκατάστασης
Προαιρετικά, μπορείτε να χρησιμοποιήσετε το MTTQ ως μέθοδο αποστολής δεδομένων στο ThingSpeak. Το MQTT διαφέρει από το HTTP, μόλις σχεδιαστεί ειδικά για να είναι ελαφρύ και προορίζεται για ενσωματωμένες συσκευές με χαμηλή απόδοση RAM και CPU. Επίσης, στις περισσότερες περιπτώσεις, το MQTT χρησιμοποιεί λιγότερο εύρος ζώνης.
Ανατρέξτε σε αυτό το σεμινάριο: Ενημερώστε ένα κανάλι ThingSpeak χρησιμοποιώντας MQTT σε ένα Raspberry Pi για περισσότερες λεπτομέρειες.
Βήμα 8: Αποστολή απομακρυσμένων δεδομένων στο ThingSpeak χρησιμοποιώντας το ESP8266
Για αυτό το βήμα, θα χρησιμοποιήσουμε το ίδιο HW που εξηγήθηκε στο σεμινάριο muy:
IOT MADE EASY: ΑΠΟΚΑΤΑΣΤΑΣΗ ΔΕΔΟΜΕΝΑ ΑΠΟ ΤΟΝ ΤΕΛΙΚΟ ΚΑΙΡΟ: UV και ΘΕΡΜΟΚΡΑΣΙΑ ΑΕΡΑ & ΥΓΡΑΣΙΑ
Ο κώδικας που θα χρησιμοποιήσουμε εδώ, είναι βασικά ο ίδιος που χρησιμοποιείται σε αυτό το σεμινάριο. Ας σχολιάσουμε τα πιο σημαντικά μέρη του κώδικα:
Αρχικά, ας καλέσουμε τη βιβλιοθήκη ESP8266, να ορίσουμε το πρόγραμμα -πελάτη WiFi και να ορίσουμε τα διαπιστευτήρια τοπικού δρομολογητή και Thinkspeak:
/ * NodeMCU ESP12-E */
#include WiFiClient client. const char* MY_SSID = "ΕΙΣΟΔΟΣ ΜΕ ΤΟ SSDID ΣΑΣ"; const char* MY_PWD = "ΕΙΣΟΔΟΣ ΜΕ ΤΟ ΚΩΔΙΚΟ ΣΑΣ"; /* Thinkspeak*/ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "ΕΙΣΟΔΟΣ ΜΕ ΤΟ ΓΡΑΠΤΟ ΚΛΕΙΔΙ ΣΑΣ";
Δεύτερον, ας συμπεριλάβουμε μια πολύ σημαντική βιβλιοθήκη για έργα IoT: SimpleTimer.h:
/ * ΧΡΟΝΟΔΙΑΚΟΠΤΗΣ */
#include SimpleTimer timer;
Τρίτον, κατά τη ρύθμιση (), θα ξεκινήσουμε σειριακή επικοινωνία, θα καλέσουμε τη λειτουργία connectWiFi () και θα ορίσουμε τα χρονόμετρα. Σημειώστε ότι η γραμμή κώδικα: timer.setInterval (60000L, sendDataTS). θα καλεί τη συνάρτηση sendDataTS () κάθε 60 δευτερόλεπτα, προκειμένου να ανεβάσει δεδομένα στο κανάλι ThinkSpeak.
void setup ()
{… Serial.begin (115200); καθυστέρηση (10)? … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}
Τέλος, αλλά όχι λιγότερο σημαντικό, κατά τη διάρκεια του βρόχου (), η μόνη εντολή που χρειάζεται είναι η εκκίνηση του χρονοδιακόπτη και αυτό είναι όλο!
κενός βρόχος ()
{… Timer.run (); // Ξεκινά το SimpleTimer}
Παρακάτω, μπορείτε να δείτε τις δύο σημαντικές λειτουργίες που χρησιμοποιούνται για τον χειρισμό της επικοινωνίας Thinkspeak:
Σύνδεση ESP12-E με το δίκτυό σας WiFi:
/***************************************************
*Σύνδεση WiFi ******************************************* ***/ void connectWifi () {Serial.print ("Connecting to"+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {καθυστέρηση (1000); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi Connected"); Serial.println (""); }
Το ESP12-E στέλνει δεδομένα στο ThinkSpeak:
***************************************************
*Αποστολή δεδομένων στο Thinkspeak Channel **************************************** ******/ void sendDataTS (άκυρο) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& field6 ="; postStr += String (temp); postStr += "& field7 ="; postStr += String (βουητό); postStr += "& field8 ="; postStr += String (dataSensorUV); postStr += "\ r / n / r / n"; client.print ("POST /ενημέρωση HTTP /1.1 / n"); client.print ("Host: api.thingspeak.com / n"); client.print ("Σύνδεση: κλείσιμο / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Τύπος περιεχομένου: application/x-www-form-urlencoded / n"); client.print ("Περιεχόμενο-Μήκος:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); καθυστέρηση (1000)? } εστάλη ++; client.stop (); }
Ο πλήρης κωδικός μπορεί να βρεθεί στο GitHub μου: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT
Μόλις ανεβάσετε τον κωδικό στο NodeMCU. Ας συνδέσουμε μια εξωτερική μπαταρία και κάνουμε κάποια μέτρηση κάτω από τον ήλιο. Βάζω τον Απομακρυσμένο Σταθμό στην οροφή και αρχίζω να καταγράφω δεδομένα στο ThingSpeak.com όπως φαίνεται στις παραπάνω φωτογραφίες.
Βήμα 9: Τελικές σημειώσεις
Ο κύριος σκοπός αυτού του σεμιναρίου ήταν να δείξει πώς να συνδέσετε το Raspberry Pi με το ThingSpeak. Αυτό είναι υπέροχο για τη λήψη δεδομένων και την καταγραφή τους σε μια πλατφόρμα IoT.
Χρησιμοποιώντας την ευκαιρία, στείλαμε επίσης δεδομένα στο συγκεκριμένο κανάλι, συλλαμβάνοντάς τα από έναν απομακρυσμένο σταθμό χρησιμοποιώντας ένα ESP8266. Αυτή η προσέγγιση είναι εντάξει, αλλά όχι η καλύτερη. Επειδή έχουμε μια "ασύγχρονη" λειτουργία, μερικές φορές, και τα δύο, το RPi και το ESP8266 προσπαθούν να καταγράψουν ταυτόχρονα (ή με μικρό διάστημα) αυτό που διαψεύδεται από το ThingSpeak. Το ιδανικό θα ήταν το ESP8266 να στέλνει δεδομένα τοπικά στο Raspberry Pi και το τελευταίο να είναι υπεύθυνο για τον χειρισμό όλων των δεδομένων. Κάνοντας αυτό, ο "Κεντρικός Σταθμός" (Raspberry Pi), θα μπορούσε να κάνει 3 πράγματα:
- Καταγράψτε όλα τα δεδομένα σε μια τοπική βάση δεδομένων
- Παρουσιάστε όλα τα δεδομένα σε μια τοπική ιστοσελίδα (χρησιμοποιώντας το Flask όπως φαίνεται στην παραπάνω φωτογραφία)
- Αποστολή όλων των δεδομένων στο ThingSpeak ταυτόχρονα.
Σε ένα μελλοντικό σεμινάριο, θα διερευνήσουμε αυτές τις επιλογές.
Βήμα 10: Συμπέρασμα
Όπως πάντα, ελπίζω ότι αυτό το έργο μπορεί να βοηθήσει άλλους να βρουν τον δρόμο τους στον συναρπαστικό κόσμο των ηλεκτρονικών!
Για λεπτομέρειες και τελικό κωδικό, επισκεφθείτε το αποθετήριο GitHub: RPi-NodeMCU-Weather-Station
Για περισσότερα έργα, επισκεφθείτε το ιστολόγιό μου: MJRoBot.org
Μείνετε συντονισμένοι! Επόμενο σεμινάριο θα στείλουμε δεδομένα από έναν απομακρυσμένο μετεωρολογικό σταθμό σε έναν κεντρικό, με βάση έναν διακομιστή Ιστού Raspberry Pi:
Saludos από τον νότο του κόσμου!
Τα λέμε στο επόμενο διδακτικό μου!
Σας ευχαριστώ, Μαρσέλο
Συνιστάται:
Επαγγελματικός μετεωρολογικός σταθμός με χρήση ESP8266 και ESP32 DIY: 9 βήματα (με εικόνες)
Επαγγελματικός μετεωρολογικός σταθμός με χρήση ESP8266 και ESP32 DIY: Το LineaMeteoStazione είναι ένας πλήρης μετεωρολογικός σταθμός ο οποίος μπορεί να διασυνδεθεί με επαγγελματίες αισθητήρες από το Sensirion καθώς και με κάποιο εξάρτημα Davis Instrument (Rain Gauge, Anemometer)
Μετεωρολογικός σταθμός NaTaLia: Μετεωρολογικός σταθμός Arduino Solar Powered Done the Right Way: 8 βήματα (με εικόνες)
Μετεωρολογικός Σταθμός NaTaLia: Ο Μετεωρολογικός Σταθμός Arduino έγινε με τον σωστό τρόπο: Μετά από 1 χρόνο επιτυχούς λειτουργίας σε 2 διαφορετικές τοποθεσίες, μοιράζομαι τα σχέδια έργων μου με ηλιακή ενέργεια και εξηγώ πώς εξελίχθηκε σε ένα σύστημα που μπορεί πραγματικά να επιβιώσει για μεγάλο χρονικό διάστημα περιόδους από την ηλιακή ενέργεια. Αν ακολουθείτε
Μετεωρολογικός σταθμός DIY & Σταθμός αισθητήρα WiFi: 7 βήματα (με εικόνες)
Μετεωρολογικός Σταθμός DIY & WiFi Sensor Station: Σε αυτό το έργο θα σας δείξω πώς να δημιουργήσετε έναν μετεωρολογικό σταθμό μαζί με έναν σταθμό αισθητήρα WiFi. Ο σταθμός αισθητήρων μετρά τα τοπικά δεδομένα θερμοκρασίας και υγρασίας και τα στέλνει, μέσω WiFi, στον μετεωρολογικό σταθμό. Ο μετεωρολογικός σταθμός εμφανίζει τότε
Μετεωρολογικός σταθμός WiFi μετεωρολογικός σταθμός V1.0: 19 βήματα (με εικόνες)
Solar Powered WiFi Weather Station V1.0: Σε αυτό το Εκπαιδευτικό, θα σας δείξω πώς να φτιάξετε έναν Μετεωρολογικό σταθμό με ηλιακή ενέργεια με έναν πίνακα Wemos. Το Wemos D1 Mini Pro διαθέτει έναν μικρό παράγοντα μορφής και μια μεγάλη γκάμα ασπίδων plug-and-play το καθιστούν ιδανική λύση για γρήγορη απόκτηση
Μετεωρολογικός σταθμός RPi και ψηφιακό ρολόι: 4 βήματα (με εικόνες)
Μετεωρολογικός Σταθμός RPi και Digitalηφιακό Ρολόι: Αυτό είναι ένα γρήγορο και εύκολο έργο και μια ωραία οθόνη για επίδειξη. Εμφανίζει τόσο την ώρα, τις καιρικές συνθήκες και τη θερμοκρασία. Και αν σας αρέσει αυτό που βλέπετε, ακολουθήστε με στο Instagram και στο Twitter (@Anders644PI) για να συμβαδίσετε με αυτό που φτιάχνω. Το