Съдържание:

RuuviTag и PiZero W и Blinkt! термометър, базиран на Bluetooth маяк: 3 стъпки (със снимки)
RuuviTag и PiZero W и Blinkt! термометър, базиран на Bluetooth маяк: 3 стъпки (със снимки)

Видео: RuuviTag и PiZero W и Blinkt! термометър, базиран на Bluetooth маяк: 3 стъпки (със снимки)

Видео: RuuviTag и PiZero W и Blinkt! термометър, базиран на Bluetooth маяк: 3 стъпки (със снимки)
Видео: AMD Sempron Cpu processor .Removing pins For Gold Recovery 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. Или да го кажа накратко: как да изградим най -съвременното и малко нервен термометър.

RuuviTag е Bluetooth маяк със сензор с отворен код, който се доставя със сензори за температура/влажност/налягане и ускорение, но може да действа и като стандартен маяк за близост Eddystone ™/iBeacon. Това беше много успешен проект на Kickstarter и го получих преди няколко седмици. Има Github със софтуер на python за четене на RuuviTag с помощта на малина и аз използвах един от техните примери, с някои допълнения.

Raspberry Pi Zero W е най -новият член на семейството RPi, основно Pi Zero с добавени Bluetooth и WLAN.

Мигането! pHAT от Pimoroni е основно лента от осем RBG светодиода, конфигурирани като HAT за Raspberry Pi. Той е много лесен за използване и се предлага с библиотека на python. Идеята беше да се прочетат данните от RuuviTag и да се покажат с помощта на blinkt! ШАПКА. Стойностите се показват като двоични числа, като се използват 7 от светодиодите, докато осемте се използват за индикация дали се показват стойности на влажност или температура (+/-/0).

Стъпка 1: Настройка на системата

Настройката на системата е лесна:- Включете RuuviTag (версия на сензора за температурата на RuuviTag).

- Настройте своя RPi Zero W, RPi3 или всеки друг RPi с добавен капацитет на Bluetooth, като следвате инструкциите на www.raspberrypi.org.

- Поставете мига! ШАПКА на RPi (докато е изключен).

- Инсталирайте мигането! и софтуера RuuviTag, както е посочено на съответните страници на GitHub.

- Сега трябва да идентифицирате MAC адреса на вашия RuuviTag

- копирайте приложената програма Python, отворете я с IDLE за Python 3

- променете MAC адреса на RuuviTag на вашия, след което запишете и стартирайте програмата.

- не се колебайте да променяте и оптимизирате програмата. Програмата идва такава, каквато е, за да се използва на ваш собствен риск, не се поемат отговорности за щети.

Стъпка 2: Устройството и програмата

Устройството и програмата
Устройството и програмата
Устройството и програмата
Устройството и програмата
Устройството и програмата
Устройството и програмата
Устройството и програмата
Устройството и програмата

Както бе споменато по -горе, идеята беше да се изгради проста и евтина система за четене на данни от маяка и показване на числови стойности на мигането! ШАПКА или подобна LED лента.

Диапазонът от стойности за температура, който трябва да се измерва със система, базирана на RPi, в повечето случаи ще бъде някъде между - 50 ° C и +80 ° C, за влажност между 0 и 100%. Така че дисплей, който може да даде стойности от -100 до +100, ще бъде достатъчен за повечето приложения. Десетичните числа, по -малки от 128, могат да се показват като двоични числа със 7 бита (или светодиоди). Така че програмата приема стойностите на температурата и влажността от RuuviTag като "плаващи" числа и ги трансформира в двоични числа, които след това се показват на мигането !.

Като първа стъпка, числото се закръглява, анализира дали е положително, отрицателно или нула и след това се трансформира в положително число, като се използва "abs". След това десетичното число се преобразува в 7-цифрено двоично число, основно низ от 0s и 1s, който се анализира и показва на последните 7 пиксела от мигането !.

За температурните стойности първият пиксел показва дали стойността е положителна (червена), нула (магента) или отрицателна (синя). Показване на стойностите на влажност е зададено на зелено. За да се опрости различаването между стойностите на температурата и влажността, двоичните пиксели се задават бяло за температура и жълто за влажност. За да се подобри четливостта на двоичните числа, пикселът "0" не се изключва напълно, а вместо това се настройва много по -слабо, отколкото в състояние "1". Като мига! пикселите са много ярки, можете да зададете общата яркост, като промените параметъра "ярко"

Програмата показва стойностите и частите от процеса също на екрана. Освен това ще намерите няколко приглушени (#) инструкции за печат. Оставих ги, тъй като може да ви бъдат полезни, за да разберете процеса, ако не са включени.

Стойностите също могат да се съхраняват в лог файл.

Стъпка 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 импортиране 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 представлява алгебричен знак за пиксела на индикатора

if (r> 0): vz = 1 # положителен elif (r <0): vz = 2 # отрицателен else: vz = 0 # нула # print (vz) i = abs (r) #print (i)

# преобразуване в абсолютно, 7-цифрено двоично число

i1 = i + 128 # за i води до 8-цифрено двоично число, започващо с 1 # print (i1)

b = "{0: b}". формат (i1) # преобразуване в двоичен

# печат (б)

b0 = str (b) # преобразуване в низ

b1 = b0 [1: 8] #скъсяване на първия бит

print ("двоично число:", b1)

# Задайте пиксели на blinkt!

# зададен двоичен номер

за h в обхват (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " е 1, пиксел ", f) else: set_pixel (f, r0, g0, b0) # print (" нула ")

# Задайте пиксел на индикатора

if (vz == 1): set_pixel (0, 64, 0, 0) # червено за положителни стойности elif (vz == 2): set_pixel (0, 0, 0, 64) # синьо за отрицателни стойности else: 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) # печат (i)

i1 = i + 128 # за i дава 8-цифрено двоично число, започващо с 1

# печат (i1)

b = "{0: b}". формат (i1)

# печат (б)

b0 = str (b)

b1 = b0 [1: 8] #скъсяване на първия бит

print ("двоично число:", b1)

# Задайте пиксели на blinkt!

# задайте двоично число на пиксели

за h в обхват (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # заглушаване на празни светодиоди set_pixel (f, r0, g0, b0) # заглушаване на празни светодиоди

# Задайте пиксел на индикатора

set_pixel (0, 0, 64, 0) # зелено за влажност

покажи ()

# край на hum_blinkt ()

set_clear_on_exit ()

# Четене на данни от RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Промяна на mac-адреса на вашето собствено устройство

print ('Стартиране')

сензор = RuuviTagSensor (mac)

докато е вярно:

data = sensor.update ()

line_sen = str.format ('Сензор - {0}', mac)

line_tem = str.format ('Температура: {0} C', данни ['температура']) line_hum = str.format ('Влажност: {0} %', данни ['влажност']) line_pre = str.format („Налягане: {0}“, данни [„налягане“])

print ()

# температура на дисплея при мигане! ba = str.format ('{0}', data ['temperature']) bt = float (ba) print (bt, "Â ° C") temp_blinkt (bt) print ()

time.sleep (10) # температура на дисплея за 10 секунди

# показване на влажност на дисплея при мигане!

bg = str.format ('{0}', data ['влажност']) bh = плаващ (bg) печат (bh, " %") hum_blinkt (bh) print ()

# Изчистете екрана и отпечатайте сензорни данни на екрана

os.system ('clear') print ('Натиснете Ctrl+C, за да излезете. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) print ('\ n / n / r …….')

# Изчакайте няколко секунди и започнете отначало

try: time.sleep (8) с изключение на KeyboardInterrupt: # Когато Ctrl+C е натиснат, изпълнението на цикъла while е спряно print ('Exit') clear () show () break

Препоръчано: