NodeMCU ESP8266 - Philips Hue lamp
4 berichten
• Pagina 1 van 1
NodeMCU ESP8266 - Philips Hue lamp
Goedendag!
Ik ben begonnen met een project met ESP8266 (mijn eerste project).
Wat ik wil doen is het volgende. Ik wil een wandschakelaar aansluiten op de ESP8266, om een Philips Hue lamp te schakelen. Elke keer als de wandschakelaar in een andere stand wordt gezet, wil ik de status van de lamp veranderen (is de lamp aan, dan uitzetten en andersom).
Mijn idee is om de ground en pin1 aan de wandschakelaar te verbinden. Afhankelijk van de status van de wandschakelaar, wordt pin1 dan met de ground verbonden.
De code die ik gebruik is:
Om te testen of het werkt, voordat ik het aansluit op de wandschakelaar, heb ik de Ground met pin 1 verbonden. Als ik dat doe, blijft de status van de lamp constant wisselen (lamp gaat continue aan/uit). Terwijl mijn verwachting is dat de stand van de lamp maar 1 keer veranderd.
Het lijkt erop dat de code goed is, maar dat ik de electronica niet goed aansluit. Wie kan me op weg helpen?
Alvast bedankt!
Ik ben begonnen met een project met ESP8266 (mijn eerste project).
Wat ik wil doen is het volgende. Ik wil een wandschakelaar aansluiten op de ESP8266, om een Philips Hue lamp te schakelen. Elke keer als de wandschakelaar in een andere stand wordt gezet, wil ik de status van de lamp veranderen (is de lamp aan, dan uitzetten en andersom).
Mijn idee is om de ground en pin1 aan de wandschakelaar te verbinden. Afhankelijk van de status van de wandschakelaar, wordt pin1 dan met de ground verbonden.
De code die ik gebruik is:
- Code: Alles selecteren
#include <ESP8266WiFi.h>
#include <SPI.h>
// Wifi Settings
const char* ssid = "xxx";
const char* password = "xxx";
// Hue Settings
const char hueHubIP[] = "xxx"; // Hue Bridge IP
const int hueHubPort = 80;
const char hueUsername[]="xxx"; // Hue Bridge user -To create a user check this page (http://support.intuilab.com/kb/connecte ... hue-lights)
String light="1";
// Commands
String hue_on="{\"on\":true}";
String hue_off="{\"on\":false}";
boolean state = false; // for monitoring switch state changes
boolean previousState; // ditto
boolean onOffState = false; // To store actual on/off state of light as reported by Hue bridge
int switchPin = 5; // -- control sense pin, mapped to D1 on NodeMCU
WiFiClient client;
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // Initialize LED_BUILTIN pin as output
Serial.begin(9600);
pinMode(switchPin, INPUT_PULLUP); // pin will be pulled low by grounding load terminal on switch
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
//WiFi.config(ip, gateway, subnet);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
previousState = digitalRead(switchPin); // for checking for state change
digitalWrite(LED_BUILTIN, HIGH); // HIGH = Turn the LED off
Serial.println("State Switch:");
Serial.println(previousState);
}
void loop() {
state = digitalRead(switchPin); // for checking for state change
if (state != previousState) // state change
{
previousState == state;
getHue();
delay(500);
if (onOffState == true) // If lights are on, send "Off" command
{
Serial.println("");
Serial.print("Switch lamp off");
String command = "{\"on\": false}";
setHue(command);
digitalWrite(LED_BUILTIN, LOW); // LOW = Turn the LED on (opposite of Arduino)
}
else // If lights are off, send "On" command
{
Serial.println("");
Serial.print("Switch lamp on");
String command = "{\"on\": true}";
setHue(command);
digitalWrite(LED_BUILTIN, HIGH); // HIGH = Turn the LED off
}
}
}
void setHue(String command)
{
if (client.connect(hueHubIP, hueHubPort))
{
client.print("PUT /api/");
client.print(hueUsername);
client.print("/lights/");
client.print(light);
client.println("/state HTTP/1.1");
client.println("keep-alive");
client.print("Host: ");
client.println(hueHubIP);
client.print("Content-Length: ");
client.println(command.length());
client.println("Content-Type: text/plain;charset=UTF-8");
client.println(); // Blank line before body
client.println(command);
client.stop();
}
}
void getHue()
{
if (client.connect(hueHubIP, hueHubPort))
{
client.print("GET /api/");
client.print(hueUsername);
client.print("/lights/");
client.print(light);
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(hueHubIP);
client.println("Content-type: application/json");
client.println("keep-alive");
client.println();
while (client.connected())
{
if (client.available())
{
client.findUntil("\"on\":", "\0");
onOffState = (client.readStringUntil(',') == "true");
break;
}
}
client.stop();
}
}
Om te testen of het werkt, voordat ik het aansluit op de wandschakelaar, heb ik de Ground met pin 1 verbonden. Als ik dat doe, blijft de status van de lamp constant wisselen (lamp gaat continue aan/uit). Terwijl mijn verwachting is dat de stand van de lamp maar 1 keer veranderd.
Het lijkt erop dat de code goed is, maar dat ik de electronica niet goed aansluit. Wie kan me op weg helpen?
Alvast bedankt!
Advertisement
Re: NodeMCU ESP8266 - Philips Hue lamp
zet eens een delay net na het opvragen van de digitalread, want nu gaat het allemaal erg snel natuurlijk.of pak een 10 kiloohm weerstand en zet die aan de 3.3 Volt, en wat gebeurt er met de LED blijft die wel goed? dan heb je een fout in het aansturen doe er maar eens een paar delays tussen want het gaat allemaal erg snel natuurlijk.
paul deelen
shooter@home.nl
shooter@home.nl
Re: NodeMCU ESP8266 - Philips Hue lamp
Er zat een fout in de code. Het werkt nu super!
Bedankt voor de hulp.
Bedankt voor de hulp.
Re: NodeMCU ESP8266 - Philips Hue lamp
Ik ben ook net begonnen met ESP8266. Wil jou code als basis gebruiken voor mijn eerste project.
Kun jij aangeven wat de fout was in jouw code?
Bedankt!
Kun jij aangeven wat de fout was in jouw code?
Bedankt!
4 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 0 gasten