İçindekiler:

RuuviTag ve PiZero W ve Blinkt! Bluetooth Beacon Tabanlı Termometre: 3 Adım (Resimlerle)
RuuviTag ve PiZero W ve Blinkt! Bluetooth Beacon Tabanlı Termometre: 3 Adım (Resimlerle)

Video: RuuviTag ve PiZero W ve Blinkt! Bluetooth Beacon Tabanlı Termometre: 3 Adım (Resimlerle)

Video: RuuviTag ve PiZero W ve Blinkt! Bluetooth Beacon Tabanlı Termometre: 3 Adım (Resimlerle)
Video: Victron VenusOS & Raspberry Pi | Ruuvi temperature sensor with Bluetooth connection to Raspberry Pi 2024, Kasım
Anonim
RuuviTag ve PiZero W ve Blinkt! Bluetooth İşaret Tabanlı Termometre
RuuviTag ve PiZero W ve Blinkt! Bluetooth İşaret Tabanlı Termometre
RuuviTag ve PiZero W ve Blinkt! Bluetooth İşaret Tabanlı Termometre
RuuviTag ve PiZero W ve Blinkt! Bluetooth İşaret Tabanlı Termometre
RuuviTag ve PiZero W ve Blinkt! Bluetooth İşaret Tabanlı Termometre
RuuviTag ve PiZero W ve Blinkt! Bluetooth İşaret Tabanlı Termometre

Bu talimat, bir Raspberry Pi Zero W ile Bluetooth kullanarak bir RuuviTag'den sıcaklık ve nem verilerini okumak ve değerleri bir Pimoroni yanıp söndüğünde ikili sayılarda görüntülemek için bir yaklaşımı açıklar! pHAT. Ya da kısaca söylemek gerekirse: son teknoloji ürünü ve biraz inek termometresi nasıl oluşturulur.

RuuviTag, sıcaklık/nem/basınç ve hızlanma sensörleriyle birlikte gelen, ancak aynı zamanda standart bir Eddystone™ / iBeacon yakınlık işareti olarak da işlev görebilen açık kaynaklı bir sensör bluetooth işaretçisidir. Çok başarılı bir Kickstarter projesiydi ve benimkini birkaç hafta önce aldım. Bir ahududu kullanarak RuuviTag'i okumak için python yazılımına sahip bir Github var ve bazı eklemelerle örneklerinden birini kullandım.

Raspberry Pi Zero W, RPi ailesinin en son üyesidir, temelde Bluetooth ve WLAN eklenmiş bir Pi Zero.

Göz kırptı! Pimoroni'den pHAT, temel olarak Raspberry Pi için bir HAT olarak yapılandırılmış sekiz RBG LED'den oluşan bir şerittir. Kullanımı çok kolaydır ve bir python kütüphanesi ile birlikte gelir. Fikir, RuuviTag'den gelen verileri okumak ve yanıp sönerek görüntülemekti! ŞAPKA. Değerler, LED'lerin 7'si kullanılarak ikili sayılar olarak görüntülenirken, sekizi, nem veya sıcaklık (+/-/0) değerlerinin görüntülenip görüntülenmediğini belirtmek için kullanılır.

Adım 1: Sistemin Kurulması

Sistemin kurulumu kolaydır:- RuuviTag'i (RuuviTag sıcaklık sensörü versiyonu) açın.

- www.raspberrypi.org adresindeki talimatları izleyerek RPi Zero W, RPi3 veya bluetooth kapasitesi eklenmiş diğer herhangi bir RPi'nizi kurun.

- Bıçağı yerleştirin! RPi'de HAT (kapalıyken).

- Yanıp sönen yükleyin! ve ilgili GitHub sayfalarında belirtildiği gibi RuuviTag yazılımı.

- Artık RuuviTag'inizin MAC adresini tanımlamanız gerekiyor.

- ekli Python programını kopyalayın, IDLE for Python 3 ile açın

- RuuviTag'in MAC adresini kendinize göre değiştirin, ardından programı kaydedin ve çalıştırın.

- programı değiştirmek ve optimize etmekten çekinmeyin. Program olduğu gibi gelir, kendi sorumluluğunuzdadır, herhangi bir hasar için sorumluluk alınmaz.

Adım 2: Cihaz ve Program

Cihaz ve Program
Cihaz ve Program
Cihaz ve Program
Cihaz ve Program
Cihaz ve Program
Cihaz ve Program
Cihaz ve Program
Cihaz ve Program

Yukarıda bahsedildiği gibi, fikir, beacon'dan veri okumak ve yanıp sönmede sayısal değerleri görüntülemek için basit ve ucuz bir sistem kurmaktı! HAT veya benzeri bir LED şerit.

RPi tabanlı bir sistemle ölçülecek sıcaklık değerleri aralığı çoğu durumda -50°C ile +80°C arasında, nem için %0 ile %100 arasında olacaktır. Bu yüzden -100 ile +100 arasında değerler verebilen bir ekran çoğu uygulama için yeterli olacaktır. 128'den küçük ondalık sayılar, 7 bitlik (veya LED'li) ikili sayılar olarak görüntülenebilir. Böylece program RuuviTag'den sıcaklık ve nem değerlerini "kayan" sayılar olarak alır ve bunları ikili sayılara dönüştürür, bunlar daha sonra yanıp söndüğünde görüntülenir!.

İlk adım olarak, sayı yuvarlanır, pozitif, negatif veya sıfır olup olmadığı analiz edilir ve ardından "abs" kullanılarak pozitif bir sayıya dönüştürülür. Ardından, ondalık sayı 7 basamaklı bir ikili sayıya dönüştürülür, temelde 0'lar ve 1'lerden oluşan bir dizidir ve bu, yanıp sönmenin son 7 pikselinde analiz edilir ve görüntülenir.

Sıcaklık değerleri için ilk piksel, değerin pozitif (kırmızı), sıfır (macenta) veya negatif (mavi) olduğunu gösterir. Nem değerleri görüntülendiğinde yeşile ayarlanır. Sıcaklık ve nem değerleri arasındaki ayrımı basitleştirmek için ikili pikseller sıcaklık için beyaz ve nem için sarı olarak ayarlanır. İkili sayıların okunabilirliğini artırmak için "0" pikseli tamamen kapatılmaz, bunun yerine "1" durumundan çok daha zayıf ayarlanır. Göz kırptı olarak! pikseller çok parlak, "parlak" parametresini değiştirerek genel parlaklığı ayarlayabilirsiniz

