zigbee: zigbee gateway support for single chip esp32-c6 solution

This commit is contained in:
likunqiao 2023-04-04 12:06:01 +08:00 committed by Shu Chen
parent 19b016e9c8
commit 990076e5f2
7 changed files with 41 additions and 12 deletions

View File

@ -2,7 +2,7 @@
examples/zigbee/esp_zigbee_gateway:
disable:
- if: IDF_TARGET in ["esp32c2", "esp32c6", "esp32h2"]
- if: IDF_TARGET in ["esp32c2", "esp32h2"]
temporary: true
reason: target(s) not supported yet

View File

@ -3,5 +3,6 @@
# The following five lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)
set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(esp_zigbee_gateway)

View File

@ -1,21 +1,23 @@
| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 |
| ----------------- | ----- | -------- | -------- | -------- |
| Supported Targets | ESP32 | ESP32-C3 | ESP32-C6 | ESP32-S2 | ESP32-S3 |
| ----------------- | ----- | -------- | -------- | -------- | -------- |
# Gateway Example
This example demonstrates how to build a Zigbee Gateway device. It runs on a Wi-Fi SoC such as ESP32, ESP32-C3 and ESP32-S3, with an 802.15.4 SoC like ESP32-H4 running [esp_zigbee_rcp](../esp_zigbee_rcp) to provide 802.15.4 radio.
This example demonstrates how to build a Zigbee Gateway device. It runs on a Wi-Fi SoC such as ESP32, ESP32-C3 and ESP32-S3, with an 802.15.4 SoC like ESP32-H2 running [esp_zigbee_rcp](../esp_zigbee_rcp) to provide 802.15.4 radio.
The example could also run on a single SoC which supports both Wi-Fi and Zigbee (e.g., ESP32-C6), but since there is only one RF path in ESP32-C6, which means Wi-Fi and Zigbee can't receive simultaneously, it has a significant impact on performance. Hence the two SoCs solution is recommended.
## Hardware Required
* One development board with ESP32 or ESP32-S3 SoC acting as Zigbee gateway (loaded with esp_zigbee_gateway example)
* A USB cable for power supply and programming
* Three jumper wires for UART (TX, RX and GND)
* Gateway doesn't function alone. Choose ESP32-H4 as Zigbee rcp (see [esp_zigbee_rcp example](../esp_zigbee_rcp))
* **Flash** Zigbee rcp on the ESP32-H4 DevKitC first **before** connecting to Zigbee gateway
* Connect the two SoCs via UART, below is an example setup with ESP32-DevKitC and ESP32-H4-DevKitC:
* Gateway doesn't function alone. Choose ESP32-H2 as Zigbee rcp (see [esp_zigbee_rcp example](../esp_zigbee_rcp))
* **Flash** Zigbee rcp on the ESP32-H2 DevKitC first **before** connecting to Zigbee gateway
* Connect the two SoCs via UART, below is an example setup with ESP32-DevKitC and ESP32-H2-DevKitC:
![Zigbee_gateway](../../openthread/ot_br/image/thread-border-router-esp32-esp32h4.jpg)
ESP32 pin | ESP32-H4 pin
ESP32 pin | ESP32-H2 pin
------------- |-------------
GND | G
GPIO4 (RX) | TX

View File

@ -38,6 +38,12 @@
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_netif.h"
#include "esp_vfs_eventfd.h"
#include "esp_wifi.h"
#include "nvs_flash.h"
#include "protocol_examples_common.h"
#include "esp_coexist_internal.h"
#include "esp_zigbee_gateway.h"
#if (!defined ZB_MACSPLIT_HOST && defined ZB_MACSPLIT_DEVICE)
@ -127,5 +133,18 @@ void app_main(void)
};
/* load Zigbee gateway platform config to initialization */
ESP_ERROR_CHECK(esp_zb_platform_config(&config));
ESP_ERROR_CHECK(nvs_flash_init());
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
#if CONFIG_EXAMPLE_CONNECT_WIFI
ESP_ERROR_CHECK(example_connect());
#if CONFIG_ESP_COEX_SW_COEXIST_ENABLE
ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_MIN_MODEM));
coex_enable();
coex_schm_status_bit_set(1, 1);
#else
ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_NONE));
#endif
#endif
xTaskCreate(esp_zb_task, "Zigbee_main", 4096, NULL, 5, NULL);
}

View File

@ -51,6 +51,13 @@
.max_children = MAX_CHILDREN, \
}, \
}
#if CONFIG_ZB_RADIO_NATIVE
#define ESP_ZB_DEFAULT_RADIO_CONFIG() \
{ \
.radio_mode = RADIO_MODE_NATIVE, \
}
#else
#define ESP_ZB_DEFAULT_RADIO_CONFIG() \
{ \
.radio_mode = RADIO_MODE_UART_RCP, \
@ -70,6 +77,7 @@
.tx_pin = 5, \
}, \
}
#endif
#define ESP_ZB_DEFAULT_HOST_CONFIG() \
{ \

View File

@ -2,6 +2,6 @@
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, 0x10000, 550K,
zb_storage, data, fat, 0x9a000, 16K,
zb_fct, data, fat, 0x9e000, 1K,
factory, app, factory, 0x10000, 1150K,
zb_storage, data, fat, , 16K,
zb_fct, data, fat, , 1K,

1 # Name, Type, SubType, Offset, Size, Flags
2 # Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
3 nvs, data, nvs, 0x9000, 0x6000,
4 phy_init, data, phy, 0xf000, 0x1000,
5 factory, app, factory, 0x10000, 550K, factory, app, factory, 0x10000, 1150K,
6 zb_storage, data, fat, 0x9a000, 16K, zb_storage, data, fat, , 16K,
7 zb_fct, data, fat, 0x9e000, 1K, zb_fct, data, fat, , 1K,

View File

@ -30,6 +30,5 @@ CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=n
#
CONFIG_ZB_ENABLED=y
CONFIG_ZB_ZCZR=y
CONFIG_ZB_RADIO_MACSPLIT_UART=y
# end of Zboss
# end of Component config