Update Zigbee_On_Off_Light.ino

This commit is contained in:
Jason2866
2024-12-16 21:47:52 +01:00
committed by GitHub
parent 37d976f539
commit 817a1d5881
@@ -30,28 +30,30 @@
#error "Zigbee end device mode is not selected in Tools->Zigbee mode" #error "Zigbee end device mode is not selected in Tools->Zigbee mode"
#endif #endif
#include "ZigbeeCore.h" #include "Zigbee.h"
#include "ep/ZigbeeLight.h"
#define LED_PIN RGB_BUILTIN /* Zigbee light bulb configuration */
#define BUTTON_PIN 9 // ESP32-C6/H2 Boot button
#define ZIGBEE_LIGHT_ENDPOINT 10 #define ZIGBEE_LIGHT_ENDPOINT 10
uint8_t led = RGB_BUILTIN;
uint8_t button = BOOT_PIN;
ZigbeeLight zbLight = ZigbeeLight(ZIGBEE_LIGHT_ENDPOINT); ZigbeeLight zbLight = ZigbeeLight(ZIGBEE_LIGHT_ENDPOINT);
/********************* RGB LED functions **************************/ /********************* RGB LED functions **************************/
void setLED(bool value) { void setLED(bool value) {
digitalWrite(LED_PIN, value); digitalWrite(led, value);
} }
/********************* Arduino functions **************************/ /********************* Arduino functions **************************/
void setup() { void setup() {
Serial.begin(115200);
// Init LED and turn it OFF (if LED_PIN == RGB_BUILTIN, the rgbLedWrite() will be used under the hood) // Init LED and turn it OFF (if LED_PIN == RGB_BUILTIN, the rgbLedWrite() will be used under the hood)
pinMode(LED_PIN, OUTPUT); pinMode(led, OUTPUT);
digitalWrite(LED_PIN, LOW); digitalWrite(led, LOW);
// Init button for factory reset // Init button for factory reset
pinMode(BUTTON_PIN, INPUT); pinMode(button, INPUT_PULLUP);
//Optional: set Zigbee device name and model //Optional: set Zigbee device name and model
zbLight.setManufacturerAndModel("Espressif", "ZBLightBulb"); zbLight.setManufacturerAndModel("Espressif", "ZBLightBulb");
@@ -60,28 +62,40 @@ void setup() {
zbLight.onLightChange(setLED); zbLight.onLightChange(setLED);
//Add endpoint to Zigbee Core //Add endpoint to Zigbee Core
log_d("Adding ZigbeeLight endpoint to Zigbee Core"); Serial.println("Adding ZigbeeLight endpoint to Zigbee Core");
Zigbee.addEndpoint(&zbLight); Zigbee.addEndpoint(&zbLight);
// When all EPs are registered, start Zigbee. By default acts as ZIGBEE_END_DEVICE // When all EPs are registered, start Zigbee. By default acts as ZIGBEE_END_DEVICE
log_d("Calling Zigbee.begin()"); if (!Zigbee.begin()) {
Zigbee.begin(); Serial.println("Zigbee failed to start!");
Serial.println("Rebooting...");
ESP.restart();
}
Serial.println("Connecting to network");
while (!Zigbee.connected()) {
Serial.print(".");
delay(100);
}
Serial.println();
} }
void loop() { void loop() {
// Checking button for factory reset // Checking button for factory reset
if (digitalRead(BUTTON_PIN) == LOW) { // Push button pressed if (digitalRead(button) == LOW) { // Push button pressed
// Key debounce handling // Key debounce handling
delay(100); delay(100);
int startTime = millis(); int startTime = millis();
while (digitalRead(BUTTON_PIN) == LOW) { while (digitalRead(button) == LOW) {
delay(50); delay(50);
if ((millis() - startTime) > 3000) { if ((millis() - startTime) > 3000) {
// If key pressed for more than 3secs, factory reset Zigbee and reboot // If key pressed for more than 3secs, factory reset Zigbee and reboot
Serial.printf("Resetting Zigbee to factory settings, reboot.\n"); Serial.println("Resetting Zigbee to factory and rebooting in 1s.");
delay(1000);
Zigbee.factoryReset(); Zigbee.factoryReset();
} }
} }
// Toggle light by pressing the button
zbLight.setLight(!zbLight.getLightState());
} }
delay(100); delay(100);
} }