Talaan ng mga Nilalaman:

RuuviTag at PiZero W at Blinkt! isang Bluetooth Beacon Base Thermometer: 3 Hakbang (na may Mga Larawan)
RuuviTag at PiZero W at Blinkt! isang Bluetooth Beacon Base Thermometer: 3 Hakbang (na may Mga Larawan)

Video: RuuviTag at PiZero W at Blinkt! isang Bluetooth Beacon Base Thermometer: 3 Hakbang (na may Mga Larawan)

Video: RuuviTag at PiZero W at Blinkt! isang Bluetooth Beacon Base Thermometer: 3 Hakbang (na may Mga Larawan)
Video: Превратите свой Raspberry Pi Pico в ПЛК Mitsubishi FX1N 2024, Nobyembre
Anonim
RuuviTag at PiZero W at Blinkt! isang Bluetooth Beacon Base Thermometer
RuuviTag at PiZero W at Blinkt! isang Bluetooth Beacon Base Thermometer
RuuviTag at PiZero W at Blinkt! isang Bluetooth Beacon Base Thermometer
RuuviTag at PiZero W at Blinkt! isang Bluetooth Beacon Base Thermometer
RuuviTag at PiZero W at Blinkt! isang Bluetooth Beacon Base Thermometer
RuuviTag at PiZero W at Blinkt! isang Bluetooth Beacon Base Thermometer

Inilalarawan ng itinuturo na ito ang isang diskarte upang basahin ang data ng temperatura at halumigmig mula sa isang RuuviTag gamit ang Bluetooth gamit ang isang Raspberry Pi Zero W at upang ipakita ang mga halaga sa mga binary number sa isang Pimoroni blinkt! pHAT. O upang mailagay itong maikli: kung paano bumuo ng isang estado ng sining at isang medyo nerdy thermometer.

Ang RuuviTag ay isang bukas na mapagkukunan ng sensor bluetooth beacon na may kasamang temperatura / halumigmig / presyon at accelation sensor, ngunit maaari rin itong kumilos bilang isang karaniwang Eddystone ™ / iBeacon proximity beacon. Ito ay isang matagumpay na proyekto ng Kickstarter at nakuha ko ang ilang linggo na ang nakakaraan. Mayroong isang Github na may python software upang mabasa ang RuuviTag gamit ang isang raspberry, at ginamit ko ang isa sa kanilang mga halimbawa, na may ilang mga karagdagan.

Ang Raspberry Pi Zero W ay ang pinakabagong miyembro ng pamilyang RPi, karaniwang isang Pi Zero na may Bluetooth at idinagdag ang WLAN.

Ang blinkt! Ang PHAT mula sa Pimoroni ay karaniwang isang strip ng walong RBG LED na naka-configure bilang isang HAT para sa Raspberry Pi. Napakadaling gamitin at may kasamang library ng sawa. Ang ideya ay basahin ang data mula sa RuuviTag at ipakita ito gamit ang blinkt! HAT Ang mga halaga ay ipinapakita bilang mga binary na numero gamit ang 7 ng mga LED, habang ang walong isa ay ginagamit upang ipahiwatig kung ang halumigmig o temperatura (+ / - / 0) ay ipinapakita.

Hakbang 1: Pag-set up ng System

Madali ang pag-set up ng system: - Lumipat sa RuuviTag (bersyon ng sensor ng temperatura ng RuuviTag).

- I-set up ang iyong RPi Zero W, RPi3, o anumang iba pang RPi na may idinagdag na kapasidad ng bluetooth, pagsunod sa mga tagubilin sa www.raspberrypi.org.

- Ilagay ang blinkt! HAT sa RPi (habang naka-off).

- I-install ang blinkt! at RuuviTag software, tulad ng ipinahiwatig sa kaukulang mga pahina ng GitHub.

- Kailangan mo ngayong kilalanin ang MAC address ng iyong RuuviTag

- kopyahin ang nakalakip na programa ng Python, buksan ito gamit ang IDLE para sa Python 3

- Baguhin ang MAC address ng RuuviTag sa iyo, pagkatapos ay i-save at patakbuhin ang programa.

- huwag mag-atubiling baguhin at i-optimize ang programa. Ang programa ay dumating tulad nito, upang magamit sa iyong sariling peligro, walang pananagutan na kinuha para sa anumang mga pinsala.

Hakbang 2: Ang Device at ang Program

Ang Device at ang Program
Ang Device at ang Program
Ang Device at ang Program
Ang Device at ang Program
Ang Device at ang Program
Ang Device at ang Program
Ang Device at ang Program
Ang Device at ang Program

Tulad ng nabanggit sa itaas, ang ideya ay upang bumuo ng isang simple at murang sistema upang mabasa ang data mula sa beacon at ipakita ang mga halagang may bilang sa blinkt! HAT, o isang katulad na LED strip.

Ang saklaw ng mga halaga para sa temperatura na sinusukat sa isang batay sa sistema ng RPi sa karamihan ng mga kaso ay nasa isang lugar sa pagitan ng - 50 ° C at + 80 ° C, para sa halumigmig sa pagitan ng 0 at 100%. Kaya't ang isang display na maaaring magbigay ng mga halaga mula -100 hanggang +100 ay magiging sapat para sa karamihan ng mga application. Ang decimal na bilang na mas maliit bilang 128 ay maaaring ipakita bilang mga binary number na may 7 bits (o LEDs). Kaya't ang programa ay tumatagal ng mga halaga ng temperatura at halumigmig mula sa RuuviTag bilang mga "float" na numero at binago ang mga ito sa mga binary number, na pagkatapos ay ipinapakita sa blinkt !.

Bilang unang hakbang, ang bilang ay bilugan, pinag-aralan kung positibo, negatibo o zero, at pagkatapos ay binago sa isang positibong numero gamit ang "abs". Pagkatapos ang decimal number ay na-convert sa isang 7-digit na binary number, karaniwang isang string ng 0 at 1s, na nasuri at ipinakita sa huling 7 mga pixel ng blinkt !.

Para sa mga halagang temperatura ang unang pixel ay nagpapahiwatig kung ang halaga ay positibo (pula), zero (magenta) o negatibo (asul). Ang pagpapakita ng mga halagang halumigmig ito ay nakatakda sa berde. Upang gawing simple ang diskriminasyon sa pagitan ng mga halaga ng temperatura at halumigmig ang mga binary pixel ay itinakda puti para sa temperatura at dilaw para sa kahalumigmigan. Upang mapagbuti ang kakayahang mabasa ng mga binary na numero, ang "0" na pixel ay hindi ganap na naka-off, ngunit sa halip ay itinatakda ng mas mahina kaysa sa estado na "1". Bilang blinkt! ang mga pixel ay maliwanag, maaari mong itakda ang pangkalahatang liwanag na binabago ang parameter na "maliwanag"

Ipinapakita ng programa ang mga halaga at bahagi ng proseso din sa screen. Bilang karagdagan makakakita ka ng maraming naka-mute (#) na tagubilin sa pag-print. Iniwan ko sila, dahil maaari mong makita silang kapaki-pakinabang upang maunawaan ang proseso kung hindi nabago ang isip.

Ang mga halaga ay maaari ring maiimbak sa isang file ng log.

Hakbang 3: Code ng Programa

Ang code ay medyo na-debug at na-optimize. Maaari mo na ngayong makita ang bersyon 3 (20_03_2017).

'Ang program na ito ay inilaan upang basahin ang temperatura, kahalumigmigan at mga halaga ng presyon na bumubuo ng isang RuuviTag' 'at upang ipakita ang mga halagang temperatura at halumigmig bilang mga binary number sa isang Pimorini blinkt! HAT '' '' Ito ay batay sa halimbawa ng print_to_screen.py mula sa ruuvitag library sa github. Nangangailangan ng isang Pi Zero W, Pi 3 o anumang iba pang RPi na nilagyan ng bluetooth at lahat ng mga kinakailangang aklatan na kinakailangan. '

oras ng pag-import

i-import ang os mula sa datime na pag-import ng datime

mula sa ruuvitag_sensor.ruuvi import RuuviTagSensor

mula sa blinkt import set_clear_on_exit, set_pixel, malinaw, ipakita

def temp_blinkt (bt):

# ang routine na ito ay tumatagal ng halaga ng temperatura at ipinapakita ito bilang isang binary number sa blinkt!

malinaw ()

# kulay at kasidhian ng "1" mga pixel: puti

r1 = 64 g1 = 64 b1 = 64

# kulay at tindi ng "0" na mga pixel: puti

r0 = 5 g0 = 5 b0 = 5

# Paikot at i-convert sa integer

r = bilog (bt)

Ang # vz ay kumakatawan sa algebraic sign para sa pixel ng tagapagpahiwatig

kung (r> 0): vz = 1 # positive elif (r <0): vz = 2 # negatibong iba: vz = 0 # zero # print (vz) i = abs (r) #print (i)

# baguhin sa ganap, 7-digit na binary number

i1 = i + 128 # para sa mga resulta sa isang 8-digit na binary number na nagsisimula sa 1 # print (i1)

b = "{0: b}". format (i1) # i-convert sa binary

# print (b)

b0 = str (b) # i-convert sa string

b1 = b0 [1: 8] #truncate muna ng kaunti

print ("binary number:", b1)

# Itakda ang mga pixel sa blinkt!

# itakda ang binary number

para sa h sa saklaw (0, 7): f = (h + 1) kung (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " ay 1, pixel ", f) iba pa: set_pixel (f, r0, g0, b0) # print (" nil ")

# Itakda ang pixel ng tagapagpahiwatig

kung (vz == 1): set_pixel (0, 64, 0, 0) # pula para sa mga positibong halagang elif (vz == 2): set_pixel (0, 0, 0, 64) # asul para sa mga negatibong halagang iba pa: set_pixel (0, 64, 0, 64) # magenta kung zero

ipakita ()

# pagtatapos ng temp_blinkt ()

def hum_blinkt (bh):

# kinukuha nito ang halagang halumigmig at ipinapakita ito bilang isang binary number sa blinkt!

malinaw ()

# kulay at kasidhian ng "1" mga pixel: dilaw

r1 = 64 g1 = 64 b1 = 0

# kulay at tindi ng "0" na mga pixel:

r0 = 5 g0 = 5 b0 = 0

# Paikot at ibahin ang bilang sa integer

r = bilog (bh)

# transform to absolute, 7-digit binary number i = abs (r) #print (i)

i1 = i + 128 # para sa nagbibigay ako ng isang 8-digit na binary number na nagsisimula sa 1

# print (i1)

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

# print (b)

b0 = str (b)

b1 = b0 [1: 8] #truncate muna ng kaunti

i-print ("binary number:", b1)

# Itakda ang mga pixel sa blinkt!

# itakda ang binary number sa mga pixel

para sa h sa saklaw (0, 7): f = (h + 1) kung (b1 [h] == "1"): set_pixel (f, r1, g1, b1) iba pa: # mute to blank LEDs set_pixel (f, r0, g0, b0) # pipi sa mga blangkong LED

# Itakda ang pixel ng tagapagpahiwatig

set_pixel (0, 0, 64, 0) # berde para sa halumigmig

ipakita ()

# pagtatapos ng hum_blinkt ()

set_clear_on_exit ()

# Pagbasa ng data mula sa RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Baguhin sa mac-address ng iyong sariling aparato

i-print ('Simula')

sensor = RuuviTagSensor (mac)

habang Totoo:

data = sensor.update ()

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

line_tem = str.format ('Temperatura: {0} C', data ['temperatura']) line_hum = str.format ('Humidity: {0}%', data ['halumigmig']) line_pre = str.format ('Presyon: {0}', data ['pressure'])

i-print ()

# display temperatura sa blinkt! ba = str.format ('{0}', data ['temperatura']) bt = float (ba) print (bt, "Â ° C") temp_blinkt (bt) print ()

oras. tulog (10) # display temperatura sa loob ng 10 segundo

# display halumigmig sa blinkt!

bg = str.format ('{0}', data ['kahalumigmigan']) bh = float (bg) print (bh, "%") hum_blinkt (bh) print ()

# I-clear ang data ng screen at i-print ang sensor sa isang screen

os.system ('clear') print ('Press Ctrl + C to quit. / n / n') print (str (datime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) i-print ('\ n / n / r …….')

# Maghintay ng ilang segundo at magsimulang muli

subukan: time.s Sleep (8) maliban sa KeyboardInterrupt: # Kapag ang Ctrl + C ay pinindot ang pagpapatupad ng habang ang loop ay tumigil sa pag-print ('Exit') malinaw () show () break

Inirerekumendang: