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

RuuviTag και PiZero W και Blinkt! θερμόμετρο βασισμένο σε φάρο Bluetooth: 3 βήματα (με εικόνες)
RuuviTag και PiZero W και Blinkt! θερμόμετρο βασισμένο σε φάρο Bluetooth: 3 βήματα (με εικόνες)

Βίντεο: RuuviTag και PiZero W και Blinkt! θερμόμετρο βασισμένο σε φάρο Bluetooth: 3 βήματα (με εικόνες)

Βίντεο: RuuviTag και PiZero W και Blinkt! θερμόμετρο βασισμένο σε φάρο Bluetooth: 3 βήματα (με εικόνες)
Βίντεο: BTT SKR2 -FluiddPi and Klipper Firmware Install 2024, Νοέμβριος
Anonim
RuuviTag και PiZero W και Blinkt! θερμόμετρο βασισμένο σε φάρο Bluetooth
RuuviTag και PiZero W και Blinkt! θερμόμετρο βασισμένο σε φάρο Bluetooth
RuuviTag και PiZero W και Blinkt! θερμόμετρο βασισμένο σε φάρο Bluetooth
RuuviTag και PiZero W και Blinkt! θερμόμετρο βασισμένο σε φάρο Bluetooth
RuuviTag και PiZero W και Blinkt! θερμόμετρο βασισμένο σε φάρο Bluetooth
RuuviTag και PiZero W και Blinkt! θερμόμετρο βασισμένο σε φάρο Bluetooth

Αυτό το διδακτικό περιγράφει μια προσέγγιση για την ανάγνωση δεδομένων θερμοκρασίας και υγρασίας από ένα 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 ()

Συνιστάται: