Mündəricat:

RuuviTag və PiZero W və Blinkt! Bluetooth mayak əsaslı termometr: 3 addım (şəkillərlə birlikdə)
RuuviTag və PiZero W və Blinkt! Bluetooth mayak əsaslı termometr: 3 addım (şəkillərlə birlikdə)

Video: RuuviTag və PiZero W və Blinkt! Bluetooth mayak əsaslı termometr: 3 addım (şəkillərlə birlikdə)

Video: RuuviTag və PiZero W və Blinkt! Bluetooth mayak əsaslı termometr: 3 addım (şəkillərlə birlikdə)
Video: Sonoff NSPanel - интерактивная панель для управления умным домом 2024, Noyabr
Anonim
RuuviTag və PiZero W və Blinkt! Bluetooth mayak əsaslı termometr
RuuviTag və PiZero W və Blinkt! Bluetooth mayak əsaslı termometr
RuuviTag və PiZero W və Blinkt! Bluetooth mayak əsaslı termometr
RuuviTag və PiZero W və Blinkt! Bluetooth mayak əsaslı termometr
RuuviTag və PiZero W və Blinkt! Bluetooth mayak əsaslı termometr
RuuviTag və PiZero W və Blinkt! Bluetooth mayak əsaslı termometr

Bu təlimat bir Raspi Pi Zero W ilə Bluetooth istifadə edərək bir RuuviTag -dan temperatur və rütubət məlumatlarını oxumaq və dəyərləri ikili ədədlərlə Pimoroni yanıb -sönməkdə göstərmək üçün bir yanaşmanı təsvir edir! pHAT. Yoxsa qısaca desək: ən son texnologiyanı necə qurmaq olar.

RuuviTag, temperatur/rütubət/təzyiq və sürətləndirici sensorlar ilə gələn, lakin eyni zamanda standart bir Eddystone ™/iBeacon yaxınlıq işarəsi kimi çıxış edə bilən açıq mənbə bluetooth mayakdır. Çox uğurlu bir Kickstarter layihəsi idi və bir neçə həftə əvvəl mənimki var. Bir moruq istifadə edərək RuuviTag oxumaq üçün python proqramı olan bir Github var və mən bəzi əlavələrlə onların nümunələrindən birini istifadə etdim.

Raspberry Pi Zero W, əsasən Bluetooth və WLAN əlavə edilmiş bir Pi Zero olan RPi ailənin son üzvüdür.

Göz qırpım! Pimoroni -dən pHAT, əsasən Raspberry Pi üçün HAT olaraq qurulmuş səkkiz RBG LED -dən ibarətdir. İstifadəsi çox asandır və bir python kitabxanası ilə birlikdə gəlir. Fikir, RuuviTagdakı məlumatları oxumaq və göz qırpımından istifadə edərək göstərmək idi! HAT. Dəyərlər 7 LED-dən istifadə edərək ikili ədədlər kimi göstərilir, səkkiz rəqəm rütubət və ya temperaturun (+/-/0) göstərilib-göstərilmədiyini göstərmək üçün istifadə olunur.

Addım 1: Sistemin qurulması

Sistemin qurulması asandır:- RuuviTag-ı yandırın (RuuviTag temperatur sensoru versiyası).

- Raspi Zero W, RPi3 və ya bluetooth tutumu olan başqa bir RPi qurun, www.raspberrypi.org saytındakı təlimatları izləyin.

- Göz qırpımını qoy! RPi -də HAT (istirahətdə olduqda).

- Flaşı quraşdırın! və müvafiq GitHub səhifələrində göstərildiyi kimi RuuviTag proqramı.

- İndi RuuviTagınızın MAC ünvanını təyin etməlisiniz

- əlavə edilmiş Python proqramını kopyalayın, Python 3 üçün IDLE ilə açın

- RuuviTag -ın MAC ünvanını özünüzə dəyişdirin, sonra proqramı saxla və işlədin.

- Proqramı dəyişdirmək və optimallaşdırmaqdan çekinmeyin. Proqram olduğu kimi gəlir, öz riski ilə istifadə etmək üçün heç bir ziyana görə heç bir öhdəlik götürülmür.

Addım 2: Cihaz və Proqram

Cihaz və Proqram
Cihaz və Proqram
Cihaz və Proqram
Cihaz və Proqram
Cihaz və Proqram
Cihaz və Proqram
Cihaz və Proqram
Cihaz və Proqram

Yuxarıda qeyd edildiyi kimi, fikir mayakdakı məlumatları oxumaq və sayısal dəyərləri göz qırpımında göstərmək üçün sadə və ucuz bir sistem qurmaq idi! HAT və ya buna bənzər bir LED şeridi.

RPi əsaslı bir sistemlə ölçülən temperaturun dəyər aralığı, əksər hallarda - 50 ° C ilə +80 ° C arasında, 0 ilə 100%arasında rütubət üçün olacaq. Buna görə -100 ilə +100 arasında dəyər verə bilən bir ekran əksər tətbiqlər üçün kifayət edər. 128 -dən kiçik olan ondalık ədədlər 7 bit (və ya LED) olan ikili ədədlər kimi göstərilə bilər. Beləliklə, proqram RuuviTag -dan temperatur və rütubət dəyərlərini "üzən" ədədlər kimi götürür və onları ikili ədədlərə çevirir, sonra isə göz qırpımında göstərilir!

İlk addım olaraq, ədəd yuvarlaqlaşdırılır, müsbət, mənfi və ya sıfır olduqda təhlil edilir və sonra "abs" istifadə edərək müsbət bir rəqəmə çevrilir. Sonra ondalık sayı, 7 rəqəmdən ibarət ikili rəqəmə çevrilir, əsasən 0 və 1-lərdən ibarət bir simli təhlil edilir və blinkt-in son 7 pikselində göstərilir!

İstilik dəyərləri üçün ilk piksel dəyərin müsbət (qırmızı), sıfır (magenta) və ya mənfi (mavi) olub olmadığını göstərir. Rütubət dəyərlərinin göstərilməsi yaşıl olaraq təyin olunur. İstilik və rütubət dəyərləri arasındakı fərqi asanlaşdırmaq üçün ikili piksellər temperatur üçün ağ, rütubət üçün sarı rəngdədir. İkili ədədlərin oxunaqlılığını artırmaq üçün "0" piksel tamamilə söndürülmür, əksinə "1" vəziyyətinə nisbətən çox zəif olaraq təyin olunur. Göz qırpımında! piksel çox parlaqdır, "parlaq" parametrini dəyişdirərək ümumi parlaqlığı təyin edə bilərsiniz.

Proqram, prosesin dəyərlərini və hissələrini ekranda da göstərir. Əlavə olaraq bir neçə səssiz (#) çap təlimatı tapa bilərsiniz. Səssiz olduqda prosesi başa düşmək üçün faydalı ola biləcəyiniz üçün onları içəridə buraxdım.

Dəyərlər bir qeyd sənədində də saxlanıla bilər.

Addım 3: Proqram Kodu

Kod bir az düzəldildi və optimallaşdırıldı. İndi 3 -cü versiyanı (20_03_2017) tapa bilərsiniz.

'Bu proqram, temperatur, rütubət və təzyiq dəyərlərini bir RuuviTag' şəklində oxumaq və temperatur və rütubət dəyərlərini ikiqat ədəd olaraq Pimorini -də göstərmək üçün nəzərdə tutulmuşdur! HAT. '' '' Githubdakı ruuvitag kitabxanasından print_to_screen.py nümunəsinə əsaslanır. '' Pi Zero W, Pi 3 və ya bluetooth ilə təchiz edilmiş hər hansı digər RPi və bütün lazımi kitabxanaların quraşdırılmasını tələb edir. ''

idxal vaxtı

datetime -dan os -ı idxal edin

ruuvitag_sensor.ruuvi saytından idxal RuuviTagSensor

blinkt idxalından set_clear_on_exit, set_pixel, aydın, göstər

def temp_blinkt (bt):

# bu rejim temperatur dəyərini götürür və blinkt -də ikili ədəd kimi göstərir!

aydın ()

# rəng və "1" piksel intensivliyi: ağ

r1 = 64 g1 = 64 b1 = 64

#rəng və "0" piksel intensivliyi: ağ

r0 = 5 g0 = 5 b0 = 5

# Yuvarlaqlaşdırın və tam ədədə çevirin

r = yuvarlaq (bt)

# vz göstərici pikselinin cəbri işarəsini təmsil edir

if (r> 0): vz = 1 # müsbət elif (r <0): vz = 2 # mənfi başqa: vz = 0 # sıfır # print (vz) i = abs (r) #print (i)

# mütləq, 7 rəqəmli ikili rəqəmə çevrilir

i1 = i + 128 # i üçün 1 # çapdan başlayan 8 rəqəmli ikili ədədlə nəticələnir (i1)

b = "{0: b}". format (i1) # ikiliyə çevir

# çap (b)

b0 = str (b) # sətrə çevir

b1 = b0 [1: 8] #biti kəsin

çap ("ikili nömrə:", b1)

# Pikselləri blinkt -ə qoyun!

# ikili nömrə təyin edin

h aralığında (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " 1, piksel ", f) başqa: set_pixel (f, r0, g0, b0) # print (" sıfır ")

# Göstərici pikselini təyin edin

if (vz == 1): set_pixel (0, 64, 0, 0) # qırmızı müsbət dəyərlər üçün elif (vz == 2): set_pixel (0, 0, 0, 64) # başqa mənfi dəyərlər üçün mavi: set_piksel (0, 64, 0, 64) # magenta sıfır olarsa

göstərmək ()

# temp_blinkt sonu ()

def hum_blinkt (bh):

# bu rütubət dəyərini götürür və blinkt -də ikili nömrə kimi göstərir!

aydın ()

# rəng və "1" piksel intensivliyi: sarı

r1 = 64 g1 = 64 b1 = 0

#rəng və "0" piksel intensivliyi:

r0 = 5 g0 = 5 b0 = 0

# Yuvarlaqlaşdırın və tamsaya çevirin

r = yuvarlaq (bh)

# mütləq, 7 rəqəmli ikili rəqəmə çevrilmə i = abs (r) #print (i)

i1 = i + 128 # i üçün 8-dən ibarət ikili ədəd verir

# çap (i1)

b = "{0: b}". format (i1)

# çap (b)

b0 = str (b)

b1 = b0 [1: 8] #biti kəsin

çap ("ikili nömrə:", b1)

# Pikselləri blinkt -ə qoyun!

# ikili rəqəmi piksel olaraq təyin edin

h aralığında (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) başqa: boş LEDlərin # səssizliyi set_piksel (f), r0, g0, b0) # boş LED -lərə səssiz

# Göstərici pikselini təyin edin

set_pixel (0, 0, 64, 0) # rütubət üçün yaşıl

göstərmək ()

# hum_blinkt sonu ()

set_clear_on_exit ()

# RuuviTag -dan məlumatların oxunması

mac = 'EC: 6D: 59: 6D: 01: 1C' # Öz cihazınızın mac ünvanını dəyişdirin

çap ('Başlanır')

sensor = RuuviTagSensor (mac)

Doğru halda:

data = sensor.update ()

line_sen = str.format ('Sensor - {0}', mac)

line_tem = str.format ('Temperatur: {0} C', data ['temperatur']) line_hum = str.format ('Rütubət: {0} %', data ['rütubət']) line_pre = str.format ('Təzyiq: {0}', məlumatlar ['təzyiq'])

çap ()

# ekran temperaturu yanıb -sönür! ba = str.format ('{0}', data ['temperatur']) bt = float (ba) çap (bt, "Â ° C") temp_blinkt (bt) çap ()

time.sleep (10) # 10 saniyə ərzində temperaturun göstərilməsi

# rütubət yanıb -sönür!

bg = str.format ('{0}', data ['rütubət']) bh = float (bg) çap (bh, " %") hum_blinkt (bh) çap ()

# Ekranı təmizləyin və sensor məlumatlarını ekrana yazın

os.system ('clear') print ('Çıxmaq üçün Ctrl+C düymələrini basın. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre)) çap et ('\ n / n / r …….')

# Bir neçə saniyə gözləyin və yenidən başlayın

cəhd edin: time.sleep (8) KeyboardInterrupt istisna olmaqla: # Ctrl+C basıldığında while döngəsinin dayandırılması dayandırılır ('Çıx') clear () show () break

Tövsiyə: