Table des matières:

RuuviTag et PiZero W et Blinkt ! un thermomètre basé sur une balise Bluetooth : 3 étapes (avec photos)
RuuviTag et PiZero W et Blinkt ! un thermomètre basé sur une balise Bluetooth : 3 étapes (avec photos)

Vidéo: RuuviTag et PiZero W et Blinkt ! un thermomètre basé sur une balise Bluetooth : 3 étapes (avec photos)

Vidéo: RuuviTag et PiZero W et Blinkt ! un thermomètre basé sur une balise Bluetooth : 3 étapes (avec photos)
Vidéo: How To DIY A Running Clock By #RaspberryPi Pico 2024, Novembre
Anonim
RuuviTag et PiZero W et Blinkt ! un thermomètre basé sur une balise Bluetooth
RuuviTag et PiZero W et Blinkt ! un thermomètre basé sur une balise Bluetooth
RuuviTag et PiZero W et Blinkt ! un thermomètre basé sur une balise Bluetooth
RuuviTag et PiZero W et Blinkt ! un thermomètre basé sur une balise Bluetooth
RuuviTag et PiZero W et Blinkt ! un thermomètre basé sur une balise Bluetooth
RuuviTag et PiZero W et Blinkt ! un thermomètre basé sur une balise Bluetooth

Cette instructable décrit une approche pour lire les données de température et d'humidité d'un RuuviTag à l'aide de Bluetooth avec un Raspberry Pi Zero W et pour afficher les valeurs en nombres binaires sur un blinkt Pimoroni ! pHAT. Ou pour faire court: comment construire un thermomètre à la pointe de la technologie et un peu ringard.

Le RuuviTag est une balise Bluetooth à capteur open source qui est livrée avec des capteurs de température/humidité/pression et d'accélération, mais peut également servir de balise de proximité Eddystone™ / iBeacon standard. C'était un projet Kickstarter très réussi et j'ai eu le mien il y a quelques semaines. Il existe un Github avec un logiciel python pour lire le RuuviTag à l'aide d'une framboise, et j'ai utilisé un de leurs exemples, avec quelques ajouts.

Le Raspberry Pi Zero W est le dernier membre de la famille RPi, essentiellement un Pi Zero avec Bluetooth et WLAN ajoutés.

Le clin d'oeil ! pHAT de Pimoroni est essentiellement une bande de huit LED RBG configurées comme un HAT pour le Raspberry Pi. Il est très facile à utiliser et est livré avec une bibliothèque python. L'idée était de lire les données du RuuviTag et de les afficher en utilisant le blinkt ! CHAPEAU. Les valeurs sont affichées sous forme de nombres binaires à l'aide de 7 des LED, tandis que la huitième est utilisée pour indiquer si les valeurs d'humidité ou de température (+/-/0) sont affichées.

Étape 1: Configuration du système

La mise en place du système est simple:- Allumez le RuuviTag (version sonde de température RuuviTag).

- Configurez votre RPi Zero W, RPi3 ou tout autre RPi avec capacité Bluetooth ajoutée, en suivant les instructions sur www.raspberrypi.org.

- Placez le clignotant ! HAT sur le RPi (lorsqu'il est éteint).

- Installez le blinkt ! et le logiciel RuuviTag, comme indiqué sur les pages GitHub correspondantes.

- Vous devez maintenant identifier l'adresse MAC de votre RuuviTag

- copier le programme Python joint, l'ouvrir avec IDLE pour Python 3

- remplacez l'adresse MAC du RuuviTag par la vôtre, puis enregistrez et exécutez le programme.

- n'hésitez pas à modifier et optimiser le programme. Le programme est livré tel quel, pour être utilisé à vos risques et périls, aucune responsabilité n'est prise pour les dommages.

Étape 2: L'appareil et le programme

L'appareil et le programme
L'appareil et le programme
L'appareil et le programme
L'appareil et le programme
L'appareil et le programme
L'appareil et le programme
L'appareil et le programme
L'appareil et le programme

Comme mentionné ci-dessus, l'idée était de construire un système simple et peu coûteux pour lire les données de la balise et afficher les valeurs numériques sur le flasht ! HAT, ou une bande LED similaire.

La plage de valeurs de température à mesurer avec un système basé sur RPi se situera dans la plupart des cas entre - 50°C et +80°C, pour une humidité comprise entre 0 et 100%. Ainsi, un affichage pouvant donner des valeurs de -100 à +100 sera suffisant pour la plupart des applications. Les nombres décimaux inférieurs à 128 peuvent être affichés sous forme de nombres binaires avec 7 bits (ou LED). Ainsi, le programme prend les valeurs de température et d'humidité du RuuviTag sous forme de nombres "flottants" et les transforme en nombres binaires, qui sont ensuite affichés sur le flasht!.

Dans un premier temps, le nombre est arrondi, analysé s'il est positif, négatif ou nul, puis transformé en un nombre positif à l'aide de "abs". Ensuite, le nombre décimal est converti en un nombre binaire à 7 chiffres, essentiellement une chaîne de 0 et de 1, qui est analysée et affichée sur les 7 derniers pixels du flasht!.

Pour les valeurs de température, le premier pixel indique si la valeur est positive (rouge), zéro (magenta) ou négative (bleu). Affichage des valeurs d'humidité, il est mis au vert. Pour simplifier la discrimination entre les valeurs de température et d'humidité, les pixels binaires sont réglés en blanc pour la température et en jaune pour l'humidité. Pour améliorer la lisibilité des nombres binaires, les pixels « 0 » ne sont pas complètement désactivés, mais sont définis beaucoup plus faibles que dans l'état « 1 ». Comme flasht ! les pixels sont très lumineux, vous pouvez régler la luminosité générale en modifiant le paramètre "lumineux"

Le programme affiche également les valeurs et les parties du processus à l'écran. De plus, vous trouverez plusieurs instructions d'impression en sourdine (#). Je les ai laissés, car ils peuvent vous être utiles pour comprendre le processus s'ils ne sont pas mis en sourdine.

Les valeurs peuvent également être stockées dans un fichier journal.

Étape 3: Code de programme

Le code a été un peu débogué et optimisé. Vous pouvez maintenant trouver la version 3 (20_03_2017).

' Ce programme est destiné à lire les valeurs de température, d'humidité et de pression à partir d'un RuuviTag '' et à afficher les valeurs de température et d'humidité sous forme de nombres binaires sur un clignotant Pimorini ! CHAPEAU. ' '' ' Il est basé sur l'exemple print_to_screen.py de la bibliothèque ruuvitag sur github. ' ' Nécessite un Pi Zero W, Pi 3 ou tout autre RPi équipé de bluetooth et toutes les librairies nécessaires installées.'

heure d'importation

importer le système d'exploitation à partir de datetime importer datetime

de ruuvitag_sensor.ruuvi importer RuuviTagSensor

à partir de l'importation de blinkt set_clear_on_exit, set_pixel, clear, show

def temp_blinkt (bt):

# cette routine prend la valeur de la température et l'affiche sous forme de nombre binaire sur blinkt !

dégager ()

# couleur et intensité des "1"pixels: blanc

r1 = 64 g1 = 64 b1 = 64

#couleur et intensité des pixels "0": blanc

r0 = 5 g0 = 5 b0 = 5

# Arrondir et convertir en entier

r = rond (bt)

# vz représente le signe algébrique du pixel indicateur

if (r>0): vz = 1 # positif elif (r<0): vz= 2 # négatif else: vz= 0 # zero # print (vz) i = abs(r) #print (i)

# transformation en nombre binaire absolu à 7 chiffres

i1 = i + 128 # pour i résulte en un nombre binaire à 8 chiffres commençant par 1 # print (i1)

b = "{0:b}".format(i1) # convertir en binaire

# imprimer (b)

b0 = str (b) # convertir en chaîne

b1 = b0[1:8] #tronquer le premier bit

print ("numéro binaire: ", b1)

# Définir les pixels sur blinkt !

# définir un nombre binaire

pour h dans la plage (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) # print (" bit ", h, " est 1, pixel ", f) sinon: set_pixel (f, r0, g0, b0) # print("nil")

# Définir le pixel indicateur

if (vz==1): set_pixel (0, 64, 0, 0) # rouge pour les valeurs positives elif (vz==2): set_pixel (0, 0, 0, 64) # bleu pour les valeurs négatives else: set_pixel (0, 64, 0, 64) # magenta si zéro

spectacle()

# fin de temp_blinkt()

def hum_blinkt(bh):

# cela prend la valeur d'humidité et l'affiche sous forme de nombre binaire sur blinkt !

dégager()

# couleur et intensité des pixels "1": jaune

r1 = 64 g1 = 64 b1 = 0

#couleur et intensité de "0" pixels:

r0 = 5 g0 = 5 b0 = 0

# Arrondir et transformer en entier

r = rond (bh)

# transformer en nombre binaire absolu à 7 chiffres i = abs(r) #imprimer (i)

i1 = i + 128 # pour i donne un nombre binaire à 8 chiffres commençant par 1

# imprimer (i1)

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

# imprimer (b)

b0 = str (b)

b1 = b0[1:8] #tronquer le premier bit

print ("numéro binaire: ", b1)

# Définir les pixels sur blinkt !

# définir le nombre binaire en pixels

pour h dans la plage (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) else: # mute pour vider les LED set_pixel (f, r0, g0, b0) # mute aux voyants vides

# Définir le pixel indicateur

set_pixel (0, 0, 64, 0) # vert pour l'humidité

spectacle()

# fin de hum_blinkt()

set_clear_on_exit()

# Lecture des données du RuuviTag

mac = 'EC:6D:59:6D:01:1C' # Changez pour l'adresse mac de votre propre appareil

print('Démarrage')

capteur = RuuviTagSensor (mac)

tant que vrai:

données = sensor.update()

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

line_tem = str.format('Temperature: {0} C', data['temperature']) line_hum = str.format('Humidity: {0} %', data['humidity']) line_pre = str.format('Pression: {0}', données['pression'])

imprimer()

# afficher la température au clignotement ! ba = str.format('{0}', data['temperature']) bt = float (ba) print (bt, " °C") temp_blinkt (bt) print()

time.sleep (10) # afficher la température pendant 10 secondes

# afficher l'humidité sur blinkt !

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

# Effacer l'écran et imprimer les données du capteur à l'écran

os.system('clear') print('Appuyez sur Ctrl+C pour quitter.\n\n') print(str(datetime.now())) print(line_sen) print(line_tem) print(line_hum) print(line_pre) print('\n\n\r…….')

# Attendez quelques secondes et recommencez

try: time.sleep(8) sauf KeyboardInterrupt: # Lorsque Ctrl+C est appuyé, l'exécution de la boucle while est arrêtée print('Exit') clear() show () break

Conseillé: