Innehållsförteckning:

RuuviTag och PiZero W och Blinkt! en Bluetooth Beacon -baserad termometer: 3 steg (med bilder)
RuuviTag och PiZero W och Blinkt! en Bluetooth Beacon -baserad termometer: 3 steg (med bilder)

Video: RuuviTag och PiZero W och Blinkt! en Bluetooth Beacon -baserad termometer: 3 steg (med bilder)

Video: RuuviTag och PiZero W och Blinkt! en Bluetooth Beacon -baserad termometer: 3 steg (med bilder)
Video: CS50 2013 - Week 10, continued 2024, Juli
Anonim
RuuviTag och PiZero W och Blinkt! en Bluetooth Beacon -baserad termometer
RuuviTag och PiZero W och Blinkt! en Bluetooth Beacon -baserad termometer
RuuviTag och PiZero W och Blinkt! en Bluetooth Beacon -baserad termometer
RuuviTag och PiZero W och Blinkt! en Bluetooth Beacon -baserad termometer
RuuviTag och PiZero W och Blinkt! en Bluetooth Beacon -baserad termometer
RuuviTag och PiZero W och Blinkt! en Bluetooth Beacon -baserad termometer

Denna instruerbara beskriver ett tillvägagångssätt för att läsa temperatur- och luftfuktighetsdata från en RuuviTag med Bluetooth med en Raspberry Pi Zero W och för att visa värdena i binära tal på en Pimoroni -blinkt! pHAT. Eller för att säga det kort: hur man bygger en toppmodern och lite nördig termometer.

RuuviTag är en Bluetooth -signal med öppen källsensor som levereras med temperatur-/luftfuktighets-/tryck- och accelationssensorer, men kan också fungera som en standard Eddystone ™/iBeacon -närhetsfyr. Det var ett mycket framgångsrikt Kickstarter -projekt och jag fick mitt för några veckor sedan. Det finns en Github med pythonprogramvara för att läsa RuuviTag med ett hallon, och jag har använt ett av deras exempel, med några tillägg.

Raspberry Pi Zero W är den senaste medlemmen i RPi -familjen, i grunden en Pi Zero med Bluetooth och WLAN tillagt.

Blinken! pHAT från Pimoroni är i grunden en remsa med åtta RBG -lysdioder konfigurerade som en hatt för Raspberry Pi. Det är mycket lätt att använda och levereras med ett python -bibliotek. Tanken var att läsa data från RuuviTag och visa den med hjälp av blinkt! HATT. Värdena visas som binära tal med 7 av lysdioderna, medan de åtta används för att indikera om luftfuktighet eller temperatur (+/-/0) visas.

Steg 1: Installera systemet

Det är enkelt att installera systemet:- Slå på RuuviTag (RuuviTag temperaturgivare version).

- Konfigurera din RPi Zero W, RPi3 eller någon annan RPi med Bluetooth -kapacitet tillagd, följ instruktionerna på www.raspberrypi.org.

- Placera blinkt! HAT på RPi (medan den är avstängd).

- Installera blinkt! och RuuviTag -programvara, som anges på motsvarande GitHub -sidor.

- Du måste nu identifiera MAC -adressen för din RuuviTag

- kopiera det bifogade Python -programmet, öppna det med IDLE för Python 3

- ändra MAC -adressen för RuuviTag till din, spara sedan och kör programmet.

- modifiera och optimera programmet. Programmet kommer som det är, för att användas på egen risk, tar inga ansvar för eventuella skador.

Steg 2: Enheten och programmet

Enheten och programmet
Enheten och programmet
Enheten och programmet
Enheten och programmet
Enheten och programmet
Enheten och programmet
Enheten och programmet
Enheten och programmet

Som nämnts ovan var tanken att konstruera ett enkelt och billigt system för att läsa data från fyren och visa numeriska värden på blinkt! HAT, eller en liknande LED -remsa.

Värdeintervallet för temperatur som ska mätas med ett RPi -baserat system kommer i de flesta fall att ligga någonstans mellan - 50 ° C och +80 ° C, för luftfuktighet mellan 0 och 100%. Så en display som kan ge värden från -100 till +100 är tillräcklig för de flesta applikationer. Decimalnummer som är mindre än 128 kan visas som binära tal med 7 bitar (eller lysdioder). Så programmet tar temperatur- och luftfuktighetsvärdena från RuuviTag som "float" -tal och omvandlar dem till binära tal, som sedan visas på blinkt !.

Som ett första steg avrundas talet, analyseras om det är positivt, negativt eller noll och transformeras sedan till ett positivt tal med hjälp av "abs". Därefter omvandlas decimaltalet till ett 7-siffrigt binärt tal, i grunden en sträng av 0s och 1s, som analyseras och visas på de sista 7 pixlarna i blinkt !.

För temperaturvärden indikerar den första pixeln om värdet är positivt (rött), noll (magenta) eller negativt (blått). Med fuktighetsvärden är den inställd på grön. För att förenkla skillnaden mellan temperatur- och luftfuktighetsvärden är de binära pixlarna inställda vita för temperatur och gula för fuktighet. För att förbättra de binära talens läsbarhet stängs inte "0" pixeln helt av, utan ställs istället in mycket svagare än i "1" -läget. Som blinkt! pixlar är väldigt ljusa, du kan ställa in den allmänna ljusstyrkan genom att ändra parametern "ljus"

Programmet visar även värden och delar av processen på skärmen. Dessutom hittar du flera dämpade (#) utskriftsinstruktioner. Jag lämnade dem kvar, eftersom du kan tycka att de är till hjälp för att förstå processen om de inte är tysta.

Värdena kan också lagras i en loggfil.

Steg 3: Programkod

Koden var lite felsökad och optimerad. Du kan nu hitta version 3 (20_03_2017).

'Det här programmet är avsett att läsa temperatur, luftfuktighet och tryckvärden från en RuuviTag' 'och att visa temperatur- och fuktighetsvärdena som binära tal på en Pimorini -blinkt! HATT. '' '' Det är baserat på exemplet print_to_screen.py från ruuvitag -biblioteket på github. '' Kräver en Pi Zero W, Pi 3 eller någon annan RPi utrustad med bluetooth och alla nödvändiga bibliotek installerade. '

importtid

importera os från datetime import datetime

från ruuvitag_sensor.ruuvi importera RuuviTagSensor

från blinkt import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt (bt):

# denna rutin tar temperaturvärdet och visar det som ett binärt tal på blinkt!

klar ()

# färg och intensitet på "1" pixlar: vit

r1 = 64 g1 = 64 b1 = 64

#färg och intensitet på "0" pixlar: vit

r0 = 5 g0 = 5 b0 = 5

# Runda och konvertera till heltal

r = rund (bt)

# vz representerar algebraiskt tecken för indikatorpixel

if (r> 0): vz = 1 # positiv elif (r <0): vz = 2 # negativ annat: vz = 0 # zero # print (vz) i = abs (r) #print (i)

# transformera till absolut, 7-siffrigt binärt tal

i1 = i + 128 # för i resulterar i ett åttasiffrigt binärt tal som börjar med 1 # utskrift (i1)

b = "{0: b}". format (i1) # konvertera till binärt

# tryck (b)

b0 = str (b) # konvertera till sträng

b1 = b0 [1: 8] #avkorta första biten

print ("binärt tal:", b1)

# Ställ in pixlar på blinkt!

# ställ in binärt tal

för h i intervallet (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " är 1, pixel ", f) else: set_pixel (f, r0, g0, b0) # print (" noll ")

# Ställ indikatorpixel

if (vz == 1): set_pixel (0, 64, 0, 0) # röd för positiva värden elif (vz == 2): set_pixel (0, 0, 0, 64) # blå för negativa värden annars: set_pixel (0, 64, 0, 64) # magenta om noll

show()

# slutet av temp_blinkt ()

def hum_blinkt (bh):

# detta tar fuktvärdet och visar det som ett binärt tal på blinkt!

klar()

# färg och intensitet på "1" pixlar: gul

r1 = 64 g1 = 64 b1 = 0

#färg och intensitet för "0" pixlar:

r0 = 5 g0 = 5 b0 = 0

# Runda och förvandla till heltal

r = rund (bh)

# transformera till absolut, 7-siffrigt binärt tal i = abs (r) #print (i)

i1 = i + 128 # för i ger ett åttasiffrigt binärt tal som börjar med 1

# print (i1)

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

# tryck (b)

b0 = str (b)

b1 = b0 [1: 8] #avkorta första biten

print ("binärt tal:", b1)

# Ställ in pixlar på blinkt!

# ställ in binärt tal till pixlar

för h i intervallet (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # tyst till tomma lysdioder set_pixel (f, r0, g0, b0) # tyst till tomma lysdioder

# Ställ indikatorpixel

set_pixel (0, 0, 64, 0) # grönt för luftfuktighet

show()

# slutet av hum_blinkt ()

set_clear_on_exit ()

# Läser data från RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Ändra till din egen enhets mac-adress

print ('Startar')

sensor = RuuviTagSensor (mac)

medan det är sant:

data = sensor.update ()

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

line_tem = str.format ('Temperatur: {0} C', data ['temperatur']) line_hum = str.format ('Luftfuktighet: {0} %', data ['fuktighet']) line_pre = str.format ('Tryck: {0}', data ['tryck'])

skriva ut()

# displaytemperatur på blinkt! ba = str.format ('{0}', data ['temperatur']) bt = float (ba) print (bt, "Â ° C") temp_blinkt (bt) print ()

tid. sover (10) # displaytemperatur i 10 sekunder

# visa fuktighet på blinkt!

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

# Rensa skärmen och skriv ut sensordata till skärmen

os.system ('clear') print ('Tryck Ctrl+C för att avsluta. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) skriv ut ('\ n / n / r …….')

# Vänta några sekunder och börja om igen

försök: time.sleep (8) utom KeyboardInterrupt: # När Ctrl+C trycks utför körningen av medan loop är stoppad utskrift ('Exit') clear () show () break

Rekommenderad: