Índice:

Projeto IoT School Philips Hue: 19 etapas
Projeto IoT School Philips Hue: 19 etapas

Vídeo: Projeto IoT School Philips Hue: 19 etapas

Vídeo: Projeto IoT School Philips Hue: 19 etapas
Vídeo: How to Build a Massive LED Wall on a Budget 2024, Novembro
Anonim
Projeto IoT School Philips Hue
Projeto IoT School Philips Hue

Este é um manual que tive que escrever para a escola. Não está completo e não tenho certeza se você pode usá-lo. Meu conhecimento de APIs é o mínimo. Queríamos fazer um espelho interativo com luzes na parte de trás que reagissem ao clima, luz de fora, etc.

Eu vi como eu poderia programar uma lâmpada Philips Hue com um Arduino. Nisto, eu explico todos os meus passos e o quão longe eu vim. Não consegui programar o Hue com o Arduino, mas acho que é um bom começo.

Eu precisava disso: um Arduino, uma lâmpada hue, uma conta de desenvolvedor Philips Hue

Fontes: https://www.developers.meethue.com/documentation/g…https://github.com/bsalinas/ArduinoHuehttps://arduino-esp8266.readthedocs.io/en/latest/e…https:// www.makeuseof.com/tag/control-philips-hue-…

Etapa 1: começar

Antes de acessar a documentação da API, você precisa se registrar como desenvolvedor. É gratuito, mas você precisa aceitar os termos e condições. Você pode fazer um aqui>

Etapa 2: aplicativo Hue

Baixe o aplicativo oficial Philips Hue. Conecte seu telefone à rede em que deseja que a ponte Hue esteja ativada.

Etapa 3: conectar a ponte

Conecte sua bridge com sua rede e esteja funcionando corretamente. Teste se o aplicativo do smartphone pode controlar as luzes na mesma rede. Tem que estar na mesma rede Wi-Fi.

Etapa 4: Endereço IP

Em seguida, você precisa descobrir o endereço IP da ponte em sua rede. Pressione o link para se conectar à ponte no aplicativo e tente controlar as luzes.

Etapa 5:

Se tudo estiver funcionando, vá para o menu de configurações no aplicativo. Em seguida, vá para “Minha ponte”, vá para “Configurações de rede”. Desligue a chave DHCP e você verá o endereço IP da ponte. Anote o endereço IP e ligue o DHCP novamente.

Etapa 6: depure seu matiz

Depure o seu matiz
Depure o seu matiz

Quando você escreveu isso, você precisa depurar seu Hue. Você precisa do endereço IP para esta etapa. Você tem que visitar o próximo site.

/debug/clip.html

A interface ficará assim na imagem. Esta é a base de todo o tráfego da web e da interface Hue RESTful.

Recebi essas informações sobre a interface Restful do site Philips Hue.

URL: este é realmente o endereço local de um recurso específico (coisa) dentro do sistema de matiz. Pode ser uma luz, um grupo de luzes ou muitas outras coisas. Este é o objeto com o qual você estará interagindo neste comando.

Um corpo: esta é a parte da mensagem que descreve o que você deseja mudar e como. Aqui você insere, no formato JSON, o nome do recurso e o valor que deseja alterar / adicionar.

Um método: aqui você tem uma escolha entre os 4 métodos HTTP que a chamada hue pode usar.

GET: este é o comando para buscar todas as informações sobre o recurso endereçado

PUT: este é o comando para modificar um recurso endereçado

POST: este é o comando para criar um novo recurso dentro do recurso endereçado

EXCLUIR: este é o comando para excluir o recurso endereçado. Resposta: Nesta área, você verá a resposta ao seu comando. Também em formato JSON.

Etapa 7: vamos começar

Vamos começar
Vamos começar

Agora precisamos de um nome de usuário gerado aleatoriamente que a ponte cria para você. Você obterá um preenchendo isto.

Coloque o URL:

/ api /

Coloque no CORPO:

e pressione GET

Este comando está basicamente dizendo "por favor, crie um novo recurso dentro de / api" (onde estão os nomes de usuário) com as seguintes propriedades. A princípio, você obterá um erro, porque é a etapa de segurança do Philips Hue. Ao pressionar o botão, eles comprovam que você tem acesso físico à ponte.

Etapa 8:

Imagem
Imagem

Agora pressione o botão no Bridge e clique em POST novamente.

Agora você receberá um nome de usuário que a ponte criou para você.

Etapa 9: vamos fazer algo com as luzes

Vamos fazer algo com as luzes
Vamos fazer algo com as luzes

Copie seu nome de usuário e coloque-o na linha a seguir.

Coloque isso no seu URL

/ api / / lights

Pressione GET

Você deve obter uma resposta JSON com todas as luzes em seu sistema e seus nomes.

Etapa 10:

Imagem
Imagem

Peguei emprestado algumas luzes de matiz da escola, a que uso é a que tem id 3. Quero informações específicas sobre esta luz.

Coloque ao lado do URL que você já tinha:

/ api / / lights / 3

Pressione GET

Agora você obtém todas as informações sobre o Led 3 (se você tiver outro número como 1, verá as informações sobre aquele).

Etapa 11: vamos controlar a luz

Vamos controlar a luz
Vamos controlar a luz

Você vê no "estado" que meu led está "ligado". Queremos controlar a luz no "estado".

Coloque ao lado do URL que você já tinha: https:// / api / / lights / 3 / state

Coloque a próxima linha no CORPO

Pressione PUT

Agora sua luz vai se apagar! Altere o valor no corpo para verdadeiro e a luz acenderá novamente.

Etapa 12:

Agora que tudo está funcionando, quero fazer isso com meu Arduino. Eu olhei para o link que Philips Hue deu para fazer a mudança de cor da luz. Mas você precisa do Python para isso, nunca trabalhei com Python, então procurei outra coisa.

Se você gosta de olhar este código, tenho o link do Github aqui:

github.com/bsalinas/ArduinoHue

Etapa 13:

Procurei como poderia obter informações deste site de desenvolvedor para o meu arduino. Na maioria das vezes eu não entendia o idioma. Mas eu encontrei um código em um site de James Bruce.

Este é o link para o site.

www.makeuseof.com/tag/control-philips-hue-lights-arduino-and-motion-sensor/

Etapa 14:

Primeiro vi que ele estava usando um cabo Ethernet. Eu só tinha uma lâmpada Hue Light e um Arduino, e pouco conhecimento de código. Demorou um pouco para eu entender seu código, mas ainda não o entendo de verdade.

Eu adicionei esta biblioteca pela primeira vez para a internet.

#incluir

Isso é para sua rede (tem que ser igual à lâmpada de matiz)

const char * ssid = ""; // coloque aqui sua rede WiFi SSIDconst char * password = ""; // coloque aqui sua senha de rede WiFi

Estes são o ID de sua ponte e o nome de usuário que sua ponte lhe deu. (Não sei o que significa 80, mas quando fiz algumas pesquisas vi que era usado para redes).

// Constantes de matiz const char hueHubIP = ""; // Hue hub IP const char hueUsername = ""; // Hue username const int hueHubPort = 80;

// Variáveis de matiz bool hueOn; // liga / desliga int hueBri; // valor do brilho long hueHue; // valor de matiz String hueCmd; // Comando Hue

buffer longo sem sinal = 0; // buffer para armazenamento de dados recebidos unsigned long addr;

Etapa 15:

Para a configuração do void, fiz o máximo para a conexão com a internet. Nesse código, o Arduino está procurando se consegue se conectar com a rede.

void setup () {Serial.begin (9600);

Serial.println ();

Serial.printf ("Conectando a% s", ssid);

WiFi.begin (ssid, senha);

enquanto (WiFi.status ()! = WL_CONNECTED) {

atraso (500);

Serial.print ("."); }

Serial.println ("conectado"); }

Etapa 16:

No loop de James, vi que ele tinha uma declaração If e else. Mas isso era para o cabo Ethernet, então tentei deixar isso de fora. Eu também tentei ajustar algumas vezes, mas ainda não sabia com muitos dados. Algumas coisas no código que eu entendi, na string estão os dados que são fornecidos para a luz Hue.

void loop () {

// Uma série de quatro comandos de amostra, cuja cor esmaece duas luzes entre vermelho e rosa. Leia a documentação da API do Hue // para obter mais detalhes sobre os comandos exatos a serem usados, mas observe que as aspas devem ser evitadas.

String command = "{" on / ": true, \" hue / ": 50100, \" sat / ": 255, \" bri / ": 255, \" tempo de transição / ":" + String (aleatório (15, 25)) + "}"; setHue (1, comando);

command = "{" on / ": true, \" hue / ": 65280, \" sat / ": 255, \" bri / ": 255, \" tempo de transição / ":" + String (aleatório (15, 25)) + "}"; setHue (2, comando);

comando = "{" matiz / ": 65280, \" sat / ": 255, \" bri / ": 255, \" tempo de transição / ":" + String (aleatório (15, 25)) + "}"; setHue (1, comando);

comando = "{" matiz / ": 50100, \" sat / ": 255, \" bri / ": 255, \" tempo de transição / ":" + String (aleatório (15, 25)) + "}"; setHue (2, comando);

}

Etapa 17:

O próximo código foi um Booleano, mas no Arduino você deve escrever Bool. No início, recebi muitos erros por causa da palavra cliente. Então eu olhei e vi que algum código usava a linha "WifiClient client;". Então eu usei e funcionou.

Na instrução if, você costuma ver client.print. Se você olhar o código, verá que o URL inserido anteriormente está dividido em partes. Agora insira seu próprio código. Tive que escolher minha terceira luz LED.

/ * setHue () é nossa função de comando principal, que precisa receber um número leve e uma * string de comando formatada corretamente no formato JSON (basicamente uma matriz de variáveis * e valores no estilo Javascript. Em seguida, faz uma solicitação HTTP PUT simples para a ponte no IP especificado no início. * /

bool setHue (int lightNum, comando String) {

Cliente WiFiClient;

if (client.connect (hueHubIP, hueHubPort)) {

while (client.connected ()) {

client.print ("PUT / api /"); client.print (hueUsername); client.print ("/ lights /"); client.print (lightNum); // hueLight baseado em zero, adicione 1 client.println ("3 / state"); // aqui eu mudei o nome do matiz e stateclient.print ("Host:"); client.println (hueHubIP); client.print ("Content-Length:"); client.println (command.length ()); client.println ("Content-Type: text / plain; charset = UTF-8"); client.println (); // linha em branco antes do corpo client.println (command); // Comando Hue

} client.stop (); return true; // comando executado}

senão retorna falso; // comando falhou}

Etapa 18:

No segundo booleano, fiz a mesma coisa mudando algumas palavras. Eu carreguei para ver se funcionou.

/ * Uma função auxiliar caso sua lógica dependa do estado atual da luz. * Isso define uma série de variáveis globais que você pode verificar para descobrir se uma luz está acesa ou não * e o matiz etc. Não é necessário apenas para enviar comandos * /

bool getHue (int lightNum) {

Cliente WiFiClient;

if (client.connect (hueHubIP, hueHubPort)) {

client.print ("GET / api /"); client.print (hueUsername); client.print ("/ lights /"); client.print (lightNum); client.println ("3 / estado"); client.print ("Host:"); client.println (hueHubIP); client.println ("Tipo de conteúdo: aplicativo / json"); client.println ("keep-alive"); client.println ();

while (client.connected ()) {if (client.available ()) {client.findUntil ("\" on / ":", "\ 0"); hueOn = (client.readStringUntil (',') == "true"); // se a luz estiver acesa, defina a variável como true client.findUntil ("\" bri / ":", "\ 0"); hueBri = client.readStringUntil (',').toInt (); // define a variável para o valor de brilho client.findUntil ("\" hue / ":", "\ 0"); hueHue = client.readStringUntil (',').toInt (); // define a variável para o valor de matiz break; // ainda não está capturando outros atributos de luz}} client.stop (); return true; // capturado em, bri, hue} else return false; // erro ao ler, bri, hue}

Etapa 19:

Imagem
Imagem

Acho que poderia fazer uma conexão com o Philips Hue. Recebo informações, mas ainda precisam ser usadas.

Infelizmente, isso vai além do que posso codificar. Se você souber a resposta ou se houver erros reais que precisam ser corrigidos, eu adoraria ouvir.:-)

Recomendado: