Мазмуну:

RuuviTag жана PiZero W жана Blinkt! Bluetooth маякка негизделген термометр: 3 кадам (сүрөттөр менен)
RuuviTag жана PiZero W жана Blinkt! Bluetooth маякка негизделген термометр: 3 кадам (сүрөттөр менен)

Video: RuuviTag жана PiZero W жана Blinkt! Bluetooth маякка негизделген термометр: 3 кадам (сүрөттөр менен)

Video: RuuviTag жана PiZero W жана Blinkt! Bluetooth маякка негизделген термометр: 3 кадам (сүрөттөр менен)
Video: Превратите свой Raspberry Pi Pico в ПЛК Mitsubishi FX1N 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тан Raspi Pi Zero W менен Bluetooth аркылуу температураны жана нымдуулук маалыматын окуу жана Pimoroni blinkt боюнча экилик сандардагы маанилерди көрсөтүү ыкмасын сүрөттөйт! PHAT. Or же кыскача айтканда: кантип заманбап абалды жана бир аз термометрди куруу керек.

RuuviTag - булагы ачык булактан турган Bluetooth маягы, ал температура/нымдуулук/басым жана ылдамдык сенсорлору менен келет, бирок Eddystone ™/iBeacon стандарттык жакындык маягы катары иштей алат. Бул абдан ийгиликтүү Kickstarter долбоору болчу жана меники бир нече жума мурун болгон. RuuviTag -ды малина менен окуу үчүн python программасы бар Github бар, мен алардын мисалдарынын бирин, кээ бир толуктоолор менен колдондум.

Raspberry Pi Zero W - бул RPi үй -бүлөсүнүн акыркы мүчөсү, негизинен Bluetooth менен WLAN кошулган Pi Zero.

Blinkt! Pimoroni'ден pHAT негизинен Raspberry Pi үчүн HAT катары конфигурацияланган сегиз RBG LEDдин тилкеси. Бул колдонууга абдан оңой жана python китепканасы менен коштолот. Идея RuuviTagдагы маалыматтарды окуп, аны blinkt аркылуу көрсөтүү болчу! HAT. Маанилер экилик сандар катары 7 светодиод менен көрсөтүлөт, ал эми сегиздик нымдуулукту же температураны (+/-/0) көрсөтүү үчүн колдонулат.

1 -кадам: Системаны орнотуу

Системаны орнотуу оңой:- RuuviTagны күйгүзүү (RuuviTag температура сенсорунун версиясы).

- Raspi Zero W, RPi3 же bluetooth кубаттуулугу кошулган башка RPiди www.raspberrypi.org сайтындагы көрсөтмөлөргө ылайык орнотуңуз.

- Көз ирмемди кой! RPi боюнча HAT (өчүрүү учурунда).

- Жаркыроону орнотуңуз! жана RuuviTag программасы, тиешелүү GitHub беттеринде көрсөтүлгөн.

- Эми сиз RuuviTagтын MAC дарегин аныкташыңыз керек

- тиркелген Python программасын көчүрүп, Python 3 үчүн IDLE менен ачыңыз

- RuuviTagтын MAC дарегин өзүңүзгө өзгөртүп, анан программаны сактап, иштетиңиз.

- программаны өзгөртүү жана оптималдаштыруу үчүн эркин. Программа кандай болсо, ошондой болот, өз тобокелчилигиңиз үчүн колдонулат, эч кандай зыян үчүн эч кандай милдеттенме алынбайт.

2 -кадам: Түзмөк жана Программа

Түзмөк жана Программа
Түзмөк жана Программа
Түзмөк жана Программа
Түзмөк жана Программа
Түзмөк жана Программа
Түзмөк жана Программа
Түзмөк жана Программа
Түзмөк жана Программа

Жогоруда айтылгандай, идея маяктын маалыматын окуу үчүн жөнөкөй жана арзан системаны куруу жана санариптик маанилерди блинтке көрсөтүү болчу! HAT, же ушуга окшош LED тилкеси.

Температуранын RPi системасы менен өлчөнүүчү маанилер диапазону көпчүлүк учурда - 50 ° C менен +80 ° C ортосунда, нымдуулук үчүн 0 менен 100%ортосунда болот. Ошентип, -100дөн +100гө чейинки баалуулуктарды бере турган дисплей көпчүлүк тиркемелер үчүн жетиштүү болот. 128ден кичирээк ондук сандар 7 бит (же LED) менен экилик сандар катары көрсөтүлүшү мүмкүн. Ошентип, программа RuuviTagдан температура менен нымдуулуктун маанилерин "калкып жүрүүчү" сандар катары кабыл алып, экилик сандарга айландырат, андан кийин алар блинктте көрсөтүлөт!.

Биринчи кадам катары сан тегеректелет, оң, терс же нөл болсо анализделет, андан кийин "abs" менен оң санга айландырылат. Андан кийин ондук сан 7 орундуу экилик санга айландырылат, негизинен 0s жана 1s сабы, ал анализделет жана blinktтин акыркы 7 пикселинде көрсөтүлөт!.

Температуранын мааниси үчүн биринчи пиксель оң (кызыл), нөл (кызгылт) же терс (көк) экенин көрсөтөт. Нымдуулуктун маанилерин көрсөтүү жашылга коюлган. Температура менен нымдуулуктун ортосундагы айырмачылыкты жөнөкөйлөтүү үчүн экилик пикселдер температура үчүн ак, нымдуулук үчүн сары түстө коюлат. Бинардык сандардын окумдуулугун жогорулатуу үчүн "0" пиксели толугу менен өчүрүлгөн эмес, тескерисинче "1" абалына караганда алда канча алсызыраак коюлган. As blinkt! пикселдер абдан ачык, сиз "жаркыраган" параметрин өзгөртүп жалпы жарыкты орното аласыз

Программа процесстин баалуулуктарын жана бөлүктөрүн экранда да көрсөтөт. Мындан тышкары, бир нече үнсүз (#) басып чыгаруу боюнча көрсөтмөлөрдү таба аласыз. Мен аларды үйдө калтырдым, анткени сиз үнү өчүрүлсө, процессти түшүнүүгө жардам берет.

Маанилер да журнал файлында сакталышы мүмкүн.

3 -кадам: Программанын коду

Код бир аз оңдолду жана оптималдаштырылды. Сиз азыр 3 -версиясын (20_03_2017) таба аласыз.

'Бул программа температураны, нымдуулукту жана басымдын маанилерин окуу үчүн арналган' 'жана Pimorini blinktтеги экилик сандар катары температура менен нымдуулуктун маанилерин көрсөтүү үчүн! HAT. '' '' Бул githubдагы ruuvitag китепканасынан print_to_screen.py мисалына негизделген. '' Pi Zero W, Pi 3 же bluetooth менен жабдылган башка RPi жана бардык керектүү китепканалар орнотулган болушу керек. '

импорттоо убактысы

datetimeдан os импорттоо datetime

ruuvitag_sensor.ruuvi дан импорт RuuviTagSensor

blinkt импорттон set_clear_on_exit, set_pixel, тазалоо, көрсөтүү

def temp_blinkt (bt):

# бул күнүмдүк температуранын маанисин алат жана аны экилик сан катары көрсөтөт!

ачык ()

# түсү жана "1" пикселинин интенсивдүүлүгү: ак

r1 = 64 g1 = 64 b1 = 64

#түс жана "0" пикселинин интенсивдүүлүгү: ак

r0 = 5 g0 = 5 b0 = 5

# Тегерек жана бүтүн санга айландыруу

r = тегерек (bt)

# vz индикатор пикселинин алгебралык белгисин билдирет

if (r> 0): vz = 1 # оң элиф (r <0): vz = 2 # терс башка: vz = 0 # zero # print (vz) i = abs (r) #print (i)

# абсолюттук, 7 орундуу бинардык санга айлануу

i1 = i + 128 # үчүн i 1 басуудан башталган 8 орундуу экилик санга алып келет (i1)

b = "{0: b}". формат (i1) # экиликке айландыруу

# басып чыгаруу (б)

b0 = str (b) # сапка айландыруу

b1 = b0 [1: 8] #биринчи битти кыскартуу

басып чыгаруу ("экилик номер:", b1)

# Пикселдерди blinktке коюңуз!

# экилик санды коюңуз

h үчүн диапазондо (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " 1, пиксел ", f) башка: set_pixel (f, r0, g0, b0) # print (" нөл ")

# Индикатор пикселин коюңуз

if (vz == 1): set_pixel (0, 64, 0, 0) # red оң маанилер үчүн elif (vz == 2): set_pixel (0, 0, 0, 64) # blue терс маанилер үчүн: set_pixel (0, 64, 0, 64) # кызгылт болсо нөл

көрсөтүү ()

# temp_blinkt аягы ()

def hum_blinkt (bh):

# бул нымдуулуктун маанисин алат жана аны экинчилик номер катары көрсөтөт!

ачык ()

# түсү жана "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 1ден башталган 8 орундуу экилик санды берет

# басып чыгаруу (i1)

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

# басып чыгаруу (б)

b0 = str (b)

b1 = b0 [1: 8] #биринчи битти кыскартуу

басып чыгаруу ("экилик номер:", b1)

# Пикселдерди blinktке коюңуз!

# экилик санды пикселге коюңуз

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

# Индикатор пикселин коюңуз

set_pixel (0, 0, 64, 0) # нымдуулук үчүн жашыл

көрсөтүү ()

# hum_blinkt аягы ()

set_clear_on_exit ()

# RuuviTagдан маалыматтарды окуу

mac = 'EC: 6D: 59: 6D: 01: 1C' # Өз түзмөгүңүздүн мак-дарегине өзгөртүү

басып чыгаруу ('Баштоо')

сенсор = RuuviTagSensor (mac)

чын болсо:

маалыматтар = sensor.update ()

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

line_tem = str.format ('Температура: {0} C', маалыматтар ['температура']) line_hum = str.format ('Нымдуулук: {0} %', маалымат ['нымдуулук']) line_pre = str.format ('Кысым: {0}', маалыматтар ['басым'])

басып чыгаруу ()

# дисплей температурасы blinkt! ba = str.format ('{0}', маалыматтар ['температура']) bt = калкып чыгуу (ba) басып чыгаруу (bt, "Â ° C") temp_blinkt (bt) print ()

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

# нымдуулук дисплейде!

bg = str.format ('{0}', маалыматтар ['нымдуулук']) bh = калкып чыгуу (bg) басып чыгаруу (bh, " %") hum_blinkt (bh) print ()

# Экранды тазалоо жана сенсордун маалыматтарын экранга чыгаруу

os.system ('clear') басып чыгаруу ('Ctrl+C басуу) басып чыгаруу ('\ n / n / r …….')

# Бир нече секунд күтүп, кайра башынан баштаңыз

try: time.sleep (8) KeyboardInterruptден башка: # Ctrl+C басылганда, циклдын аткарылышы токтотулат ('Чыгуу') clear () show () break

Сунушталууда: