Inhoudsopgave:
Video: RuuviTag en PiZero W en Blinkt! een Bluetooth Beacon-gebaseerde thermometer - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Deze instructable beschrijft een benadering om temperatuur- en vochtigheidsgegevens van een RuuviTag te lezen met behulp van Bluetooth met een Raspberry Pi Zero W en om de waarden in binaire getallen weer te geven op een Pimoroni-knippert! pHAT. Of om het kort te zeggen: hoe bouw je een ultramoderne en een beetje nerdy thermometer.
De RuuviTag is een open source sensor bluetooth baken dat wordt geleverd met een temperatuur/vochtigheid/druk en versnellingssensoren, maar kan ook fungeren als een standaard Eddystone™ / iBeacon naderingsbaken. Het was een zeer succesvol Kickstarter-project en ik kreeg het mijne een paar weken geleden. Er is een Github met python-software om de RuuviTag te lezen met een framboos, en ik heb een van hun voorbeelden gebruikt, met enkele toevoegingen.
De Raspberry Pi Zero W is het nieuwste lid van de RPi-familie, in feite een Pi Zero met Bluetooth en WLAN toegevoegd.
De blinkt! pHAT van Pimoroni is in feite een strip van acht RBG-LED's die zijn geconfigureerd als een HAT voor de Raspberry Pi. Het is heel gemakkelijk te gebruiken en wordt geleverd met een python-bibliotheek. Het idee was om de gegevens van de RuuviTag te lezen en weer te geven met de blinkt! HOED. De waarden worden weergegeven als binaire getallen met behulp van 7 van de LED's, terwijl de acht wordt gebruikt om aan te geven of vochtigheid of temperatuur (+/-/0) waarden worden weergegeven.
Stap 1: Het systeem instellen
Het instellen van het systeem is eenvoudig:- Schakel de RuuviTag in (RuuviTag-temperatuursensorversie).
- Stel uw RPi Zero W, RPi3 of een andere RPi met toegevoegde Bluetooth-capaciteit in volgens de instructies op www.raspberrypi.org.
- Plaats de blinkt! HAT op de RPi (wanneer uitgeschakeld).
- Installeer de blinkt! en RuuviTag-software, zoals aangegeven op de bijbehorende GitHub-pagina's.
- U moet nu het MAC-adres van uw RuuviTag. identificeren
- kopieer het bijgevoegde Python-programma, open het met IDLE voor Python 3
- verander het MAC-adres van de RuuviTag in het jouwe, sla het programma op en voer het uit.
- voel je vrij om het programma aan te passen en te optimaliseren. Het programma wordt geleverd zoals het is, te gebruiken op eigen risico, er wordt geen aansprakelijkheid aanvaard voor enige schade.
Stap 2: Het apparaat en het programma
Zoals hierboven vermeld, was het idee om een eenvoudig en goedkoop systeem te bouwen om gegevens van het baken te lezen en numerieke waarden weer te geven op de blinkt! HAT, of een vergelijkbare ledstrip.
Het bereik van de te meten temperatuurwaarden met een op RPi gebaseerd systeem zal in de meeste gevallen ergens tussen - 50°C en +80°C liggen, voor vochtigheid tussen 0 en 100%. Dus een display dat waarden van -100 tot +100 kan geven, zal voor de meeste toepassingen voldoende zijn. Decimale getallen kleiner dan 128 kunnen worden weergegeven als binaire getallen met 7 bits (of LED's). Het programma neemt dus de temperatuur- en vochtigheidswaarden van de RuuviTag als "float"-getallen en zet ze om in binaire getallen, die vervolgens op de blinkt! worden weergegeven.
Als eerste stap wordt het getal afgerond, geanalyseerd als positief, negatief of nul, en vervolgens omgezet in een positief getal met behulp van "abs". Vervolgens wordt het decimale getal omgezet in een 7-cijferig binair getal, in feite een reeks van nullen en enen, die wordt geanalyseerd en weergegeven op de laatste 7 pixels van de blinkt!.
Voor temperatuurwaarden geeft de eerste pixel aan of de waarde positief (rood), nul (magenta) of negatief (blauw) is. Als de vochtigheidswaarden worden weergegeven, is deze groen ingesteld. Om het onderscheid tussen temperatuur- en vochtigheidswaarden te vereenvoudigen, zijn de binaire pixels wit ingesteld voor temperatuur en geel voor vochtigheid. Om de leesbaarheid van de binaire getallen te verbeteren, zijn "0"-pixels niet volledig uitgeschakeld, maar veel zwakker ingesteld dan in de "1"-status. Als blinkt! pixels zijn erg helder, u kunt de algemene helderheid instellen door de parameter "helder" te wijzigen
Het programma toont de waarden en delen van het proces ook op het scherm. Daarnaast vindt u enkele gedempte (#) afdrukinstructies. Ik heb ze erin gelaten, omdat je ze misschien nuttig vindt om het proces te begrijpen als ze niet zijn gedempt.
De waarden kunnen ook worden opgeslagen in een logbestand.
Stap 3: Programmacode
De code is een beetje gedebugd en geoptimaliseerd. Mogelijk vindt u nu versie 3 (20_03_2017).
' Dit programma is bedoeld om de temperatuur-, vochtigheids- en drukwaarden van een RuuviTag'' af te lezen en de temperatuur- en vochtigheidswaarden als binaire getallen op een Pimorini-knippert weer te geven! HOED. ' '' ' Het is gebaseerd op het voorbeeld print_to_screen.py uit de ruuvitag-bibliotheek op github. ' ' Vereist een Pi Zero W, Pi 3 of een andere RPi uitgerust met bluetooth en alle benodigde bibliotheken geïnstalleerd.'
import tijd
importeer os van datetime importeer datetime
van ruuvitag_sensor.ruuvi import RuuviTagSensor
van blinkt import set_clear_on_exit, set_pixel, clear, show
def temp_blinkt(bt):
# deze routine neemt de temperatuurwaarde en geeft deze weer als een binair getal op blinkt!
Doorzichtig ()
# kleur en intensiteit van "1" pixels: wit
r1 = 64 g1 = 64 b1 = 64
#kleur en intensiteit van "0" pixels: wit
r0 = 5 g0 = 5 b0 = 5
# Rond af en converteer naar geheel getal
r = rond (bt)
# vz staat voor algebraïsch teken voor indicatorpixel
if (r>0): vz = 1 # positive elif (r<0): vz= 2 # negatief else: vz= 0 # zero # print (vz) i = abs(r) #print (i)
# transformeren naar absoluut 7-cijferig binair getal
i1 = i + 128 # voor i resulteert in een 8-cijferig binair getal dat begint met 1 # print (i1)
b = "{0:b}".format(i1) # converteren naar binair
# afdrukken (b)
b0 = str (b) # converteren naar string
b1 = b0[1:8] #eerste bit afkappen
print ("binair getal:", b1)
# Zet pixels op blinkt!
# stel binair getal in
voor h binnen bereik (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " is 1, pixel ", f) else: set_pixel (f, r0, g0, b0) # print("nil")
# Stel indicatorpixel in
if (vz==1): set_pixel (0, 64, 0, 0) # rood voor positieve waarden elif (vz==2): set_pixel (0, 0, 0, 64) # blauw voor negatieve waarden else: set_pixel (0, 64, 0, 64) # magenta indien nul
laten zien()
# einde van temp_blinkt()
def hum_blinkt(bh):
# dit neemt de vochtigheidswaarde en geeft deze weer als een binair getal op blinkt!
Doorzichtig()
# kleur en intensiteit van "1" pixels: geel
r1 = 64 g1 = 64 b1 = 0
#kleur en intensiteit van "0" pixels:
r0 = 5 g0 = 5 b0 = 0
# Rond af en transformeer in geheel getal
r = rond (bh)
# transformeren naar absoluut, 7-cijferig binair getal i = abs(r) #print (i)
i1 = i + 128 # voor i geeft een 8-cijferig binair getal dat begint met 1
# afdrukken (i1)
b = "{0:b}".format(i1)
# afdrukken (b)
b0 = str (b)
b1 = b0[1:8] #eerste bit afkappen
print ("binair getal:", b1)
# Zet pixels op blinkt!
# stel binair getal in op pixels
voor h binnen bereik (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) else: # mute naar lege LED's set_pixel (f, r0, g0, b0) # dempen naar lege LED's
# Stel indicatorpixel in
set_pixel (0, 0, 64, 0) # groen voor vochtigheid
laten zien()
# einde van hum_blinkt()
set_clear_on_exit()
# Gegevens lezen van de RuuviTag
mac = 'EC:6D:59:6D:01:1C' # Wijzig naar het mac-adres van uw eigen apparaat
print('Begin')
sensor = RuuviTagSensor(mac)
terwijl waar:
data = sensor.update()
line_sen = str.format('Sensor - {0}', mac)
line_tem = str.format('Temperatuur: {0} C', data['temperatuur']) line_hum = str.format('Vochtigheid: {0} %', data['vochtigheid']) line_pre = str.format('Druk: {0}', gegevens['druk'])
afdrukken()
# display temperatuur op blinkt! ba = str.format('{0}', data['temperatuur']) bt = float (ba) print (bt, " °C") temp_blinkt (bt) print()
time.sleep (10) # temperatuur gedurende 10 seconden weergeven
# display vochtigheid op blinkt!
bg = str.format('{0}', data['humidity']) bh = float (bg) print (bh, " %") hum_blinkt (bh) print ()
# Wis het scherm en print sensorgegevens naar het scherm
os.system('clear') print('Druk op Ctrl+C om te stoppen.\n\n') print(str(datetime.now())) print(line_sen) print(line_tem) print(line_hum) print(line_pre) print('\n\n\r…….')
# Wacht een paar seconden en begin opnieuw
probeer: time.sleep(8) behalve KeyboardInterrupt: # Wanneer Ctrl+C wordt ingedrukt, wordt de while-lus gestopt print('Exit') clear() show () break
Aanbevolen:
Een e-mailmelding ontvangen wanneer een kanaal op ThingSpeak een tijdje niet is bijgewerkt: 16 stappen
Ontvang een e-mailmelding als een kanaal op ThingSpeak een tijdje niet is bijgewerkt: Achtergrondverhaal Ik heb zes geautomatiseerde kassen verspreid over Dublin, Ierland. Door een op maat gemaakte app voor mobiele telefoons te gebruiken, kan ik op afstand de geautomatiseerde functies in elke kas volgen en ermee communiceren. Ik kan de win handmatig openen / sluiten
Hoe maak je een thermometer met Arduino en LM35: 6 stappen
Hoe maak je een thermometer met Arduino en LM35: vandaag ga ik je laten zien hoe je een thermometer maakt met Arduino en LM35 temperatuursensor, LCD-scherm, op een breadboard dat met draden is verbonden. Het toont de temperatuur in Celsius en Fahrenheit.We Opgemerkt
Hoe maak je een digitale thermometer #1: 4 stappen
Hoe maak je een digitale thermometer # 1: In dit artikel zal ik een project maken met de naam "Digitale Thermometer". Ik gebruik "DHT11" voor de temperatuursensor. En gebruik de "7Segmrnt-module" als de weergave. Ik raad aan eerst dit artikel te lezen "DHT11" en &q
Thermometer met behulp van een thermistor: 5 stappen
Thermometer die een thermistor gebruikt.: Dit is de thermometer die alleen een thermistor en een weerstand gebruikt. U kunt ook op elk moment de temperatuur van uw kamer of wat dan ook bewaken en opslaan. U kunt ook de eerder opgeslagen gegevens op de thingsio
Een digitale thermometer maken: 5 stappen
Maak een digitale thermometer: in deze instructable leer je hoe je een eenvoudige digitale thermometer maakt voor minder dan 10 pond met behulp van een paar eenvoudige componenten en 1 IC. Het voltooide project zou er ongeveer zo uit moeten zien: