Comment contrôler les feux de teinte philips d`un arduino (et ajouter un capteur de mouvement)

La gamme de lampes Philips Hue ne sont certainement pas pas cher (il y a des solutions de rechange), Mais une chose que j`apprécie vraiment est bien documenté API

pour faire vos propres applications de Hue. Aujourd`hui, je vais vous montrer comment contrôler vos lumières de Hue à partir d`un Arduino - puis en ajoutant un simple capteur de mouvement.Philips Hue Alternatives qui sont en fait Worth ItPhilips Hue Alternatives qui sont en fait Worth ItLe système Philips Hue mène la charge en matière de smart éclairage, mais il y a des solutions de rechange dignes. Nous avons choisi trois que tous offrent le même ensemble de fonctionnalités de base et hackabilité.Lire la suite

Pourquoi fait-on ça? Parce que les systèmes de domotique peut être assez rigide et coûteux. En apprenant comment contrôler la teinte de Arduino, vous ouvrez les portes à une variété de projets d`automatisation de la maison sur mesure qui ne peut simplement pas être battus par des composants impromptu. Si les choses de piratage ensemble est tout simplement pas votre truc, essayez ces 8 applications fabuleux de Hue au lieu.

Le système Hue

Obtenons technique pour un peu de sorte que vous saurez les systèmes sous-jacents avec lesquels vous travaillez. lumières Hue créer un réseau maillé, en utilisant un protocole sans fil à courte portée appelée ZigBee - en particulier, ils sont certifiés ZigBee Light Link, ce qui signifie que d`autres produits ZLL devraient également travailler aux côtés de la teinte (en théorie).Mesh Networks: L`avenir de la communicationMesh Networks: L`avenir de la communicationLes réseaux de maille sont presque invulnérables. Dans un réseau maillé, il n`y a pas de points d`étranglement à travers lequel tout le trafic passe. , L`information est passée au lieu d`un appareil à l`autre jusqu`à ce qu`il atteigne sa destination.Lire la suite

Bien que techniquement gamme courte, la fonction de réseau de maillage de ZigBee signifie que chaque nouvelle ampoule étend le réseau, relayant des messages à d`autres ampoules. Cela signifie que si vous éprouvez des difficultés à contrôler une lumière de l`autre côté de la maison, essayez de placer une autre lumière entre les deux.

ZigBee est un protocole, mais il est tout à fait différent de Wi-Fi ou un réseau informatique filaire, donc nous avons besoin du Philips Hue Bridge pour rejoindre les deux ensemble. Le pont Hue exécute un firmware Linux open source modifiée, qui diffuse un serveur Web de base.

Voici ce que vous`ll see if you just type in the IP address of your Hue bridge into your browser. You can`t do much from here though.
Voici ce que vous verrez si vous tapez l`adresse IP de votre pont Hue dans votre navigateur. Vous ne pouvez pas faire grand-chose d`ici cependant.

Il est en interaction avec ce serveur web local que vous pouvez connaître l`état actuel des lumières, et de les contrôler.

Il est un système merveilleusement simple et mûr pour les projets de bricolage. Kudos à Philips pour faire cette chose si piratable.

Commençant

Avant de pouvoir accéder à la documentation de l`API, vous devez vous enregistrer en tant que développeur. Il est gratuit, mais vous devez accepter les termes et conditions. Pour ce faire, maintenant.

Tous ceux qui connaissent les services Web standard ou javascript doit être capable de travailler avec la teinte: toutes les données sont transmises et reçues comme paquets JSON.Qu`est-ce que JSON? Présentation d`un LaymanQu`est-ce que JSON? Présentation d`un LaymanQue vous prévoyez d`être un développeur web ou non, il est une bonne idée de savoir au moins ce qui est JSON, pourquoi il est important, et pourquoi il est utilisé partout dans le web.Lire la suite

Pour jeter un oeil à cela en action, vous aurez besoin de connaître l`adresse IP de votre pont Hue. Il y a quelques façons de le faire:

  • Regardez le tableau d`attribution d`adresse DHCP dans l`interface d`administration de votre routeur
  • Exécuter un programme de cartographie de réseau IP comme Home Scanner
  • Essayez l`outil de courtier UPnP Philips
  • Ping « philips-hue.home »

cartographie du réseau pour trouver le pont

Lorsque vous avez terminé, allez-y et tapez dans la barre d`adresse du navigateur avec debug / clip.html ajouté à l`URL. Dans mon cas, ce fut:

http://192.168.1,216/déboguer/agrafe.html

Ceci est un outil de débogage qui vous permet envoyez et recevez les paquets JSON via une interface web simple. La première étape consiste à activer le profil de développeur sur le pont lui-même Hue - qui est désactivé par défaut pour des raisons de sécurité. Collez le texte suivant dans le champ BODY, laisser l`URL comme / Api /, et envoyer une requête POST en cliquant sur le bouton poste:

Video: Philips HUE Motion Sensor - le détecteur de mouvement

{"type d`appareil":"utilisateur test","Nom d`utilisateur":"newdeveloper"}

La première fois que vous faites cela, vous verrez un « bouton de lien non pressé » quelque part dans la réponse. Ceci est une caractéristique de sécurité qui exige que chaque nouvelle application que vous utilisez pour être autorisé physiquement. Allez trouver votre Bridge, appuyez sur le bouton, et envoyer à nouveau la même demande dans les 30 secondes. Cette fois, vous aurez une réponse différente, et l`utilisateur sera autorisé. Si vous souhaitez utiliser un autre nom d`utilisateur, lisez l`API docs sur la création d`utilisateurs. Pour l`instant, cela suffit.

Une fois que votre utilisateur est configuré, l`URL de base que vous devez interagir avec devient / Api / newdeveloper / . Vous pouvez envoyer une requête GET pour découvrir tout ce que votre pont connaît actuellement sur les lumières, les alarmes, raccordé sur le raccordement des scènes, et un court journal d`applications qui ont été utilisés. Voici un exemple de certaines des informations d`état contenu pour une seule ampoule.

"Etat": {"sur": vrai,"bri": 254,"teinte": 14910,"sam": 144,"effet": "aucun","xy": [0,4596,0,4105],"ct": 369,"alerte": "aucun","mode de couleur": "ct","accessible": faux},"type": "lumière de couleur étendue","prénom": "chambre 1","modelID": "LCT001",

A noter que le « On »: true État ne montre pas réellement vous si l`ampoule est allumée ou sans but seulement en fonction des paramètres de pont, il devrait être sur. « Accessible »: false peut indiquer à la fois une ampoule qui est trop loin, ou tout simplement mis hors tension à l`interrupteur d`alimentation.

Video: Tutoriel | Arduino et capteur de niveau sonore | HD Français

Un dernier exemple avant de l`intégrer dans l`Arduino: assurez-vous que l`un de vos lumières est visible et, et que vous savez que le nombre est. Modifier l`URL / Api / newdevelopers / lumières / 1 / Etat (Changer le numéro à votre lumière), et envoyer une demande PUT avec les données suivantes:

{"teinte": 50100,"sam":255,"bri":255}

Vous devriez voir votre lumière réagit comme ceci:

demo teinte

Ce que vous avez fait est de pousser un nouvel état à l`ampoule. Vous pouvez également ajouter « transitiontime », qui est une méthode d`animation primitive indiquant le nombre de secondes que vous souhaitez que le changement prenne de l`État.

La couleur peut être réglée dans un certain nombre de façons différentes, mais malheureusement, il n`y a aucun moyen simple d`envoyer une valeur RVB. Dans l`exemple ci-dessus, nous avons envoyé teinte, samuration et brinos té. Essayez de changer la valeur de teinte et d`envoyer à nouveau la demande de PUT.

Travail à Arduino

Il y a une bibliothèque Hue / Arduino existante appelée ArduinoHue qui Philips se lien dans la documentation de l`API, mais le problème avec cette bibliothèque est qu`il communique via la connexion USB à votre PC, qui doit également être en cours d`exécution d`une application Python constamment. EUGH. Vous pouvez tout aussi bien laisser votre ordinateur exécuter toute la chose à ce moment-là, et découper entièrement l`Arduino.

Au lieu de cela, je vais vous montrer comment contrôler la teinte de l`Arduino l`utilisation d`un blindage Ethernet. Votre Arduino n`a pas besoin d`être connecté à un ordinateur, il peut donc fonctionner indépendamment partout où vous pouvez mettre un câble Ethernet. En fait, il devrait également fonctionner avec un écran Wi-Fi, mais je n`ai pas un à jouer.

ehternet-sheild-box

Si vous souhaitez passer directement, le code de l`échantillon complet est intégré ci-dessous, ou ici. Je l`ai adaptèrent à partir d`un exemple posté par Gilson Oguime. Si vous ne l`avez jamais joué avec votre bouclier Ethernet avant, vous voudrez peut-être d`avoir une course rapide à travers le tutoriel client Web - je suppose un certain niveau de familiarité avec cela, et ne couvrira pas le code utilisé pour établir un réseau IP etc. Nous avons également montré que vous comment créer un mini-serveur Web avec le bouclier Ethernet.Donnez votre projet Arduino son propre mini-serveur Web, avec un bouclier EthernetDonnez votre projet Arduino son propre mini-serveur Web, avec un bouclier EthernetIl y a quelque temps, je vous ai montré comment configurer un système de contrôle d`Internet pour votre Arduino - mais il a dû rester connecté à un ordinateur via USB afin de maintenir la connexion internet ....Lire la suite

/ *
Parler à Hue à partir d`un Arduino
James Bruce (MakeUseOf.com)
Adapté à partir du code par Gilson Oguime. https://github.com/oguime/Hue_W5100_HT6P20B/blob/master/Hue_W5100_HT6P20B.ino
* /
#comprendre
#comprendre
// constantes Hue
const char hueHubIP [] = "192.168.1.216"- // hub IP Hue
const char hueUsername [] = "newdeveloper"- // nom d`utilisateur Hue
const int hueHubPort = 80-
// PIR
int pir = 2-
boolean activée = faux-
// Variables Hue
booléen hueOn- // on / off
int hueBri- // valeur de luminosité
longue hueHue- // valeur de teinte
Chaîne hueCmd- // commande Hue
tampon unsigned long = 0 // tampon pour le stockage de données reçu
addr- unsigned long
// Ethernet
octet mac [] = {0x74,0x69,0x69,0x2D, ​​0x30,0x31} - // W5100 adresse MAC
IPAddress ip (192,168,1,2) - // Arduino IP
EthernetClient client-
/ *
Installer
* /
void setup()
{
Serial.begin (9600) -
Ethernet.begin (mac, ip) -
pinMode (pir, INPUT) -
retard (2000) -
Serial.println ("Prêt.") -
}
void loop ()
{
if (digitalRead (pir) == 1) {
Serial.println ("activé") -
// Une série de quatre commandes d`échantillons, dont la couleur se fane entre deux lumières rouge et rose. Renseignez-vous sur l`API Hue
// documentation pour plus de détails sur les commandes exactes à utiliser, mais notez que les guillemets doivent être échappés.
commande String = "{"sur": vrai,"teinte": 50100, "sam": 255, "bri ": 255, "temps de transition":"+ String (aléatoire (15,25)) +"}"-
setHue (1, commande) -
command = "{"sur": vrai,"teinte": 65280, "sam": 255, "bri ": 255, "temps de transition":"+ String (aléatoire (15,25)) +"}"-
setHue (2, commande) -
command = "{"teinte": 65280, "sam": 255, "bri ": 255, "temps de transition":"+ String (aléatoire (15,25)) +"}"-
setHue (1, commande) -
command = "{"teinte": 50100, "sam": 255, "bri ": 255, "temps de transition":"+ String (aléatoire (15,25)) +"}"-
setHue (2, commande) -
// afin que nous puissions suivre l`état
activé = vrai-
}
autre{
activé = faux-
Serial.println ("désactivé") -
// a été activé, alors envoyer une seule commande off
commande String = "{"sur": faux}"-
setHue (1, commande) -
setHue (2, commande) -
}
}
/ * SetHue () est notre principale fonction de commande, qui doit être adopté un certain nombre de lumière et un
* Correctement chaîne de commande formaté au format JSON (essentiellement un tableau de style de variables javascript
* Et les valeurs. Il fait alors une simple requête HTTP PUT du pont à l`adresse IP spécifiée au début.
* /
setHue booléen (int lightNum, commande String)
{
if (client.connect (hueHubIP, hueHubPort))
{
tandis que (client.connected ())
{
client.print ("PUT / api /") -
client.print (hueUsername) -
client.print ("/lumières/") -
client.print (lightNum) - // hueLight base zéro, ajoutez 1
client.println ("/ HTTP / 1.1 État") -
client.println ("rester en vie") -
client.print ("Hôte: ") -
client.println (hueHubIP) -
client.print ("Content-Length: ") -
client.println (command.length ()) -
client.println ("Content-Type: text / plain-charset = UTF-8") -
client.println () - // ligne vide avant le corps
client.println (commande) - // commande Hue
}
client.stop () -
// retour vrai- commande exécutée
}
autre
// retour faux- commande a échoué
}
/ * Une fonction d`aide dans le cas où votre logique dépend de l`état actuel de la lumière.
* Ceci définit un certain nombre de variables globales que vous pouvez vérifier pour savoir si une lumière est actuellement ou non
* Et la teinte, etc. Pas besoin juste d`envoyer des commandes
* /
boolean getHue (int lightNum)
{
if (client.connect (hueHubIP, hueHubPort))
{
client.print ("GET / api /") -
client.print (hueUsername) -
client.print ("/lumières/") -
client.print (lightNum) -
client.println (" HTTP / 1.1") -
client.print ("Hôte: ") -
client.println (hueHubIP) -
client.println ("Content-Type: application / JSON") -
client.println ("rester en vie") -
client.println () -
tandis que (client.connected ())
{
if (client.available ())
{
client.findUntil (""sur":", " 0") -
hueOn = (client.readStringUntil ( ``) == "vrai") - // si la lumière est variable définie sur true
client.findUntil (""bri ":", " 0") -
hueBri = client.readStringUntil ( ``) toInt () -. // grandeur réglée sur la valeur de luminosité
client.findUntil (""teinte":", " 0") -
Huehue = client.readStringUntil ( ``) toInt () -. // set variable à la valeur teinte
// capture pas percée d`autres attributs encore la lumière
}
}
client.stop () -
retour vrai- // capturé sur, bri, teinte
}
autre
// retour faux- erreur de lecture sur, bri, teinte
}
voir rawControl Philips Hue Arduino Ethernet Shieldhosted avec ❤ par GitHub

Changements Création d`État

Création d`un nouvel état pour pousser les ampoules est un cas simple de créer une nouvelle Chaîne variable et échapper à tous les guillemets doubles. J`ai ajouté au hasard() fonction là aussi pour créer une animation quelque peu dynamique. Essayez de faire la variable trop aléatoire teinte pour des couleurs différentes.

commande String = "{"sur":vrai,"teinte": 50100, "sam": 255, "bri ": 255, "temps de transition":"+Chaîne(au hasard(15,25))+"}"-

Envoi de la commande

Pour envoyer effectivement la commande, vous avez une fonction d`assistance appelée setHue () qui prend le numéro de la lumière et la chaîne de commande comme argument, comme suit:

setHue(1,commander)-

Tout ce qu`il fait est-il alors se connecte au pont, recrache la commande comme une demande de PUT, ainsi que tous les autres non-sens que la création d`une requête HTTP implique.

client.impression("PUT / api /")-client.impression(hueUsername)-client.impression("/lumières/")-client.impression(lightNum)-client.println("/ HTTP / 1.1 État")-client.println("rester en vie")-client.impression("Hôte: ")-client.println(hueHubIP)-client.impression("Content-Length: ")-client.println(commander.longueur())-client.println("Content-Type: text / plain-charset = UTF-8")-client.println()- // ligne vide avant le corpsclient.println(commander)- // commande Hue

Ajout d`un capteur de mouvement

Enfin, je télégraphié un simple capteur de mouvement HC-SR501 à la broche E / S numérique 2. Lorsque mouvement est détecté, une série d`états sont poussés vers le pont pour 2 ampoules pour créer une animation dynamique lente,. Lorsque le capteur de mouvement se désactive, une seule commande hors tension est envoyée à la fois. Dans l`idéal, ils seraient revenus à l`état où ils étaient avant le mouvement a été détecté, mais la logique est pas intelligent - nous allons juste les allumer et éteindre.

Limites

Bien que le code unoptimized certes, il faut presque une seconde pour l`interface réseau de l`Arduino d`envoyer une seule requête de commande. Je l`ai testé la même commande à partir d`un Mac, en utilisant la même connexion Ethernet, et il était capable de dix à vingt fois que la vitesse (voici le AppleScript au cas où vous souhaitez tester). Par conséquent, toute sorte d`animation rapide (je tentais de créer un effet bougie vacillante) est tout simplement impossible d`un Arduino. Cela ne devrait pas être un problème pour la plupart des projets, juste pour des animations de lumière à haute vitesse, mais il est bon d`être au courant de la limitation.

Il est également difficile d`analyser complètement toute réponse JSON vous revenez du pont- il ne suffit pas de RAM sur l`Arduino pour stocker toutes les données brutes. Pour cette raison, vous voudrez peut-être limiter la plupart du temps vous à envoyer.

Hack the Hue

Maintenant que vous êtes armé avec la connaissance de la façon de contrôler Hue totalement indépendante, elle ouvre un monde de Hue hacks domotique. La vraie question est: qu`allez-vous faire?

Articles connexes