Πίνακας περιεχομένων:
Βίντεο: RuuviTag και PiZero W και Blinkt! θερμόμετρο βασισμένο σε φάρο Bluetooth: 3 βήματα (με εικόνες)
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:35
Αυτό το διδακτικό περιγράφει μια προσέγγιση για την ανάγνωση δεδομένων θερμοκρασίας και υγρασίας από ένα RuuviTag χρησιμοποιώντας Bluetooth με ένα Raspberry Pi Zero W και για την εμφάνιση των τιμών σε δυαδικούς αριθμούς σε μια αναλαμπή Pimoroni! pHAT. to για να το πούμε σύντομα: πώς να οικοδομήσουμε μια τελευταία λέξη της τεχνολογίας και λίγο κακό θερμόμετρο.
Ο RuuviTag είναι ένας φάρος bluetooth με αισθητήρα ανοιχτού κώδικα που έρχεται με αισθητήρες θερμοκρασίας/υγρασίας/πίεσης και επιτάχυνσης, αλλά μπορεί επίσης να λειτουργήσει ως τυπικός φάρος εγγύτητας Eddystone/iBeacon. Wasταν ένα πολύ επιτυχημένο έργο Kickstarter και πήρα το δικό μου πριν από μερικές εβδομάδες. Υπάρχει ένα Github με λογισμικό python για να διαβάσετε το RuuviTag χρησιμοποιώντας ένα βατόμουρο και έχω χρησιμοποιήσει ένα από τα παραδείγματά τους, με κάποιες προσθήκες.
Το Raspberry Pi Zero W είναι το τελευταίο μέλος της οικογένειας RPi, βασικά ένα Pi Zero με Bluetooth και WLAN.
Το αστραφτερό! Το pHAT από το Pimoroni είναι βασικά μια λωρίδα οκτώ LED RBG που έχουν διαμορφωθεί ως HAT για το Raspberry Pi. Είναι πολύ εύκολο στη χρήση και συνοδεύεται από βιβλιοθήκη python. Η ιδέα ήταν να διαβάσετε τα δεδομένα από το RuuviTag και να τα εμφανίσετε χρησιμοποιώντας το blinkt! ΚΑΠΕΛΟ. Οι τιμές εμφανίζονται ως δυαδικοί αριθμοί χρησιμοποιώντας 7 LED, ενώ οι οκτώ χρησιμοποιούνται για να δείξουν εάν εμφανίζονται τιμές υγρασίας ή θερμοκρασίας (+/-/0).
Βήμα 1: Ρύθμιση του συστήματος
Η ρύθμιση του συστήματος είναι εύκολη:- Ενεργοποιήστε το RuuviTag (έκδοση αισθητήρα θερμοκρασίας RuuviTag).
- Ρυθμίστε το RPi Zero W, RPi3 ή οποιοδήποτε άλλο RPi με προσθήκη χωρητικότητας bluetooth, ακολουθώντας τις οδηγίες στη διεύθυνση www.raspberrypi.org.
- Τοποθετήστε το blinkt! HAT στο RPi (ενώ είναι εκτός λειτουργίας).
- Εγκαταστήστε το blinkt! και λογισμικό RuuviTag, όπως υποδεικνύεται στις αντίστοιχες σελίδες του GitHub.
- Τώρα πρέπει να προσδιορίσετε τη διεύθυνση MAC του RuuviTag
- αντιγράψτε το συνημμένο πρόγραμμα Python, ανοίξτε το με το IDLE για την Python 3
- αλλάξτε τη διεύθυνση MAC του RuuviTag στη δική σας και, στη συνέχεια, αποθηκεύστε και εκτελέστε το πρόγραμμα.
- μη διστάσετε να τροποποιήσετε και να βελτιστοποιήσετε το πρόγραμμα. Το πρόγραμμα έρχεται ως έχει, για να χρησιμοποιηθεί με δική σας ευθύνη, δεν αναλαμβάνεται καμία ευθύνη για τυχόν ζημίες.
Βήμα 2: Η συσκευή και το πρόγραμμα
Όπως προαναφέρθηκε, η ιδέα ήταν να κατασκευαστεί ένα απλό και φθηνό σύστημα για την ανάγνωση δεδομένων από το φάρο και την εμφάνιση αριθμητικών τιμών στο blinkt! ΚΑΠΕΛΟ, ή παρόμοια λωρίδα LED.
Το εύρος των τιμών για τη θερμοκρασία που θα μετρηθεί με σύστημα βασισμένο σε RPi θα είναι στις περισσότερες περιπτώσεις κάπου μεταξύ - 50 ° C και +80 ° C, για υγρασία μεταξύ 0 και 100%. Έτσι, μια οθόνη που μπορεί να δώσει τιμές από -100 έως +100 θα είναι αρκετή για τις περισσότερες εφαρμογές. Οι δεκαδικοί αριθμοί μικρότεροι ως 128 μπορούν να εμφανιστούν ως δυαδικοί αριθμοί με 7 bits (ή LED). Έτσι, το πρόγραμμα λαμβάνει τις τιμές θερμοκρασίας και υγρασίας από το RuuviTag ως αριθμούς "float" και τους μετατρέπει σε δυαδικούς αριθμούς, οι οποίοι στη συνέχεια εμφανίζονται στο blinkt !.
Ως πρώτο βήμα, ο αριθμός στρογγυλοποιείται, αναλύεται εάν είναι θετικός, αρνητικός ή μηδενικός και στη συνέχεια μετατρέπεται σε θετικό αριθμό χρησιμοποιώντας "abs". Στη συνέχεια, ο δεκαδικός αριθμός μετατρέπεται σε 7ψήφιο δυαδικό αριθμό, βασικά μια συμβολοσειρά 0s και 1s, η οποία αναλύεται και εμφανίζεται στα τελευταία 7 εικονοστοιχεία του blinkt !.
Για τιμές θερμοκρασίας, το πρώτο εικονοστοιχείο υποδεικνύει εάν η τιμή είναι θετική (κόκκινη), μηδέν (ματζέντα) ή αρνητική (μπλε). Εμφανίζοντας τιμές υγρασίας έχει οριστεί σε πράσινο. Για να απλοποιηθεί η διάκριση μεταξύ τιμών θερμοκρασίας και υγρασίας, τα δυαδικά εικονοστοιχεία ορίζονται λευκά για τη θερμοκρασία και κίτρινα για την υγρασία. Για να βελτιωθεί η αναγνωσιμότητα των δυαδικών αριθμών, τα εικονοστοιχεία "0" δεν απενεργοποιούνται εντελώς, αλλά αντίθετα ρυθμίζονται πολύ ασθενέστερα από ό, τι στην κατάσταση "1". Ως blinkt! Τα εικονοστοιχεία είναι πολύ φωτεινά, μπορείτε να ορίσετε τη γενική φωτεινότητα αλλάζοντας την παράμετρο "φωτεινή"
Το πρόγραμμα εμφανίζει τις τιμές και τα μέρη της διαδικασίας επίσης στην οθόνη. Επιπλέον, θα βρείτε πολλές οδηγίες εκτύπωσης σε σίγαση (#). Τα άφησα, καθώς μπορεί να σας φανούν χρήσιμα για να κατανοήσετε τη διαδικασία εάν δεν είναι σε σίγαση.
Οι τιμές μπορεί επίσης να αποθηκευτούν σε ένα αρχείο καταγραφής.
Βήμα 3: Κωδικός προγράμματος
Ο κώδικας διορθώθηκε λίγο και βελτιστοποιήθηκε. Τώρα μπορείτε να βρείτε την έκδοση 3 (20_03_2017).
'Αυτό το πρόγραμμα προορίζεται να διαβάσει τις τιμές θερμοκρασίας, υγρασίας και πίεσης που σχηματίζουν ένα RuuviTag' "και να εμφανίσει τις τιμές θερμοκρασίας και υγρασίας ως δυαδικούς αριθμούς σε ένα αναβοσβήσιμο της Pimorini! ΚΑΠΕΛΟ. '' '' Βασίζεται στο παράδειγμα print_to_screen.py από τη βιβλιοθήκη ruuvitag στο github. "" Απαιτεί ένα Pi Zero W, Pi 3 ή οποιοδήποτε άλλο RPi εξοπλισμένο με bluetooth και όλες τις απαραίτητες βιβλιοθήκες εγκατεστημένες."
χρόνο εισαγωγής
εισαγωγή os από datetime εισαγωγή datetime
από ruuvitag_sensor.ruuvi εισαγωγή RuuviTagSensor
από blinkt import set_clear_on_exit, set_pixel, clear, show
def temp_blinkt (bt):
# αυτή η ρουτίνα παίρνει την τιμή της θερμοκρασίας και την εμφανίζει ως δυαδικό αριθμό στο blinkt!
Σαφή ()
# χρώμα και ένταση εικονοστοιχείων "1": λευκό
r1 = 64 g1 = 64 b1 = 64
#χρώμα και ένταση εικονοστοιχείων "0": λευκό
r0 = 5 g0 = 5 b0 = 5
# Στρογγυλοποιήστε και μετατρέψτε σε ακέραιο
r = γύρος (bt)
# vz αντιπροσωπεύει αλγεβρικό πρόσημο για δείκτη pixel
εάν (r> 0): vz = 1 # θετικό elif (r <0): vz = 2 # αρνητικό άλλο: vz = 0 # μηδέν # εκτύπωση (vz) i = abs (r) #print (i)
# μετατροπή σε απόλυτο, 7ψήφιο δυαδικό αριθμό
i1 = i + 128 # για i έχει ως αποτέλεσμα έναν 8ψήφιο δυαδικό αριθμό που ξεκινά με εκτύπωση 1 # (i1)
b = "{0: b}". format (i1) # μετατροπή σε δυαδικό
# εκτύπωση (β)
b0 = str (b) # μετατροπή σε συμβολοσειρά
b1 = b0 [1: 8] #αποκοπεί το πρώτο bit
εκτύπωση ("δυαδικός αριθμός:", b1)
# Ρυθμίστε pixel στο blinkt!
# ορίστε δυαδικό αριθμό
για h στο εύρος (0, 7): f = (h+1) εάν (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " είναι 1, pixel ", f) else: set_pixel (f, r0, g0, b0) # print (" μηδέν ")
# Ορίστε δείκτη pixel
εάν (vz == 1): set_pixel (0, 64, 0, 0) # κόκκινο για θετικές τιμές elif (vz == 2): set_pixel (0, 0, 0, 64) # μπλε για αρνητικές τιμές αλλιώς: set_pixel (0, 64, 0, 64) # ματζέντα αν μηδέν
προβολή()
# τέλος του temp_blinkt ()
def hum_blinkt (bh):
# αυτό παίρνει την τιμή υγρασίας και την εμφανίζει ως δυαδικό αριθμό στο blinkt!
Σαφή()
# χρώμα και ένταση εικονοστοιχείων "1": κίτρινο
r1 = 64 g1 = 64 b1 = 0
#χρώμα και ένταση εικονοστοιχείων "0":
r0 = 5 g0 = 5 b0 = 0
# Στρογγυλοποιήστε και μετατρέψτε σε ακέραιο
r = στρογγυλό (bh)
# μετατροπή σε απόλυτο, 7ψήφιο δυαδικό αριθμό i = abs (r) #print (i)
i1 = i + 128 # για i δίνει έναν 8ψήφιο δυαδικό αριθμό που ξεκινά με 1
# εκτύπωση (i1)
b = "{0: b}". format (i1)
# εκτύπωση (β)
b0 = str (b)
b1 = b0 [1: 8] #αποκοπεί το πρώτο bit
εκτύπωση ("δυαδικός αριθμός:", b1)
# Ρυθμίστε pixel στο blinkt!
# ορίστε δυαδικό αριθμό σε εικονοστοιχεία
για h στο εύρος (0, 7): f = (h+1) εάν (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # σίγαση σε κενά LEDs set_pixel (f, r0, g0, b0) # σίγαση σε κενά LED
# Ορίστε δείκτη pixel
set_pixel (0, 0, 64, 0) # πράσινο για υγρασία
προβολή()
# τέλος hum_blinkt ()
set_clear_on_exit ()
# Ανάγνωση δεδομένων από το RuuviTag
mac = 'EC: 6D: 59: 6D: 01: 1C' # Αλλαγή στη διεύθυνση mac της δικής σας συσκευής
εκτύπωση ("Έναρξη")
αισθητήρας = RuuviTagSensor (mac)
ενώ True:
data = sensor.update ()
line_sen = str.format ('Sensor - {0}', mac)
line_tem = str.format ('Θερμοκρασία: {0} C', δεδομένα ['θερμοκρασία']) line_hum = str.format ('Υγρασία: {0} %', δεδομένα ['υγρασία']) line_pre = str.format ("Πίεση: {0}", δεδομένα ["πίεση"])
Τυπώνω()
# θερμοκρασία εμφάνισης στο blinkt! ba = str.format ('{0}', δεδομένα ['θερμοκρασία']) bt = float (ba) print (bt, "Â ° C") temp_blinkt (bt) print ()
time.sleep (10) # θερμοκρασία οθόνης για 10 δευτερόλεπτα
# οθόνη υγρασίας στο blinkt!
bg = str.format ('{0}', δεδομένα ['υγρασία']) bh = float (bg) print (bh, " %") hum_blinkt (bh) print ()
# Εκκαθάριση οθόνης και εκτύπωση δεδομένων αισθητήρα στην οθόνη
os.system ('clear') print ('Press Ctrl+C to quit. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) εκτύπωση ('\ n / n / r …….')
# Περιμένετε μερικά δευτερόλεπτα και ξεκινήστε ξανά από την αρχή
δοκιμάστε: time.sleep (8) εκτός από το πληκτρολόγιο Διακοπή: # Όταν πατηθεί το Ctrl+C, εκτελείται η εκτέλεση του βρόχου while εκτύπωσης ('Exit') clear () show () break ()
Συνιστάται:
Μετατρέψτε ένα Raspberry Pi σε φάρο Bluetooth: 4 βήματα
Μετατρέψτε ένα Raspberry Pi σε Bluetooth Beacon: Το Bluetooth είναι μία από τις καινοτόμες τεχνολογίες για τη μεταφορά δεδομένων ασύρματα, τη δημιουργία συστημάτων αυτοματισμού σπιτιού, τον έλεγχο άλλων συσκευών κ.λπ. Σε αυτές τις οδηγίες, θα προσπαθήσω να μετατρέψω ένα Raspberry Pi σε Bluetooth Beacon. Απαιτήσεις Raspberry PiBleuIO (A Bl
Χρήση smartphone ως θερμόμετρο χωρίς επαφή / φορητό θερμόμετρο: 8 βήματα (με εικόνες)
Χρήση Smartphone ως Θερμόμετρο χωρίς επαφή / Φορητό θερμόμετρο: Μέτρηση της θερμοκρασίας του σώματος χωρίς επαφή / χωρίς επαφή, όπως ένα θερμοβόλο. Δημιούργησα αυτό το έργο επειδή το Thermo Gun τώρα είναι πολύ ακριβό, οπότε πρέπει να βρω εναλλακτική λύση για να φτιάξω DIY. Και ο σκοπός είναι να φτιάξετε με έκδοση χαμηλού προϋπολογισμού. ΠρομήθειεςMLX90614Arddu
GPS Car Tracker με ειδοποίηση SMS και μεταφόρτωση δεδομένων Thingspeak, βασισμένο σε Arduino, αυτοματοποίηση σπιτιού: 5 βήματα (με εικόνες)
GPS Car Tracker With SMS Notification and Thingspeak Data Upload, Arduino Based, Home Automation: Έφτιαξα αυτό το tracker GPS πέρυσι και επειδή λειτουργεί καλά το δημοσιεύω τώρα στο Instructable. Συνδέεται με το βύσμα αξεσουάρ στο πορτμπαγκάζ μου. Ο ιχνηλάτης GPS ανεβάζει τη θέση του αυτοκινήτου, την ταχύτητα, την κατεύθυνση και τη μετρημένη θερμοκρασία μέσω δεδομένων κινητής τηλεφωνίας
Υπέρυθρο θερμόμετρο μη επαφής με βάση το Arduino - Θερμόμετρο IR με χρήση Arduino: 4 βήματα
Υπέρυθρο θερμόμετρο μη επαφής με βάση το Arduino | Θερμόμετρο με βάση το IR χρησιμοποιώντας Arduino: Γεια σας παιδιά σε αυτά τα εκπαιδευτικά θα κάνουμε ένα θερμόμετρο χωρίς επαφή χρησιμοποιώντας arduino. Δεδομένου ότι μερικές φορές η θερμοκρασία του υγρού/στερεού είναι πολύ υψηλή ή πολύ χαμηλή και στη συνέχεια είναι δύσκολο να έρθετε σε επαφή με αυτό και να το διαβάσετε θερμοκρασία τότε σε αυτό το σκηνικό
ESP32 NTP Θερμόμετρο μαγειρέματος θερμοκρασίας ανιχνευτή θερμοκρασίας με διόρθωση και συναγερμό θερμοκρασίας Steinhart-Hart .: 7 βήματα (με εικόνες)
ESP32 NTP Θερμόμετρο Θερμόμετρο μαγειρέματος με διόρθωση και συναγερμό θερμοκρασίας Steinhart-Hart .: Ακόμα στο ταξίδι για να ολοκληρώσετε ένα «επερχόμενο έργο», ", ESP32 NTP Temperature Probe Cooking Thermometer With Steinhart-Hart Correction and Temperature Alarm " είναι ένας οδηγός που δείχνει πώς προσθέτω έναν αισθητήρα θερμοκρασίας NTP, piezo b