Inhaltsverzeichnis:

RuuviTag und PiZero W und Blinkt! ein Bluetooth-Beacon-basiertes Thermometer - Gunook
RuuviTag und PiZero W und Blinkt! ein Bluetooth-Beacon-basiertes Thermometer - Gunook

Video: RuuviTag und PiZero W und Blinkt! ein Bluetooth-Beacon-basiertes Thermometer - Gunook

Video: RuuviTag und PiZero W und Blinkt! ein Bluetooth-Beacon-basiertes Thermometer - Gunook
Video: Schrämper Tobias: Grundinstallation und Einbau eines Raspberry Pi ins Wohnmobil 2024, Juli
Anonim
RuuviTag und PiZero W und Blinkt! ein Bluetooth-Beacon-basiertes Thermometer
RuuviTag und PiZero W und Blinkt! ein Bluetooth-Beacon-basiertes Thermometer
RuuviTag und PiZero W und Blinkt! ein Bluetooth-Beacon-basiertes Thermometer
RuuviTag und PiZero W und Blinkt! ein Bluetooth-Beacon-basiertes Thermometer
RuuviTag und PiZero W und Blinkt! ein Bluetooth-Beacon-basiertes Thermometer
RuuviTag und PiZero W und Blinkt! ein Bluetooth-Beacon-basiertes Thermometer

Dieses anweisbare beschreibt einen Ansatz zum Lesen von Temperatur- und Feuchtigkeitsdaten von einem RuuviTag über Bluetooth mit einem Raspberry Pi Zero W und zum Anzeigen der Werte in Binärzahlen auf einem Pimoroni blinkt! pHAT. Oder kurz gesagt: wie man ein hochmodernes und ein bisschen nerdiges Thermometer baut.

Der RuuviTag ist ein Open-Source-Sensor-Bluetooth-Beacon, der mit einem Temperatur-/Feuchtigkeits-/Druck- und Beschleunigungssensor ausgestattet ist, aber auch als Standard-Eddystone™ / iBeacon-Näherungsbeacon fungieren kann. Es war ein sehr erfolgreiches Kickstarter-Projekt und ich habe meins vor ein paar Wochen bekommen. Es gibt einen Github mit Python-Software, um den RuuviTag mit einer Himbeere zu lesen, und ich habe eines ihrer Beispiele mit einigen Ergänzungen verwendet.

Der Raspberry Pi Zero W ist das neueste Mitglied der RPi-Familie, im Grunde ein Pi Zero mit Bluetooth und WLAN.

Das blinkt! pHAT von Pimoroni ist im Grunde ein Streifen aus acht RBG-LEDs, der als HAT für den Raspberry Pi konfiguriert ist. Es ist sehr einfach zu bedienen und wird mit einer Python-Bibliothek geliefert. Die Idee war, die Daten aus dem RuuviTag auszulesen und mit dem blinken! HUT. Die Werte werden als Binärzahlen mit 7 der LEDs angezeigt, während die acht verwendet werden, um anzuzeigen, ob Feuchtigkeits- oder Temperaturwerte (+/-/0) angezeigt werden.

Schritt 1: Einrichten des Systems

Die Einrichtung des Systems ist einfach: - Schalten Sie den RuuviTag (RuuviTag Temperatursensor-Version) ein.

- Richten Sie Ihr RPi Zero W, RPi3 oder jedes andere RPi mit Bluetooth-Kapazität ein, indem Sie den Anweisungen auf www.raspberrypi.org folgen.

- Platziere das Blinken! HAT auf dem RPi (im ausgeschalteten Zustand).

- Installieren Sie das blinkt! und RuuviTag-Software, wie auf den entsprechenden GitHub-Seiten angegeben.

- Sie müssen nun die MAC-Adresse Ihres RuuviTags ermitteln

- Kopieren Sie das angehängte Python-Programm, öffnen Sie es mit IDLE für Python 3

- Ändern Sie die MAC-Adresse des RuuviTag in Ihre, speichern Sie das Programm und führen Sie es aus.

- Fühlen Sie sich frei, das Programm zu ändern und zu optimieren. Die Benutzung des Programms erfolgt auf eigene Gefahr, es wird keine Haftung für eventuelle Schäden übernommen.

Schritt 2: Das Gerät und das Programm

Das Gerät und das Programm
Das Gerät und das Programm
Das Gerät und das Programm
Das Gerät und das Programm
Das Gerät und das Programm
Das Gerät und das Programm
Das Gerät und das Programm
Das Gerät und das Programm

Wie oben erwähnt, war die Idee, ein einfaches und kostengünstiges System zu konstruieren, um Daten aus dem Beacon auszulesen und numerische Werte auf dem blinkt! HAT oder ein ähnlicher LED-Streifen.

Der Wertebereich für die zu messende Temperatur mit einem RPi-basierten System liegt in den meisten Fällen zwischen - 50 °C und +80 °C, für die Luftfeuchtigkeit zwischen 0 und 100 %. Für die meisten Anwendungen reicht also eine Anzeige, die Werte von -100 bis +100 anzeigen kann. Dezimalzahlen kleiner 128 können als Binärzahlen mit 7 Bit (oder LEDs) dargestellt werden. Das Programm nimmt also die Temperatur- und Feuchtigkeitswerte aus dem RuuviTag als "Float"-Zahlen und wandelt sie in Binärzahlen um, die dann auf dem blinken! angezeigt werden.

Im ersten Schritt wird die Zahl gerundet, auf positiv, negativ oder null analysiert und dann mit „abs“in eine positive Zahl umgewandelt. Dann wird die Dezimalzahl in eine 7-stellige Binärzahl umgewandelt, im Grunde eine Folge von 0 und 1, die analysiert und auf den letzten 7 Pixeln des blinkt! angezeigt wird.

Bei Temperaturwerten zeigt das erste Pixel an, ob der Wert positiv (rot), null (magenta) oder negativ (blau) ist. Bei der Anzeige von Feuchtewerten ist es auf Grün gesetzt. Um die Unterscheidung zwischen Temperatur- und Feuchtigkeitswerten zu vereinfachen, werden die Binärpixel weiß für Temperatur und gelb für Feuchtigkeit gesetzt. Um die Lesbarkeit der Binärzahlen zu verbessern, werden "0"-Pixel nicht vollständig ausgeschaltet, sondern stattdessen viel schwächer eingestellt als im "1"-Zustand. Wie blinkt! Pixel sind sehr hell, Sie können die allgemeine Helligkeit einstellen, indem Sie den Parameter "hell" ändern

Das Programm zeigt die Werte und Teile des Prozesses auch auf dem Bildschirm an. Darüber hinaus finden Sie mehrere Anweisungen zum stummgeschalteten (#) Druck. Ich habe sie drin gelassen, da sie für Sie hilfreich sein könnten, um den Vorgang zu verstehen, wenn die Stummschaltung nicht aktiviert ist.

Die Werte können auch in einer Protokolldatei gespeichert werden.

Schritt 3: Programmcode

Der Code wurde ein wenig debuggt und optimiert. Sie finden jetzt Version 3 (20_03_2017).

' Dieses Programm soll die Temperatur-, Feuchte- und Druckwerte aus einem RuuviTag '' auslesen und die Temperatur- und Feuchtewerte als Binärzahlen auf einem Pimorini blinkt anzeigen! HUT. ' '' ' Es basiert auf dem print_to_screen.py-Beispiel aus der ruuvitag-Bibliothek auf github. ' ' Erfordert einen Pi Zero W, Pi 3 oder einen anderen RPi mit Bluetooth und allen notwendigen Bibliotheken.'

Importzeit

Betriebssystem von Datum/Uhrzeit importieren Datum/Uhrzeit importieren

von ruuvitag_sensor.ruuvi importieren RuuviTagSensor

from blinkt import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt(bt):

# diese Routine nimmt den Temperaturwert und zeigt ihn als Binärzahl beim Blinken an!

klar ()

# Farbe und Intensität von "1"pixeln: weiß

r1 = 64 g1 = 64 b1 = 64

#Farbe und Intensität von "0" Pixeln: weiß

r0 = 5 g0 = 5 b0 = 5

# Runden und in ganze Zahlen umwandeln

r = rund (bt)

# vz steht für Vorzeichen für Indikatorpixel

if (r>0): vz = 1 # positive elif (r<0): vz= 2 # negativ else: vz= 0 # null # print (vz) i = abs(r) #print (i)

# in absolute, 7-stellige Binärzahl umwandeln

i1 = i + 128 # für i ergibt eine 8-stellige Binärzahl beginnend mit 1 # print (i1)

b = "{0:b}".format(i1) # in binär konvertieren

# drucken (b)

b0 = str (b) # in String umwandeln

b1 = b0[1:8] #erstes Bit abschneiden

drucken ("Binärzahl: ", b1)

# Pixel auf blinkt setzen!

# Binärzahl setzen

für h im Bereich (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " ist 1, Pixel", f) sonst: set_pixel (f, r0, g0, b0) # print("nil")

# Indikatorpixel setzen

if (vz==1): set_pixel (0, 64, 0, 0) # rot für positive Werte elif (vz==2): set_pixel (0, 0, 0, 64) # blau für negative Werte else: set_pixel (0, 64, 0, 64) # magenta wenn null

zeigen()

# Ende von temp_blinkt()

def hum_blinkt(bh):

# dies nimmt den Feuchtigkeitswert und zeigt ihn als Binärzahl an blinkt!

klar()

# Farbe und Intensität von "1" Pixeln: gelb

r1 = 64 g1 = 64 b1 = 0

#Farbe und Intensität von "0" Pixeln:

r0 = 5 g0 = 5 b0 = 0

# Runden und in eine ganze Zahl umwandeln

r = rund (bh)

# in absolute, 7-stellige Binärzahl transformieren i = abs(r) #print (i)

i1 = i + 128 # für i ergibt eine 8-stellige Binärzahl beginnend mit 1

# drucken (i1)

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

# drucken (b)

b0 = str (b)

b1 = b0[1:8] #erstes Bit abschneiden

drucken ("Binärzahl: ", b1)

# Pixel auf blinkt setzen!

# Binärzahl auf Pixel setzen

für h im Bereich (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) else: # auf leere LEDs stumm schalten set_pixel (f, r0, g0, b0) # auf leere LEDs stummschalten

# Indikatorpixel setzen

set_pixel (0, 0, 64, 0) # grün für Luftfeuchtigkeit

zeigen()

# Ende von hum_blinkt()

set_clear_on_exit()

# Daten aus dem RuuviTag lesen

mac = 'EC:6D:59:6D:01:1C' # Wechseln Sie zur Mac-Adresse Ihres eigenen Geräts

print('Start')

sensor = RuuviTagSensor(mac)

während Wahr:

data = sensor.update()

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

line_tem = str.format('Temperatur: {0} C', data['temperature']) line_hum = str.format('Luftfeuchtigkeit: {0} %', data['humidity']) line_pre = str.format('Druck: {0}', Daten['Druck'])

drucken()

# Temperaturanzeige an blinkt! ba = str.format('{0}', data['temperature']) bt = float (ba) print (bt, " °C") temp_blinkt (bt) print()

time.sleep (10) # Temperaturanzeige für 10 Sekunden

# Luftfeuchtigkeit anzeigen blinkt!

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

# Bildschirm löschen und Sensordaten auf den Bildschirm drucken

os.system('clear') print('Drücken Sie Strg+C zum Beenden.\n\n') print(str(datetime.now())) print(line_sen) print(line_tem) print(line_hum) print(line_pre) print('\n\n\r…….')

# Warten Sie ein paar Sekunden und beginnen Sie von vorne

try: time.sleep(8) außer KeyboardInterrupt: # Wenn Strg+C gedrückt wird, wird die Ausführung der while-Schleife gestoppt print('Exit') clear() show() break

Empfohlen: