[PYTHON] Classique de Noël (?) Éclairage d'un arbre de Noël avec Raspberry Pi et Philips Hue

Cet article est l'article du 25ème jour du Calendrier de l'Avent North Detail 2019.

PostScript 02/04/2020 Cet article est également publié sur le blog NorthDetail. https://www.northdetail.co.jp/blog/455/

Joyeux Noël! Le calendrier de l'Avent est aussi le dernier jour de Noël, et Noël est une tarte aux râpes!

Donc, à la fin du Calendrier de l'Avent North Detail 2019, j'aimerais créer un mécanisme pour contrôler les lumières qui illuminent l'arbre de Noël avec Raspberry Pi.

Vidéo

Controlled Philips Hue by Raspberry Pi (with Gyroscope) Cliquez pour regarder la vidéo sur YouTube.

En secouant le capteur attaché au Raspberry Pi, la lumière peut être allumée et éteinte, et la luminosité et la teinte peuvent être ajustées en l'inclinant.

Que préparer

Raspberry Pi

capteur

Ce n'est pas grave si vous pouvez préparer quelque chose qui peut détecter l'inclinaison, etc. Utilisez ceci cette fois.

Hue

Lumière

Cette fois, j'ai (enfin) utilisé ce que j'ai acheté comme ensemble lorsque j'ai acheté "Echo Show".

pont

Utilisez un pont pour connecter Hue à partir du Raspberry Pi.

Plus précisément, le pont étant un serveur Web, vous pouvez prendre le contrôle de Hue en effectuant une requête HTTP du Raspberry Pi au pont.

Autre

C'est une précaution courante pour les lampes LED, mais elle est ** principalement différente des ampoules à incandescence dans la partie chauffée **.

Les ampoules à incandescence ont de la chaleur autour du filament de la partie émettrice de lumière, tandis que les lumières LED ont de la chaleur autour de la partie de la douille. Par conséquent, veuillez utiliser un support avec une structure qui dissipe correctement la chaleur autour de la prise.

Paramètres de teinte

Tout d'abord, utilisez l'application pour smartphone pour enregistrer la lumière sur le pont. Travaillez ici en fonction de la façon dont vous utilisez l'application.

Après cela, nous partirons du principe que le pont, le Raspberry Pi et le PC de travail sont tous sur le même réseau.

Vérifiez l'adresse IP du pont

Vous devez connaître l'adresse IP car vous allez envoyer des requêtes HTTP au pont. Ceci peut être obtenu en accédant à l'adresse suivante si le pont est correctement configuré.

https://discovery.meethue.com/

[
  {
    id: "XXXXXXXXXXXXXXXX",
    internalipaddress: "10.xxx.xxx.xxx"
  }
]

Cette «adresseip interne» est l'adresse IP du réseau actuellement connecté. Prenons une note.

Enregistrement de l'utilisateur sur le pont

Lorsque vous utilisez Raspberry Pi, un ID utilisateur unique est requis sur le pont. Après avoir appuyé sur le bouton (physique) sur le corps du pont, si vous faites une requête HTTP sous la forme suivante, «nom d'utilisateur» est inclus dans la réponse. Notez-le car il sera utilisé dans les futures requêtes HTTP.

Au fait, devicetype peut être défini librement par vous-même.

POST http://`internalipaddress`/api

body: {"devicetype":"tacck_hue_app#raspi"}

response.json


[
  {
    "success": {
      "username": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    }
  }
]

Obtenez l'ID de la lumière

Ensuite, obtenez l'ID de la lumière enregistrée dans le pont pour faire fonctionner la lumière.

GET http://`internalipaddress`/api/`username`/lights

response.json


{
  "1":{"state":{"on":false,"bri":254,...}
}

Beaucoup d'informations sont renvoyées, mais le premier «1» est l'ID.

Lancez la requête HTTP ci-dessous et le voyant devrait s'allumer. (Si vous remplacez «vrai» par «faux», il s'éteindra.)

Remplacez ʻinternalipaddress, ʻusername et light_id par les vôtres.

PUT http://`internalipaddress`/api/`username`/lights/`light_id`/state

body: {"on":true}

Raspberry Pi

Vient ensuite le réglage côté Raspberry Pi. Pour Raspberry Pi, il est supposé que le WiFi est disponible avec Raspbian déjà en cours d'exécution. De plus, on suppose que le capteur (ADRSZGR) est déjà connecté à l'unité principale du Raspberry Pi.

capteur

Tout d'abord, vérifiez si vous pouvez obtenir la valeur du capteur. Ici, le code source de base est fourni, alors utilisons-le.

Code de base https://github.com/bit-trade-one/RasPi-Zero-One-Series/tree/master/3rd/ADRSZGR_9-Axis_Gyro