Program, işlemin değerlerini ve kısımlarını ekranda da gösterir. Ek olarak, birkaç sessiz (#) yazdırma talimatı bulacaksınız. Sesi açılmamışsa süreci anlamada yardımcı olabileceğiniz için onları içeride bıraktım.

Değerler ayrıca bir günlük dosyasında saklanabilir.

Adım 3: Program Kodu

Kod biraz hata ayıklandı ve optimize edildi. Artık sürüm 3'ü (20_03_2017) bulabilirsiniz.

' Bu program bir RuuviTag'den sıcaklık, nem ve basınç değerlerini okumak ve sıcaklık ve nem değerlerini bir Pimorini yanıp sönmesi üzerinde ikili sayılar olarak görüntülemek için tasarlanmıştır! ŞAPKA. '' '' ' github'daki ruuvitag kitaplığındaki print_to_screen.py örneğine dayanmaktadır. ' ' Bir Pi Zero W, Pi 3 veya bluetooth ile donatılmış başka bir RPI ve tüm gerekli kitaplıkların kurulu olmasını gerektirir.'

ithalat zamanı

işletim sistemini tarih saatinden içe aktar tarih saatini içe aktar

ruuvitag_sensor.ruuvi'den RuuviTagSensor'ü içe aktarın

yanıp sönen import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt(bt):

# bu rutin sıcaklık değerini alır ve yanıp söndüğünde ikili sayı olarak görüntüler!

açık ()

# "1" pikselin rengi ve yoğunluğu: beyaz

r1 = 64 g1 = 64 b1 = 64

"0" pikselin #renk ve yoğunluğu: beyaz

r0 = 5 g0 = 5 b0 = 5

# Yuvarla ve tam sayıya dönüştür

r = yuvarlak (bt)

# vz, gösterge pikseli için cebirsel işareti temsil eder

if (r>0): vz = 1 # pozitif elif (r<0): vz= 2 # negatif başka: vz= 0 # sıfır # print (vz) i = abs(r) #print (i)

# mutlak, 7 basamaklı ikili sayıya dönüştür

i1 = i + 128 # i için 1 # print (i1) ile başlayan 8 basamaklı bir ikili sayı ile sonuçlanır

b = "{0:b}".format(i1) # ikiliye dönüştür

# yazdır (b)

b0 = str (b) # dizgeye dönüştür

b1 = b0[1:8] #ilk biti kes

yazdır ("ikili sayı: ", b1)

# Yanıp sönen pikselleri ayarlayın!

# ikili sayı ayarla

(0, 7) aralığında h için: f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit ", h, " is 1, pixel ", f) else: set_pixel (f, r0, g0, b0) # print("nil")

# Gösterge pikselini ayarla

if (vz==1): set_pixel (0, 64, 0, 0) # pozitif değerler için kırmızı elif (vz==2): set_pixel (0, 0, 0, 64) # negatif değerler için mavi başka: set_pixel (0, 64, 0, 64) # sıfır ise macenta

göstermek()

# temp_blinkt() sonu

tanım hum_blinkt(bh):

# bu nem değerini alır ve yanıp sönerken ikili sayı olarak görüntüler!

açık()

# "1" pikselin rengi ve yoğunluğu: sarı

r1 = 64 g1 = 64 b1 = 0

#"0" pikselin rengi ve yoğunluğu:

r0 = 5 g0 = 5 b0 = 0

# Yuvarla ve tam sayıya dönüştür

r = yuvarlak (bh)

# mutlak, 7 basamaklı ikili sayıya dönüştür i = abs(r) #print (i)

i1 = i + 128 # i için 1 ile başlayan 8 basamaklı bir ikili sayı verir

# yazdır (i1)

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

# yazdır (b)

b0 = str (b)

b1 = b0[1:8] #ilk biti kes

yazdır ("ikili sayı: ", b1)

# Yanıp sönen pikselleri ayarlayın!

# ikili sayıyı piksel olarak ayarla

(0, 7) aralığında h için: f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) else: # boş LED'leri sessize al set_pixel (f), r0, g0, b0) # boş LED'leri sessize al

# Gösterge pikselini ayarla

set_pixel (0, 0, 64, 0) # nem için yeşil

göstermek()

# hum_blinkt()'in sonu

set_clear_on_exit()

# RuuviTag'den veri okuma

mac = 'EC:6D:59:6D:01:1C' # Kendi cihazınızın mac adresini değiştirin

print('Başlangıç')

sensör = RuuviTagSensor(mac)

Doğru iken:

veri = sensör.güncelleme()

line_sen = str.format('Sensör - {0}', mac)

line_tem = str.format('Sıcaklık: {0} C', veri['sıcaklık']) line_hum = str.format('Nem: {0} %', veri['nem']) line_pre = str.format('Basınç: {0}', veri['basınç'])

Yazdır()

# yanıp söndüğünde sıcaklığı göster! ba = str.format('{0}', data['sıcaklık']) bt = kayan nokta (ba) print (bt, " °C") temp_blinkt (bt) print()

time.sleep (10) # sıcaklığı 10 saniye gösterir

# yanıp sönerken nemi göster!

bg = str.format('{0}', veri['nem']) bh = kayan nokta (bg) yazdır (bh, " %") hum_blinkt (bh) yazdır ()

# Ekranı temizle ve sensör verilerini ekrana yazdır

os.system('clear') print('Çıkmak için Ctrl+C'ye basın.\n\n') print(str(datetime.now())) print(line_sen) print(line_tem) print(line_hum) print(line_pre) print('\n\n\r…….')

# Birkaç saniye bekleyin ve yeniden başlayın

try: time.sleep(8) KeyboardInterrupt hariç: # Ctrl+C'ye basıldığında while döngüsünün yürütülmesi durdurulur print('Exit') clear() show () break

Önerilen: