[PYTHON] Weihnachtsklassiker (?) Einen Weihnachtsbaum mit Raspberry Pi und Philips Hue anzünden

Dieser Artikel ist der Artikel zum 25. Tag von North Detail Adventskalender 2019.

Nachtrag 2020/04/02 Dieser Artikel wurde auch im NorthDetail-Blog veröffentlicht. https://www.northdetail.co.jp/blog/455/

Fröhliche Weihnachten! Der Adventskalender ist auch der letzte Weihnachtstag und Weihnachten ist eine Raspeltorte!

Am Ende des North Detail Adventskalenders 2019 möchte ich einen Mechanismus zur Steuerung der Lichter erstellen, die den Weihnachtsbaum mit Raspberry Pi beleuchten.

Video

Controlled Philips Hue by Raspberry Pi (with Gyroscope) Klicken Sie hier, um das Video auf YouTube anzusehen.

Durch Schütteln des am Raspberry Pi angebrachten Sensors kann das Licht ein- und ausgeschaltet und die Helligkeit und der Farbton durch Kippen eingestellt werden.

Was vorzubereiten?

Raspberry Pi

Sensor

Es ist in Ordnung, wenn Sie etwas vorbereiten können, das eine Neigung usw. erkennen kann. Verwenden Sie dies diesmal.

Hue

Licht

Dieses Mal habe ich (endlich) das, was ich gekauft habe, als Set verwendet, als ich "Echo Show" gekauft habe.

Brücke

Verwenden Sie eine Brücke, um Hue vom Raspberry Pi aus zu verbinden.

Da es sich bei der Bridge um einen Webserver handelt, können Sie die Kontrolle über Hue übernehmen, indem Sie eine HTTP-Anfrage vom Raspberry Pi an die Bridge senden.

Andere

Es ist eine übliche Vorsichtsmaßnahme für LED-Leuchten, unterscheidet sich jedoch hauptsächlich von Glühlampen in dem Teil, in dem Wärme vorhanden ist.

Glühlampen haben Wärme, die auf dem Filament des lichtemittierenden Teils zentriert ist, während LED-Lampen Wärme haben, die auf dem Sockelteil zentriert ist. Verwenden Sie daher bitte einen Ständer mit einer Struktur, die die Wärme um die Steckdose herum ordnungsgemäß ableitet.

Farbtoneinstellungen

Verwenden Sie zunächst die Smartphone-App, um das Licht auf der Brücke zu registrieren. Arbeiten Sie hier entsprechend der Verwendung der App.

Danach gehen wir davon aus, dass sich Bridge, Raspberry Pi und Work-PC alle im selben Netzwerk befinden.

Überprüfen Sie die IP-Adresse der Bridge

Sie müssen die IP-Adresse kennen, da Sie HTTP-Anforderungen an die Bridge senden. Dies kann durch Zugriff auf die folgende Adresse erreicht werden, wenn die Brücke richtig eingestellt ist.

https://discovery.meethue.com/

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

Diese "interne IP-Adresse" ist die IP-Adresse des aktuell verbundenen Netzwerks. Machen wir uns eine Notiz.

Benutzerregistrierung für die Brücke

Beim Betrieb von Raspberry Pi ist auf der Bridge eine eindeutige Benutzer-ID erforderlich. Wenn Sie nach dem Drücken der Schaltfläche (physisch) auf dem Bridge-Body eine HTTP-Anfrage in der folgenden Form stellen, wird "Benutzername" in die Antwort aufgenommen. Notieren Sie sich dies, da es in zukünftigen HTTP-Anforderungen verwendet wird.

Der Gerätetyp kann übrigens von Ihnen frei eingestellt werden.

POST http://`internalipaddress`/api

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

response.json


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

Holen Sie sich die ID des Lichts

Als nächstes erhalten Sie die ID des Lichts, das in der Brücke registriert ist, um das Licht zu betreiben.

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

response.json


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

Es werden viele Informationen zurückgegeben, aber die erste "1" ist die ID.

Werfen Sie die HTTP-Anfrage unten und das Licht sollte aufleuchten. (Wenn Sie "wahr" in "falsch" ändern, wird es ausgeschaltet.)

Ersetzen Sie "internalipaddress", "username" und "light_id" durch Ihre eigene.

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

body: {"on":true}

Raspberry Pi

Als nächstes folgt die Einstellung auf der Raspberry Pi-Seite. Für Raspberry Pi wird davon ausgegangen, dass WLAN verfügbar ist, während Raspbian bereits ausgeführt wird. Außerdem wird davon ausgegangen, dass der Sensor (ADRSZGR) bereits mit dem Raspberry Pi-Hauptgerät verbunden ist.

Sensor

Überprüfen Sie zunächst, ob Sie den Sensorwert erhalten können. Hier wird der Basisquellcode bereitgestellt, also verwenden wir ihn.

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

Lassen Sie es uns auf dem Raspberry Pi ausführen.

$ 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
Bewegen Sie den Sensor 10 Sekunden lang nicht
1 Sekunde übrig
Kalibrierung beendet
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,
(Da es unten weitergeht, Strg an einer geeigneten Stelle+Bei C. ausgesetzt)

Wenn der Wert so ausgegeben wird, ist er in Ordnung, da sich der Sensor bewegt.

Implementierung

Lassen Sie es uns nun implementieren, um die Sensorwerte zu verwenden, um die Lichter von Hue zu manipulieren. Die Basis GYRO.py steuert den gesamten Sensor, sodass Sie nur über die Verwendung der Werte nachdenken müssen.

Dieses Mal werden wir es mit einem Design implementieren, das sich beim Schütteln des Sensors ein- und ausschaltet und sich beim Neigen in Helligkeit und Farbton ändert.

Kopieren Sie die in der vorherigen Bestätigung verwendete ADRSZGR_Sample.py als index.py und verwenden Sie diese. Da ich normalerweise kein Python schreibe, werde ich es implementieren und dabei auf das Einrückungstal achten [^ 1].

[^ 1]: Es ist mein geprägtes Wort. https://speakerdeck.com/tacck/phpergawen-kitaipythonfalseikutukafalsekoto-pycon-mini-sapporo-2019-number-pyconsap?slide=18

Ich nahm verschiedene Anpassungen vor und entschied mich für den folgenden Code.

.
├── 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()

    #Beleuchtungszustand der Beleuchtung
    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:
        #Sensorwerte lesen und in erforderlichen Variablen speichern
        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=",")

        #Ändern Sie den Farbton von der Neigung der X-Achse
        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

        #Ändern Sie die Helligkeit von der Neigung der Y-Achse
        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

        #Schalten Sie die Beleuchtung ein, wenn die Winkelgeschwindigkeit in Z-Richtung den Schwellenwert überschreitet/Steuerung AUS
        if gyr_z < -GYR_THRESHOLD:
            light_on = not light_on

        #Nach Hue werfen
        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/AUS-Bestätigungsprotokoll
        if prev_light_on != light_on:
            print ('lignht_on:', light_on)

        prev_light_on = light_on

        time.sleep(0.10)

Das Ergebnis der Ausführung ist das Video am Anfang. In diesem Sinne schauen Sie bitte noch einmal.

Controlled Philips Hue by Raspberry Pi (with Gyroscope)

Hinweis

Dieses Mal wird es alle 0,1 Sekunden ausgelöst, aber bitte übernehmen Sie die Verantwortung für die Belastung des Netzwerks und der Bridge.

Zusammenfassung

Wenn Sie es auf verschiedene Arten kombinieren, können Sie die Beleuchtung im Raum frei steuern. Das Ausrichten der Hausbeleuchtung mit der Hue-Serie kann viel Spaß machen.

Recommended Posts

Weihnachtsklassiker (?) Einen Weihnachtsbaum mit Raspberry Pi und Philips Hue anzünden
Ich habe mit Python ein Weihnachtsbaum-Beleuchtungsspiel gemacht
Verwenden einer Webkamera mit Raspberry Pi
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 4 sichtbar
Erstellen Sie einen Kanji-Kompass mit Raspberry Pi und Sense Hat
Haustierüberwachung mit Rekognition und Raspberry pi
[Raspberry Pi] Fügen Sie ein Thermometer und ein Feuchtigkeitsmessgerät hinzu
Machen Sie einen Waschtrocknungs-Timer mit Raspberry Pi
Bedienen Sie das Oszilloskop mit dem Raspberry Pi
Erstellen Sie eine Auto-Anzeige mit Himbeer-Pi
Erstellen Sie mit Raspberry Pi einen WLAN-Ethernet-Konverter und einen einfachen Router
MQTT Radicon Car mit Arduino und Himbeere
Holen Sie sich Temperatur und Luftfeuchtigkeit mit DHT11 und Raspberry Pi
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 3 sichtbar
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --2 PHP Einführung
Cross-Compilieren von Raspberry Pi und Erstellen einer Remote-Debug-Entwicklungsumgebung mit VS Code
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver. 1. Apache-Einführung
Erstellen eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (3) Empfangen einer Python-Datei
[Für Anfänger] Ich habe mit Raspberry Pi einen menschlichen Sensor erstellt und LINE benachrichtigt!
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 3: Installieren und Konfigurieren von dnsmasq)
Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi
Maschinelles Lernen mit Raspberry Pi 4 und Coral USB Accelerator
Erstellen Sie einen Farbsensor mit einem Raspeltorte und einer Kamera
Einfaches IoT, um mit Raspeye und MESH zu beginnen
GPGPU mit Raspberry Pi
Steuern Sie die Musikwiedergabe auf einem Smartphone, das mit Raspberry Pi 3 und Bluetooth mit AVRCP verbunden ist
Erstellen Sie Server in Linux und lokalen Netzwerken mit Raspberry Pi NextCloud und Desktop-Sharing
Ermitteln Sie den Tragezustand der Maske mit OpenCV und Raspberry Pi
Messen Sie Temperatur und Luftfeuchtigkeit mit Raspberry Pi3 und visualisieren Sie mit Ambient
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
DigitalSignage mit Raspberry Pi
Fehlerbehebung bei der Installation von OpenCV auf Raspberry Pi und der Erfassung
Ein Memorandum bei der Herstellung einer Überwachungskamera mit Raspeye
Erstellen Sie mit Raspberry Pi + DHT11 ganz einfach einen TweetBot, der Sie über Temperatur und Luftfeuchtigkeit informiert.
Einfache Einführung in Home Hack mit Raspberry Pi und discord.py
Python-Anfänger öffnet und schließt die ineinandergreifende Kamera mit Raspberry Pi
Erstellen Sie LCD-Spiele (16x2) mit Raspberry Pi und Python
Herstellung eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (1)
Erstellen Sie eine Partition und installieren Sie Raspberry Pi OS
Ich habe einen Ressourcenmonitor für Raspberry Pi mit einer Tabelle erstellt
Messen und vergleichen Sie Temperaturen mit Raspberry Pi und generieren Sie automatisch Diagramme
getrpimodel: Erkennen Sie das Himbeer-Pi-Modell (A, B, B +, B2, B3 usw.) mit Python
Ich habe zum ersten Mal eine Überwachungskamera mit Raspberry PI gemacht.
Mutter pflanzt mit Raspberry Pi
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 2: PiServer-Analyse und alternatives Systemdesign)
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
Machen wir einen Fahrradcomputer mit Raspberry Pi Zero (W, WH)
Ich habe mit Razpai einen Webserver erstellt, um Anime zu schauen
Machen Sie einen einfachen CO2-Inkubator mit Raspberry PI und CO2-Sensor (MH-Z14A)
Grafische Darstellung des Stromverbrauchs im Haushalt mit 3GPI und Raspeye
[Hinweis] Verwenden eines 16x2-stelligen LCD-Zeichens (1602A) von Python mit Raspeye
[Raspberry Pi] Schrittmotorsteuerung mit Raspberry Pi
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Servomotorsteuerung mit Raspberry Pi
MQTT auf Raspberry Pi und Mac
Erstellen eines bestimmten Baums mit Scikit-Learn
Serielle Kommunikation mit Raspberry Pi + PySerial
Betriebssystem-Setup mit Raspberry Pi Imager
Probieren Sie L Chika mit Himbeerpi