Skip to content

Commit 1730e4e

Browse files
P-R-O-C-H-YSuGliderpre-commit-ci-lite[bot]
authored
fix(zigbee): Add connected(), minor fixes, example update (espressif#10636)
* fix(zigbee): Add connected and minor fixes, example update * fix(example): Use correct API call for connected * fix(zigbee): Increase timeout and add semaphore to begin * feat(zigbee): Add option to select debug libs for zigbee * fix(example): fix warning by double percentage symbol * fix(example): Fix serial prints for Windows os Co-authored-by: Rodrigo Garcia <[email protected]> * ci(pre-commit): Apply automatic fixes * fix(example): Fix precommit spelling --------- Co-authored-by: Rodrigo Garcia <[email protected]> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 9417a84 commit 1730e4e

File tree

15 files changed

+198
-88
lines changed

15 files changed

+198
-88
lines changed

boards.txt

+18-1
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,15 @@ esp32h2.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zczr -lesp_zb_cli_co
531531
esp32h2.menu.ZigbeeMode.rcp=Zigbee RCP (radio co-processor)
532532
esp32h2.menu.ZigbeeMode.rcp.build.zigbee_mode=-DZIGBEE_MODE_RCP
533533
esp32h2.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_zb_cli_command -lzboss_stack.rcp -lzboss_port
534-
534+
esp32h2.menu.ZigbeeMode.ed_debug=Zigbee ED (end device) - Debug
535+
esp32h2.menu.ZigbeeMode.ed_debug.build.zigbee_mode=-DZIGBEE_MODE_ED
536+
esp32h2.menu.ZigbeeMode.ed_debug.build.zigbee_libs=-lesp_zb_api_ed.debug -lesp_zb_cli_command -lzboss_stack.ed.debug -lzboss_port.debug
537+
esp32h2.menu.ZigbeeMode.zczr_debug=Zigbee ZCZR (coordinator/router) - Debug
538+
esp32h2.menu.ZigbeeMode.zczr_debug.build.zigbee_mode=-DZIGBEE_MODE_ZCZR
539+
esp32h2.menu.ZigbeeMode.zczr_debug.build.zigbee_libs=-lesp_zb_api_zczr.debug -lesp_zb_cli_command -lzboss_stack.zczr.debug -lzboss_port.debug
540+
esp32h2.menu.ZigbeeMode.rcp_debug=Zigbee RCP (radio co-processor) - Debug
541+
esp32h2.menu.ZigbeeMode.rcp_debug.build.zigbee_mode=-DZIGBEE_MODE_RCP
542+
esp32h2.menu.ZigbeeMode.rcp_debug.build.zigbee_libs=-lesp_zb_api_rcp.debug -lesp_zb_cli_command -lzboss_stack.rcp.debug -lzboss_port.debug
535543

536544
##############################################################
537545

@@ -723,6 +731,15 @@ esp32c6.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zczr -lesp_zb_cli_co
723731
esp32c6.menu.ZigbeeMode.rcp=Zigbee RCP (radio co-processor)
724732
esp32c6.menu.ZigbeeMode.rcp.build.zigbee_mode=-DZIGBEE_MODE_RCP
725733
esp32c6.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_zb_cli_command -lzboss_stack.rcp -lzboss_port
734+
esp32c6.menu.ZigbeeMode.ed_debug=Zigbee ED (end device) - Debug
735+
esp32c6.menu.ZigbeeMode.ed_debug.build.zigbee_mode=-DZIGBEE_MODE_ED
736+
esp32c6.menu.ZigbeeMode.ed_debug.build.zigbee_libs=-lesp_zb_api_ed.debug -lesp_zb_cli_command -lzboss_stack.ed.debug -lzboss_port.debug
737+
esp32c6.menu.ZigbeeMode.zczr_debug=Zigbee ZCZR (coordinator/router) - Debug
738+
esp32c6.menu.ZigbeeMode.zczr_debug.build.zigbee_mode=-DZIGBEE_MODE_ZCZR
739+
esp32c6.menu.ZigbeeMode.zczr_debug.build.zigbee_libs=-lesp_zb_api_zczr.debug -lesp_zb_cli_command -lzboss_stack.zczr.debug -lzboss_port.debug
740+
esp32c6.menu.ZigbeeMode.rcp_debug=Zigbee RCP (radio co-processor) - Debug
741+
esp32c6.menu.ZigbeeMode.rcp_debug.build.zigbee_mode=-DZIGBEE_MODE_RCP
742+
esp32c6.menu.ZigbeeMode.rcp_debug.build.zigbee_libs=-lesp_zb_api_rcp.debug -lesp_zb_cli_command -lzboss_stack.rcp.debug -lzboss_port.debug
726743

727744
##############################################################
728745

libraries/Zigbee/examples/Zigbee_Color_Dimmable_Light/Zigbee_Color_Dimmable_Light.ino

+20-5
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ void identify(uint16_t time) {
6464

6565
/********************* Arduino functions **************************/
6666
void setup() {
67+
Serial.begin(115200);
68+
while (!Serial) {
69+
delay(10);
70+
}
71+
6772
// Init RMT and leave light OFF
6873
rgbLedWrite(LED_PIN, 0, 0, 0);
6974

@@ -80,12 +85,21 @@ void setup() {
8085
zbColorLight.setManufacturerAndModel("Espressif", "ZBColorLightBulb");
8186

8287
// Add endpoint to Zigbee Core
83-
log_d("Adding ZigbeeLight endpoint to Zigbee Core");
88+
Serial.println("Adding ZigbeeLight endpoint to Zigbee Core");
8489
Zigbee.addEndpoint(&zbColorLight);
8590

86-
// When all EPs are registered, start Zigbee. By default acts as ZIGBEE_END_DEVICE
87-
log_d("Calling Zigbee.begin()");
88-
Zigbee.begin();
91+
// When all EPs are registered, start Zigbee in End Device mode
92+
if (!Zigbee.begin()) {
93+
Serial.println("Zigbee failed to start!");
94+
Serial.println("Rebooting...");
95+
ESP.restart();
96+
}
97+
Serial.println("Connecting to network");
98+
while (!Zigbee.connected()) {
99+
Serial.print(".");
100+
delay(100);
101+
}
102+
Serial.println();
89103
}
90104

91105
void loop() {
@@ -98,7 +112,8 @@ void loop() {
98112
delay(50);
99113
if ((millis() - startTime) > 3000) {
100114
// If key pressed for more than 3secs, factory reset Zigbee and reboot
101-
Serial.printf("Resetting Zigbee to factory settings, reboot.\n");
115+
Serial.println("Resetting Zigbee to factory and rebooting in 1s.");
116+
delay(1000);
102117
Zigbee.factoryReset();
103118
}
104119
}

libraries/Zigbee/examples/Zigbee_Color_Dimmer_Switch/Zigbee_Color_Dimmer_Switch.ino

+6-3
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ ZigbeeColorDimmerSwitch zbSwitch = ZigbeeColorDimmerSwitch(SWITCH_ENDPOINT_NUMBE
4646

4747
/********************* Arduino functions **************************/
4848
void setup() {
49-
5049
Serial.begin(115200);
5150
while (!Serial) {
5251
delay(10);
@@ -68,11 +67,15 @@ void setup() {
6867
Zigbee.setRebootOpenNetwork(180);
6968

7069
//When all EPs are registered, start Zigbee with ZIGBEE_COORDINATOR mode
71-
Zigbee.begin(ZIGBEE_COORDINATOR);
70+
if (!Zigbee.begin(ZIGBEE_COORDINATOR)) {
71+
Serial.println("Zigbee failed to start!");
72+
Serial.println("Rebooting...");
73+
ESP.restart();
74+
}
7275

7376
Serial.println("Waiting for Light to bound to the switch");
7477
//Wait for switch to bound to a light:
75-
while (!zbSwitch.isBound()) {
78+
while (!zbSwitch.bound()) {
7679
Serial.printf(".");
7780
delay(500);
7881
}

libraries/Zigbee/examples/Zigbee_On_Off_Light/Zigbee_On_Off_Light.ino

+18-4
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ void setLED(bool value) {
4545

4646
/********************* Arduino functions **************************/
4747
void setup() {
48+
Serial.begin(115200);
49+
while (!Serial) {
50+
delay(10);
51+
}
4852
// Init LED and turn it OFF (if LED_PIN == RGB_BUILTIN, the rgbLedWrite() will be used under the hood)
4953
pinMode(LED_PIN, OUTPUT);
5054
digitalWrite(LED_PIN, LOW);
@@ -59,12 +63,21 @@ void setup() {
5963
zbLight.onLightChange(setLED);
6064

6165
//Add endpoint to Zigbee Core
62-
log_d("Adding ZigbeeLight endpoint to Zigbee Core");
66+
Serial.println("Adding ZigbeeLight endpoint to Zigbee Core");
6367
Zigbee.addEndpoint(&zbLight);
6468

6569
// When all EPs are registered, start Zigbee. By default acts as ZIGBEE_END_DEVICE
66-
log_d("Calling Zigbee.begin()");
67-
Zigbee.begin();
70+
if (!Zigbee.begin()) {
71+
Serial.println("Zigbee failed to start!");
72+
Serial.println("Rebooting...");
73+
ESP.restart();
74+
}
75+
Serial.println("Connecting to network");
76+
while (!Zigbee.connected()) {
77+
Serial.print(".");
78+
delay(100);
79+
}
80+
Serial.println();
6881
}
6982

7083
void loop() {
@@ -77,7 +90,8 @@ void loop() {
7790
delay(50);
7891
if ((millis() - startTime) > 3000) {
7992
// If key pressed for more than 3secs, factory reset Zigbee and reboot
80-
Serial.printf("Resetting Zigbee to factory settings, reboot.\n");
93+
Serial.println("Resetting Zigbee to factory and rebooting in 1s.");
94+
delay(1000);
8195
Zigbee.factoryReset();
8296
}
8397
}

libraries/Zigbee/examples/Zigbee_On_Off_Switch/Zigbee_On_Off_Switch.ino

+10-7
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ ZigbeeSwitch zbSwitch = ZigbeeSwitch(SWITCH_ENDPOINT_NUMBER);
7070
static void onZbButton(SwitchData *button_func_pair) {
7171
if (button_func_pair->func == SWITCH_ONOFF_TOGGLE_CONTROL) {
7272
// Send toggle command to the light
73+
Serial.println("Toggling light");
7374
zbSwitch.lightToggle();
7475
}
7576
}
@@ -93,7 +94,6 @@ static void enableGpioInterrupt(bool enabled) {
9394

9495
/********************* Arduino functions **************************/
9596
void setup() {
96-
9797
Serial.begin(115200);
9898
while (!Serial) {
9999
delay(10);
@@ -106,7 +106,7 @@ void setup() {
106106
zbSwitch.allowMultipleBinding(true);
107107

108108
//Add endpoint to Zigbee Core
109-
log_d("Adding ZigbeeSwitch endpoint to Zigbee Core");
109+
Serial.println("Adding ZigbeeSwitch endpoint to Zigbee Core");
110110
Zigbee.addEndpoint(&zbSwitch);
111111

112112
//Open network for 180 seconds after boot
@@ -118,19 +118,22 @@ void setup() {
118118
/* create a queue to handle gpio event from isr */
119119
gpio_evt_queue = xQueueCreate(10, sizeof(SwitchData));
120120
if (gpio_evt_queue == 0) {
121-
log_e("Queue was not created and must not be used");
122-
while (1);
121+
Serial.println("Queue creating failed, rebooting...");
122+
ESP.restart();
123123
}
124124
attachInterruptArg(buttonFunctionPair[i].pin, onGpioInterrupt, (void *)(buttonFunctionPair + i), FALLING);
125125
}
126126

127127
// When all EPs are registered, start Zigbee with ZIGBEE_COORDINATOR mode
128-
log_d("Calling Zigbee.begin()");
129-
Zigbee.begin(ZIGBEE_COORDINATOR);
128+
if (!Zigbee.begin(ZIGBEE_COORDINATOR)) {
129+
Serial.println("Zigbee failed to start!");
130+
Serial.println("Rebooting...");
131+
ESP.restart();
132+
}
130133

131134
Serial.println("Waiting for Light to bound to the switch");
132135
//Wait for switch to bound to a light:
133-
while (!zbSwitch.isBound()) {
136+
while (!zbSwitch.bound()) {
134137
Serial.printf(".");
135138
delay(500);
136139
}

libraries/Zigbee/examples/Zigbee_Scan_Networks/Zigbee_Scan_Networks.ino

+7-8
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
#include "Zigbee.h"
3333

3434
#ifdef ZIGBEE_MODE_ZCZR
35-
zigbee_role_t role = ZIGBEE_ROUTER; // or can be ZIGBEE_COORDINATOR, but it wont scan itself
35+
zigbee_role_t role = ZIGBEE_ROUTER; // or can be ZIGBEE_COORDINATOR, but it won't scan itself
3636
#else
3737
zigbee_role_t role = ZIGBEE_END_DEVICE;
3838
#endif
@@ -81,14 +81,13 @@ void setup() {
8181
}
8282

8383
// Initialize Zigbee stack without any EPs just for scanning
84-
Zigbee.begin(role);
85-
86-
// Waint until Zigbee stack is ready
87-
while (!Zigbee.isStarted()) {
88-
delay(100);
84+
if (!Zigbee.begin(role)) {
85+
Serial.println("Zigbee failed to start!");
86+
Serial.println("Rebooting...");
87+
ESP.restart();
8988
}
9089

91-
Serial.println("Setup done");
90+
Serial.println("Setup done, starting Zigbee network scan...");
9291
// Start Zigbee Network Scan with default parameters (all channels, scan time 5)
9392
Zigbee.scanNetworks();
9493
}
@@ -98,7 +97,7 @@ void loop() {
9897
int16_t ZigbeeScanStatus = Zigbee.scanComplete();
9998
if (ZigbeeScanStatus < 0) { // it is busy scanning or got an error
10099
if (ZigbeeScanStatus == ZB_SCAN_FAILED) {
101-
Serial.println("WiFi Scan has failed. Starting again.");
100+
Serial.println("Zigbee scan has failed. Starting again.");
102101
Zigbee.scanNetworks();
103102
}
104103
// other option is status ZB_SCAN_RUNNING - just wait.

libraries/Zigbee/examples/Zigbee_Temp_Hum_Sensor_Sleepy/Zigbee_Temp_Hum_Sensor_Sleepy.ino

+20-8
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
*/
2828

2929
#ifndef ZIGBEE_MODE_ED
30-
#error "Zigbee coordinator mode is not selected in Tools->Zigbee mode"
30+
#error "Zigbee end device mode is not selected in Tools->Zigbee mode"
3131
#endif
3232

3333
#include "Zigbee.h"
@@ -56,14 +56,19 @@ void meausureAndSleep() {
5656
zbTempSensor.reportTemperature();
5757
zbTempSensor.reportHumidity();
5858

59-
log_d("Temperature: %.2f°C, Humidity: %.2f%", temperature, humidity);
59+
Serial.printf("Reported temperature: %.2f°C, Humidity: %.2f%%\r\n", temperature, humidity);
6060

6161
// Put device to deep sleep
62+
Serial.println("Going to sleep now");
6263
esp_deep_sleep_start();
6364
}
6465

6566
/********************* Arduino functions **************************/
6667
void setup() {
68+
Serial.begin(115200);
69+
while (!Serial) {
70+
delay(10);
71+
}
6772
// Init button switch
6873
pinMode(BUTTON_PIN, INPUT_PULLUP);
6974

@@ -94,14 +99,20 @@ void setup() {
9499
zigbeeConfig.nwk_cfg.zed_cfg.keep_alive = 10000;
95100

96101
// When all EPs are registered, start Zigbee in End Device mode
97-
Zigbee.begin(&zigbeeConfig, false);
98-
99-
// Wait for Zigbee to start
100-
while (!Zigbee.isStarted()) {
102+
if (!Zigbee.begin(&zigbeeConfig, false)) {
103+
Serial.println("Zigbee failed to start!");
104+
Serial.println("Rebooting...");
105+
ESP.restart();
106+
}
107+
Serial.println("Connecting to network");
108+
while (!Zigbee.connected()) {
109+
Serial.print(".");
101110
delay(100);
102111
}
112+
Serial.println();
113+
Serial.println("Successfully connected to Zigbee network");
103114

104-
// Delay 5s to allow establishing connection with coordinator, needed for sleepy devices
115+
// Delay 5s (may be adjusted) to allow establishing proper connection with coordinator, needed for sleepy devices
105116
delay(5000);
106117
}
107118

@@ -115,7 +126,8 @@ void loop() {
115126
delay(50);
116127
if ((millis() - startTime) > 3000) {
117128
// If key pressed for more than 3secs, factory reset Zigbee and reboot
118-
Zigbee.factoryReset();
129+
Serial.println("Resetting Zigbee to factory and rebooting in 1s.");
130+
delay(1000);
119131
}
120132
}
121133
}

libraries/Zigbee/examples/Zigbee_Temperature_Sensor/Zigbee_Temperature_Sensor.ino

+18-6
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
*/
2828

2929
#ifndef ZIGBEE_MODE_ED
30-
#error "Zigbee coordinator mode is not selected in Tools->Zigbee mode"
30+
#error "Zigbee end device mode is not selected in Tools->Zigbee mode"
3131
#endif
3232

3333
#include "Zigbee.h"
@@ -42,7 +42,7 @@ static void temp_sensor_value_update(void *arg) {
4242
for (;;) {
4343
// Read temperature sensor value
4444
float tsens_value = temperatureRead();
45-
log_v("Temperature sensor value: %.2f°C", tsens_value);
45+
Serial.printf("Updated temperature sensor value to %.2f°C\r\n", tsens_value);
4646
// Update temperature value in Temperature sensor EP
4747
zbTempSensor.setTemperature(tsens_value);
4848
delay(1000);
@@ -51,12 +51,10 @@ static void temp_sensor_value_update(void *arg) {
5151

5252
/********************* Arduino functions **************************/
5353
void setup() {
54-
5554
Serial.begin(115200);
5655
while (!Serial) {
5756
delay(10);
5857
}
59-
6058
// Init button switch
6159
pinMode(BUTTON_PIN, INPUT_PULLUP);
6260

@@ -72,8 +70,21 @@ void setup() {
7270
// Add endpoint to Zigbee Core
7371
Zigbee.addEndpoint(&zbTempSensor);
7472

73+
Serial.println("Starting Zigbee...");
7574
// When all EPs are registered, start Zigbee in End Device mode
76-
Zigbee.begin();
75+
if (!Zigbee.begin()) {
76+
Serial.println("Zigbee failed to start!");
77+
Serial.println("Rebooting...");
78+
ESP.restart();
79+
} else {
80+
Serial.println("Zigbee started successfully!");
81+
}
82+
Serial.println("Connecting to network");
83+
while (!Zigbee.connected()) {
84+
Serial.print(".");
85+
delay(100);
86+
}
87+
Serial.println();
7788

7889
// Start Temperature sensor reading task
7990
xTaskCreate(temp_sensor_value_update, "temp_sensor_update", 2048, NULL, 10, NULL);
@@ -96,7 +107,8 @@ void loop() {
96107
delay(50);
97108
if ((millis() - startTime) > 3000) {
98109
// If key pressed for more than 3secs, factory reset Zigbee and reboot
99-
Serial.printf("Resetting Zigbee to factory settings, reboot.\n");
110+
Serial.println("Resetting Zigbee to factory and rebooting in 1s.");
111+
delay(1000);
100112
Zigbee.factoryReset();
101113
}
102114
}

0 commit comments

Comments
 (0)