Exécutons-le sur le Raspberry Pi.

$ git clone https://github.com/bit-trade-one/RasPi-Zero-One-Series.git
$ cd RasPi-Zero-One-Series/3rd/ADRSZGR_9-Axis_Gyro
$ python3 ADRSZGR_Sample.py
Ne déplacez pas le capteur pendant 10 secondes
Il reste 1 seconde
Calibration terminée
X:-0.045608688186813184	Y:0.7310804429945055	Z:-4.547119140625

2.7179718017578125e-05,0.01416015625,0.0185546875,1.0087890625,-0.045608688186813184,-0.12341174450549453,-0.152587890625,-14.843956043956045,6.447374847374848,-1.6493284493284492,
0.05398225784301758,0.0126953125,0.01513671875,1.00927734375,0.13749678056318682,0.059693724244505475,-0.213623046875,-16.193406593406593,6.297435897435897,-0.8996336996336997,
(Puisqu'il continue ci-dessous, Ctrl à un endroit approprié+Suspendu à C.)

Si la valeur sort comme ça, c'est OK car le capteur bouge.

la mise en oeuvre

Maintenant, implémentons-le pour utiliser les valeurs du capteur pour manipuler les lumières de Hue. La base GYRO.py fait tout le contrôle du capteur, vous n'avez donc qu'à réfléchir à la façon d'utiliser les valeurs.

Cette fois, nous allons l'implémenter avec une conception qui s'allume / s'éteint lorsque le capteur est secoué et change de luminosité et de tonalité de couleur lorsqu'il est incliné.

Copiez ʻADRSZGR_Sample.py utilisé dans la confirmation précédente comme ʻindex.py et utilisez-le. De plus, comme je n'écris généralement pas en Python, je vais l'implémenter en faisant attention à l'indent valley [^ 1].

[^ 1]: C'est mon mot inventé. https://speakerdeck.com/tacck/phpergawen-kitaipythonfalseikutukafalsekoto-pycon-mini-sapporo-2019-number-pyconsap?slide=18

J'ai fait divers ajustements et me suis installé avec le code suivant.

.
├── GYRO.py
└── index.py

index.py


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import signal
import requests
import time
import GYRO

GYR_THRESHOLD = 200.0

HUE_BRI_MIN = 0
HUE_BRI_MAX = 254
HUE_BRI_HALF = round((HUE_BRI_MAX - HUE_BRI_MIN + 1) / 2)
HUE_CT_MIN = 153
HUE_CT_MAX = 454
HUE_CT_HALF = round((HUE_CT_MAX - HUE_CT_MIN + 1) / 2)

HUE_API = 'http://`internalipaddress`/api/`username`/lights'

if __name__ == "__main__":
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    gyro = GYRO.GYRO()
    time.sleep(0.1)
    gyro.sensor_calib()

    #État d'éclairage de l'éclairage
    light_on = False
    prev_light_on = light_on

    light_bri = HUE_BRI_MIN + HUE_BRI_HALF
    light_ct = HUE_CT_MIN + HUE_CT_HALF


    while True:
        #Lire les valeurs des capteurs et les stocker dans les variables requises
        values = gyro.get_sense_value()
        axs_x = values[0]
        axs_y = values[1]
        # axs_z = values[2]
        # print('{0:4.2f}'.format(axs_x), end=",")
        # print('{0:4.2f}'.format(axs_y), end=",")
        # print('{0:4.2f}'.format(axs_z), end=",")

        # gyr_x = values[3]
        # gyr_y = values[4]
        gyr_z = values[5]
        # print('{0:4.2f}'.format(gyr_x), end=",")
        # print('{0:4.2f}'.format(gyr_y), end=",")
        # print('{0:4.2f}'.format(gyr_z), end=",")

        #Changer la tonalité de couleur à partir de l'inclinaison de l'axe X
        light_ct += axs_x * HUE_CT_HALF
        if light_ct < HUE_CT_MIN:
            light_ct = HUE_CT_MIN
        if light_ct > HUE_CT_MAX:
            light_ct = HUE_CT_MAX

        #Changer la luminosité de l'inclinaison de l'axe Y
        light_bri += axs_y * HUE_CT_HALF
        if light_bri < HUE_BRI_MIN:
            light_bri = HUE_BRI_MIN
        if light_bri > HUE_BRI_MAX:
            light_bri = HUE_BRI_MAX

        #Allumez l'éclairage lorsque la vitesse angulaire dans la direction Z dépasse le seuil/Contrôle OFF
        if gyr_z < -GYR_THRESHOLD:
            light_on = not light_on

        #Jeter à Hue
        if prev_light_on != light_on or light_on:
            requests.put(HUE_API + '/`light_id`/state', json = {"on": light_on, "bri": round(light_bri), "ct": round(light_ct)})
        
        # ON/OFF journal de confirmation
        if prev_light_on != light_on:
            print ('lignht_on:', light_on)

        prev_light_on = light_on

        time.sleep(0.10)

Le résultat de l'exécution sera la vidéo du début. Dans cet esprit, veuillez jeter un œil à nouveau.

Controlled Philips Hue by Raspberry Pi (with Gyroscope)

Mise en garde

Cette fois, il est lancé toutes les 0,1 secondes, mais veuillez prendre la responsabilité de la charge sur le réseau et le pont.

Résumé

Si vous le combinez de différentes manières, vous pourrez contrôler librement l'éclairage de la pièce. Aligner les lumières de la maison avec la série Hue peut être très amusant.

Recommended Posts

Classique de Noël (?) Éclairage d'un arbre de Noël avec Raspberry Pi et Philips Hue
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
Utiliser une webcam avec Raspberry Pi
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
Faire une boussole d'affichage kanji avec Raspberry Pi et Sense Hat
Surveillance des animaux avec Rekognition et Raspberry pi
[Raspberry Pi] Ajouter un thermomètre et un hygromètre
Faire une minuterie de lavage-séchage avec Raspberry Pi
Faites fonctionner l'oscilloscope avec le Raspberry Pi
Créez un compteur de voiture avec Raspberry Pi
Créez un convertisseur Ethernet LAN sans fil et un routeur simple avec Raspberry Pi
MQTT Radicon Car avec Arduino et Raspberry
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --2 introduction PHP
Compilation croisée de Raspberry Pi et création d'un environnement de développement de débogage à distance avec VS Code
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et créez un serveur Web ―― 1. Introduction à Apache
Création d'un système de contrôle de température avec tarte aux framboises et ESP32 (3) Réception d'un fichier Python
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
Création d'un environnement distribué avec la série Raspberry PI (Partie 3: Installation et configuration de dnsmasq)
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
Apprentissage automatique avec Raspberry Pi 4 et Coral USB Accelerator
Créez un capteur de couleur à l'aide d'une tarte à la râpe et d'une caméra
IoT facile pour démarrer avec Raspeye et MESH
GPGPU avec Raspberry Pi
Contrôlez la lecture de musique sur un smartphone connecté à Raspberry Pi 3 et Bluetooth avec AVRCP
Créez des serveurs sur Linux et des réseaux locaux avec Raspberry Pi NextCloud et le partage de bureau
Détecter l'état de port du masque avec OpenCV et Raspberry Pi
Mesurez la température et l'humidité avec Raspberry Pi3 et visualisez avec Ambient
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
DigitalSignage avec Raspberry Pi
Résoudre les problèmes liés à l'installation d'OpenCV sur Raspberry Pi et à la capture
Un mémorandum lors de la réalisation d'une caméra de surveillance avec Raspeye
Créez facilement un TweetBot qui vous informe de la température et de l'humidité avec Raspberry Pi + DHT11.
Introduction facile au piratage domestique avec Raspberry Pi et discord.py
Débutant Python s'ouvre et se ferme avec Raspberry Pi
Créez des jeux LCD (16x2) avec Raspberry Pi et Python
Production de système de contrôle de température avec tarte aux framboises et ESP32 (1)
Créez une partition, puis installez le système d'exploitation Raspberry Pi
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
Mesurez et comparez les températures avec Raspberry Pi et générez automatiquement des graphiques
getrpimodel: Reconnaître le modèle Raspberry Pi (A, B, B +, B2, B3, etc.) avec python
J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.
Plantes Mutter avec Raspberry Pi
Construire un environnement distribué avec la série Raspberry PI (Partie 2: Analyse PiServer et conception de système alternatif)
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
Faisons un ordinateur de vélo avec Raspberry Pi Zero (W, WH)
J'ai créé un serveur Web avec Razpai pour regarder des anime
Fabriquez un incubateur à CO2 simple à l'aide de Raspberry PI et d'un capteur de CO2 (MH-Z14A)
Affichage graphique de la consommation électrique des ménages avec 3GPI et Raspeye
[Remarque] Utilisation d'un écran LCD à 16 caractères à 2 chiffres (1602A) de Python avec Raspeye
[Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi
Utilisez vl53l0x avec RaspberryPi (python)
Commande de servomoteur avec Raspberry Pi
MQTT sur Raspberry Pi et Mac
Créer un arbre déterminé avec scikit-learn
Communication série avec Raspberry Pi + PySerial
Configuration du système d'exploitation avec Raspberry Pi Imager
Essayez L Chika avec raspberrypi