使用 Cursor 创建基于 XIAO ESP32C6 的 Zigbee 项目
本指南将引导您使用 Cursor 的 AI 驱动聊天功能来开发基于 XIAO ESP32C6 和传感器的 Zigbee 应用程序。在本教程结束时,您将能够独立使用 Cursor 的聊天功能来开发基于 XIAO 开发板和传感器的 Zigbee 应用程序。
什么是 Cursor?
Cursor 是一个基于 Visual Studio Code 构建的 AI 驱动代码编辑器。它集成了强大的 AI 功能,可以帮助您更高效地编写、理解和调试代码。

为什么在嵌入式开发中使用 Cursor?
Cursor 为嵌入式软件开发提供了几个优势:
- 代码生成:Cursor 可以根据您的需求生成代码,节省您的时间和精力。
- 上下文感知辅助:Cursor 理解您的项目结构,可以提供相关建议。
- 调试帮助:Cursor 可以帮助识别和修复代码中的错误。
- 学习工具:对于初学者,Cursor 可以解释复杂概念并提供教育见解。
- 效率:Cursor 可以帮助您导航大型代码库并快速理解不熟悉的库。
对于像 XIAO ESP32C6 这样的嵌入式系统,Cursor 可以帮助您理解硬件特定的 API,为传感器交互生成样板代码,并解决硬件-软件集成问题。
所需材料
本教程需要以下材料:
- Grove 连接线
- USB-C 数据线
- 安装了 Arduino IDE 的计算机
- Cursor 应用程序(我们将在下一节中安装)
本教程使用 DHT11 温湿度传感器作为示例。如果您有其他传感器,也可以随意尝试。为了获得最佳体验,我们建议使用当前受 ESP Zigbee SDK 支持的传感器类型。这将确保兼容性,并在构建 Zigbee 项目时实现更流畅的实现。
安装 Cursor
按照以下步骤在您的操作系统上安装 Cursor:
- Windows
- MACOS
Cursor 订阅

Cursor 提供不同的订阅层级以满足各种用户需求:
免费爱好者计划
Cursor 可以通过爱好者计划免费下载和使用,包括:
- 2000 次补全
- 50 次慢速高级请求
- 两周的专业版功能试用
这个免费层级足以开始使用并探索 Cursor 的功能。
付费计划
对于更高级的功能和更高的使用限制,Cursor 提供付费订阅选项:
专业版计划($20/月)
- 无限补全
- 每月 500 次快速高级请求
- 无限慢速高级请求
商业版计划($40/用户/月)
- 所有专业版功能
- 在组织范围内强制执行隐私模式
- 集中团队计费
- 带有使用统计的管理仪表板
- SAML/OIDC SSO
您可以在 Cursor 定价页面 查看完整的定价详情。
需要注意的是,无论您使用哪个计划,在 Cursor 中生成的所有代码都属于您,可以按您的意愿使用,包括商业用途。
设置 Cursor
安装 Cursor 后,按照以下步骤进行设置:
- 启动 Cursor
- 使用您的账户登录或创建新账户
- 验证聊天面板是否可访问(通常在界面右侧)

打开 Zigbee 示例
当使用 Cursor 为您的项目生成代码时,提供示例代码可以显著提高生成项目的准确性。示例作为 Cursor 的参考点,让它能够理解项目的结构、语法和特定要求。通过分析这些示例,Cursor 可以生成更精确和相关的代码,量身定制以满足您的需求。
在我们的 Zigbee 项目上下文中,找到合适的示例有助于 Cursor:
- 理解所需的特定功能
- 识别要使用的适当库和函数
- 生成与您使用的硬件和接口兼容的代码
通过提供相关示例,您确保生成的代码更有可能正确工作并满足您项目的要求,为您节省调试和修改的时间和精力。
现在,让我们定位并打开 ESP32 Arduino 包提供的 Zigbee 示例:
- 首先,确保您已在 Arduino IDE 中安装了最新的 ESP32 开发板包:
- 打开 Arduino IDE
- 转到工具 > 开发板 > 开发板管理器
- 搜索 esp32
- 找到 esp32 by Espressif Systems
- 点击安装或更新以获取最新版本
- 等待安装完成

- 导航到 Zigbee 示例目录:
以下路径使用 ESP32 开发板包版本 3.1.3 作为示例。如果版本不同,请将 3.1.3
替换为您安装的版本号:
- 在 Windows 上:
C:\Users\[YourUsername]\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\libraries\Zigbee\
- 在 macOS 上:
/Users/[YourUsername]/Library/Arduino15/packages/esp32/hardware/esp32/3.1.3/libraries/Zigbee/
-
打开 Cursor 并从文件菜单中选择 Open Folder。
-
导航到步骤 2 中的 Zigbee 目录路径并点击 Open。

选择合适的示例
在使用 Cursor 的聊天功能生成代码之前,您需要确定最适合作为起点的示例:
确定您的设备类型
Zigbee 设备通常分为两个主要类别,理解这一点对于选择正确的示例代码至关重要:
-
传感器:
-
传感器是"感知"环境并收集数据的设备
-
它们将来自现实世界的物理信息转换为电子信号
-
传感器只"读取"数据,然后将其传输到网络
-
示例:
- 温度传感器:测量周围温度
- 湿度传感器:测量空气中的湿度水平
- 光线传感器:检测环境光强度
- 运动传感器:检测附近是否有物体移动
- 气体传感器:检测特定气体的浓度
-
-
执行器:
-
执行器是"执行动作"的设备
-
它们接收命令并影响物理世界
-
执行器负责"改变"某些东西的状态
-
示例:
- 灯开关:打开或关闭灯
- 电机控制器:控制电机旋转
- 继电器:控制大功率电气设备
- 阀门控制器:控制水或空气流量
- 门锁:锁定或解锁门
-
如何确定您的设备类型:
- 如果您的设备主要收集数据(读取信息),它是传感器
- 如果您的设备主要执行动作(改变状态),它是执行器
- 某些设备可能具有两种功能,在这种情况下,您应该根据主要功能进行选择
在我们的示例中,DHT11 是典型的传感器,因为它读取温度和湿度数据,但不改变环境。
识别接口类型
接下来,确定您的传感器使用的接口类型:
- GPIO:简单的数字或模拟引脚
- I2C:用于通信的双线接口
- SPI:串行外设接口
- UART:串行通信
DHT11 使用简单的 GPIO 接口,只有一条数据线。
检查 Zigbee 设备支持
在继续之前,重要的是验证您预期的设备类型是否受 ESP Zigbee SDK 支持。您可以在以下位置检查支持的设备类型:
此头文件包含 ESP 的 Zigbee 实现当前支持的所有设备类型。查看此文件以:
- 确认您的设备类型受支持
- 记录您需要的特定设备 ID 和集群 ID
- 了解您的设备类型可用的功能
如果您的设备类型未列出,您可能需要:
- 选择符合您需求的类似支持设备类型
- 考虑实现自定义设备类型(高级)
- 联系 ESP 支持寻求指导
找到最接近的示例
浏览 Zigbee 库中的示例,找到最符合您需求的示例。对于我们的 DHT11 传感器,寻找如下示例:
ZigbeeTemperatureSensor
ZigbeeHumiditySensor
- 任何演示从 GPIO 传感器读取数据的示例
幸运的是,ESP 在其 Zigbee 示例中提供了"Zigbee_Temp_Hum_Sensor_Sleepy"示例,这完全符合我们创建温湿度传感器项目的需求。此示例演示了:
- 如何实现温湿度传感器设备
- 如何将设备配置为睡眠终端设备以节省电力
- 如何定期报告传感器读数
- 如何处理 Zigbee 网络和数据传输
您可以在以下位置找到此示例:
zigbee/example/Zigbee_Temp_Hum_Sensor_Sleepy
此示例将作为我们基于 DHT11 的 Zigbee 传感器项目的绝佳起点。

确定引脚连接
对于 XIAO ESP32C6 和 DHT11 传感器,我们需要决定使用哪些引脚:
-
DHT11 传感器需要一个数据引脚。
-
我们将其连接到 XIAO ESP32C6 上的引脚 D0 (GPIO1)。
对于 XIAO 示例,只有 GPIO(数字/模拟)和 SPI 协议设备需要手动引脚配置。对于 I2C 和 UART 设备,引脚定义已在 XIAO 的板包中预配置,因此您可以跳过此步骤。
收集技术文档
拥有传感器的技术文档至关重要。如果您使用的是 Seeed 的产品,您可以在 Seeed Studio 官方 Wiki 上找到传感器或执行器的详细文档和资源。Wiki 的资源部分还包含您可以提供给 Cursor 的 Grove 产品数据表。例如,对于本项目中使用的 DHT11 传感器:
如果您使用的是其他制造商的传感器,请直接联系他们以获取必要的技术文档。
使用 Cursor 的聊天功能生成代码
现在我们有了所有必要的信息,可以使用 Cursor 的聊天功能生成我们的 Zigbee 应用程序代码。
这里您需要为 Cursor 的聊天功能创建一个提示。
传感器项目模板
如果您像我一样选择使用传感器作为设备,您可以参考以下提示。
请参考代码,然后使用ESP32-C6和Zigbee协议创建一个Arduino传感器项目。
项目名称:[项目名称]
传感器详情:
- 类型:[传感器型号]
- 连接:[引脚连接]
传感规格:
- 测量参数:[测量值]
- 传输频率:[发送间隔]
参考资料:
- 文档:[文档链接]
在Example目录中生成一个完整的项目。将主文件命名为[项目名称用下划线替换空格].ino,并包含详细的代码注释。
让我们分解如何填写提示模板,并使用 DHT11 传感器提供一个示例:
- 项目名称:为您的项目选择一个描述性名称
- 传感器详细信息:
- 类型:指定确切的传感器型号
- 连接:列出传感器和 XIAO ESP32C6 之间的所有引脚连接
- 传感规格:
- 参数:列出您想要测量的内容(温度、湿度等)
- 传输频率:您想要发送数据的频率(例如,每 5 秒)
- 参考资料:包含数据表或文档的链接
以下是 DHT11 温湿度传感器项目的完整提示:
请参考代码,然后使用 Zigbee 协议创建一个基于 ESP32-C6 的 Arduino 传感器项目。
项目名称:Zigbee_DHT11_XIAO
传感器详细信息:
- 类型:DHT11 温湿度传感器
- 连接:DHT11 数据引脚连接到 XIAO ESP32C6 的 D2
传感规格:
- 测量参数:温度(°C)和相对湿度(%)
- 传输频率:每 1 小时
参考资料:
- 文档:
- DHT11 传感器:https://wiki.seeedstudio.com/cn/Grove-TemperatureAndHumidity_Sensor/
- XIAO ESP32C6:https://wiki.seeedstudio.com/cn/xiao_pin_multiplexing_esp33c6/
在 Example 目录中生成一个完整的项目。将主文件命名为 [项目名称,空格替换为下划线].ino,并包含全面的代码注释。
执行器项目模板
如果您想使用执行器,可以使用以下提示模板。让我们看看如何为执行器项目构建提示:
请参考代码,然后使用 ESP32-C6 和 Zigbee 协议创建一个 Arduino 执行器项目。
项目名称:[项目名称]
执行器详细信息:
- 类型:[执行器型号]
- 连接:[引脚连接]
控制规格:
- 默认行为:[启动状态]
参考资料:
- 文档:[文档链接]
在 Example 目录中生成一个完整的项目。将主文件命名为 [项目名称,空格替换为下划线].ino,并包含全面的代码注释。
在使用 Cursor 构建您的第一个项目时,建议从简单的基本功能开始,而不是复杂的逻辑和需求。这种方法可以显著降低 Cursor 生成错误代码的可能性。首先,让 Cursor 创建一个可以验证正常工作的基本程序。一旦您有了坚实的基础,就可以逐步添加更多功能和复杂性来增强您的项目。这种迭代方法可以产生更可靠和可维护的代码。
在准备好包含项目所有具体细节的提示词后,请按照以下步骤操作:
- 打开 Cursor 的聊天面板(通常通过点击侧边栏中的聊天图标)。

-
找到最符合您项目需求的示例代码。对于我们的 DHT11 温湿度传感器项目,我们将使用"Zigbee_Temp_Hum_Sensor_Sleepy"示例。
-
将示例代码文件从 Zigbee 示例目录拖放到 Cursor 聊天窗口中。这有助于 Cursor 理解 Zigbee 传感器实现的结构和要求。

- 将我们预先编写的提示词复制并粘贴到聊天输入框中,然后按 Enter 键。等待 Cursor 根据提示词和示例代码生成您的项目。
- 点击 Accept 按钮保存生成的代码。这将在您的工作区中创建项目文件。
检查生成的代码
在 Cursor 生成代码后,在上传到设备之前仔细检查代码是很重要的。以下是需要检查的关键方面:
- 引脚配置
- 验证所有引脚分配是否与您的物理连接匹配
- 检查指定的引脚在 XIAO ESP32C6 上是否实际可用
- 确保不存在引脚冲突(例如,同一引脚用于多个目的)
- 确认引脚支持所需的功能(模拟、数字、I2C 等)
- 功能检查
将生成的代码与您的需求进行比较:
- 是否实现了所有请求的功能?
例如,在它提供给我的程序中,引脚是按照 GPIO 编号定义的,这可能需要阅读 wiki,然后检查 XIAO 的 A/D 编号是否与正确的 GPIO 编号匹配,这比较麻烦。为此,我们可以要求 Cursor 以与 A/D 相同的方式使用引脚。
点击此处预览完整代码
/**
* @brief 带有Zigbee功能的DHT11温湿度传感器,适用于XIAO ESP32C6
*
* 此示例演示如何创建一个Zigbee终端设备,使用DHT11传感器测量温度
* 和湿度,并每小时报告一次数据。
*
* 硬件要求:
* - XIAO ESP32C6开发板
* - DHT11温湿度传感器
*
* 连接方式:
* - DHT11数据引脚 -> XIAO ESP32C6的D2 (GPIO8)
* - DHT11 VCC -> 3.3V
* - DHT11 GND -> GND
*
* 该设备作为Zigbee终端设备运行,在测量间隔期间进入深度睡眠
* 以节省电力。
*/
#ifndef ZIGBEE_MODE_ED
#error "未在工具->Zigbee模式中选择Zigbee终端设备模式"
#endif
#include "Zigbee.h"
#include "DHT.h"
/* 引脚定义 */
#define DHT_PIN 8 // XIAO ESP32C6上的D2
#define BOOT_BUTTON 9 // XIAO ESP32C6上的启动按钮
/* DHT11传感器配置 */
#define DHT_TYPE DHT11
DHT dht(DHT_PIN, DHT_TYPE);
/* Zigbee配置 */
#define TEMP_SENSOR_ENDPOINT_NUMBER 10
/* 睡眠配置 */
#define uS_TO_S_FACTOR 1000000ULL // 微秒到秒的转换因子
#define TIME_TO_SLEEP 3600 // 睡眠1小时(3600秒)
/* 全局变量 */
ZigbeeTempSensor zbTempSensor = ZigbeeTempSensor(TEMP_SENSOR_ENDPOINT_NUMBER);
/************************ 传感器函数 *****************************/
void measureAndSleep() {
// 从DHT11读取温度和湿度
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// 检查读数是否有效
if (isnan(temperature) || isnan(humidity)) {
Serial.println("从DHT11传感器读取失败!");
delay(1000);
return;
}
// 在温度传感器EP中更新温度和湿度值
zbTempSensor.setTemperature(temperature);
zbTempSensor.setHumidity(humidity);
// 报告温度和湿度值
zbTempSensor.report();
Serial.printf("已报告温度:%.2f°C,湿度:%.2f%%\r\n", temperature, humidity);
// 添加小延迟以允许数据在进入睡眠前发送
delay(100);
// 使设备进入深度睡眠
// Serial.println("进入睡眠1小时");
// esp_deep_sleep_start();
}
/********************* Arduino设置 **************************/
void setup() {
Serial.begin(115200);
// 初始化DHT11传感器
dht.begin();
// 初始化按钮开关
pinMode(BOOT_BUTTON, INPUT_PULLUP);
// 配置唤醒源
// esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
// 设置Zigbee设备信息
zbTempSensor.setManufacturerAndModel("Seeed", "XIAO_DHT11_Sensor");
// 设置温度测量范围(DHT11为-20°C到60°C)
zbTempSensor.setMinMaxValue(-20, 60);
// 设置温度测量容差(DHT11精度为±2°C)
zbTempSensor.setTolerance(2);
// 配置湿度传感器(DHT11范围20-90% RH,精度±5% RH)
zbTempSensor.addHumiditySensor(20, 90, 5);
// 设置电源为电池(假设电池供电操作)
zbTempSensor.setPowerSource(ZB_POWER_SOURCE_BATTERY, 100);
// 将端点添加到Zigbee核心
Zigbee.addEndpoint(&zbTempSensor);
// 为终端设备创建Zigbee配置
esp_zb_cfg_t zigbeeConfig = ZIGBEE_DEFAULT_ED_CONFIG();
zigbeeConfig.nwk_cfg.zed_cfg.keep_alive = 60000; // 60秒保活
// 启动Zigbee
if (!Zigbee.begin(&zigbeeConfig, false)) {
Serial.println("Zigbee启动失败!");
Serial.println("重启中...");
ESP.restart();
}
Serial.println("连接到Zigbee网络");
while (!Zigbee.connected()) {
Serial.print(".");
delay(100);
}
Serial.println("\n成功连接到Zigbee网络");
// 为连接建立留出时间
delay(1000);
}
/********************* Arduino循环 **************************/
void loop() {
// 检查启动按钮以进行恢复出厂设置
if (digitalRead(BOOT_BUTTON) == LOW) {
delay(100); // 消抖
int startTime = millis();
while (digitalRead(BOOT_BUTTON) == LOW) {
delay(50);
if ((millis() - startTime) > 3000) {
Serial.println("恢复出厂设置已启动。1秒后重启...");
delay(1000);
Zigbee.factoryReset();
}
}
}
// 测量传感器数据并进入睡眠
measureAndSleep();
}
您只需要选择要更改的部分,输入提示词,然后按回车键即可。
验证并上传程序
现在 Cursor 已经生成了我们的 Zigbee 项目代码,我们需要验证它是否正常工作。最好的方法是使用 Arduino IDE,它为编译代码并将其上传到我们的 XIAO ESP32C6 开发板提供了优秀的工具。让我们切换到 Arduino IDE 并完成验证过程:
- 在 Arduino IDE 中打开主文件。
- 从开发板菜单中选择 XIAO ESP32C6 开发板。
- 选择适当的端口。
- 点击 验证 来编译代码。
- 如果有任何错误,返回 Cursor 的聊天界面并请求帮助修复它们。
- 一旦代码成功编译,将其上传到您的 XIAO ESP32C6。

如果一切顺利,您现在应该有一个可以被 Home Assistant 发现的 Zigbee 设备(前提是您的 Home Assistant 设置中有 Zigbee 网关)。

使用 Cursor 进行故障排除
如果您在生成的代码中遇到问题,可以向 Cursor 寻求帮助:
- 描述您面临的具体错误或问题
- 包含来自 Arduino IDE 的任何错误消息
- 请求 Cursor 建议修复或改进方案
- 实施建议的更改并再次测试
Cursor 的 AI 在调试方面特别出色,通常能够识别手动难以发现的问题。
例如,如果您是第一次使用 Zigbee 功能或遇到编译错误,如
#error Zigbee end device mode is not selected in Tools->Zigbee mode

由于疏忽,您总是可以向 Cursor 寻求指导。只需提示:
我在 Arduino IDE 中遇到编译错误,提示 'Compilation error: #error Zigbee end device mode is not selected in Tools->Zigbee mode'。我应该怎么办?
Cursor 可能会建议检查 Arduino IDE 中的工具菜单并选择适当的 Zigbee 模式:

您可以向 Cursor 询问遇到的任何错误,它将帮助指导您完成解决过程。您可能想要询问的其他一些常见问题包括:
- 库安装问题
- 引脚配置错误
- 传感器连接问题
- 通信协议设置
- 电源管理问题
只需在提示中清楚地描述问题,Cursor 就会提供相关的建议和解决方案。
使用 Cursor 增强您的程序
在基本的 Zigbee 功能正常工作后,您可以使用 Cursor 为程序添加更多功能和改进。让我们看一个如何通过添加串口初始化检查来增强代码的示例。
这在开发和调试过程中特别有用,因为它确保您不会错过任何串口输出,在继续设置之前等待串口准备就绪。
-
在 Cursor 中打开您的项目,并在代码中找到
setup()
函数。 -
在聊天面板中,描述您想要添加的内容。例如: "添加代码以在继续设置之前等待串口准备就绪"
-
Cursor 会建议如下修改:

除了这些小的增强功能,我们可以通过在基本功能之上实现节能功能来最大化 Zigbee 的价值。Zigbee 的关键优势之一是其低功耗能力,可以通过正确实现睡眠模式进一步优化。
以下是您如何要求 Cursor 为传感器项目添加深度睡眠功能:
- 打开聊天面板并请求深度睡眠实现:
修改程序,使温度和湿度值每三小时报告一次。其余时间深度睡眠以节省电力。
- Cursor 会建议包括以下内容的代码修改:
- 更新睡眠持续时间
- 更新睡眠消息以获得更好的反馈
- 更新文档以反映新的报告间隔
- 返回深度睡眠 3 小时

这种功耗优化对于电池供电的传感器节点特别有价值,根据报告频率和传感器类型,可能将电池寿命从几天延长到几个月甚至几年。
Cursor 可以帮助您实现所有这些功能 - 在寻求帮助时,只需在您的要求中具体说明即可。
结论
您现在已经学会了如何使用 Cursor 的 AI 驱动聊天为 XIAO ESP32C6 开发带传感器的 Zigbee 应用程序。这种方法可以显著加快您的开发过程并帮助您克服技术挑战。
随着您对 Cursor 越来越熟悉,您将发现为嵌入式项目利用其功能的其他方法。请记住,提示的质量很大程度上影响生成代码的质量,因此在描述您的要求时要具体和详细。
本教程代表了使嵌入式开发更易于访问的重要一步。通过将 Cursor 等 AI 工具与 XIAO ESP32C6 等强大硬件相结合,我们正在降低物联网和传感器网络开发的入门门槛。这对以下人群特别有价值:
- 刚开始嵌入式系统之旅的初学者
- 希望加速原型开发过程的经验丰富的开发人员
- 教授物联网和无线通信概念的教育工作者
- 想要创建智能家居解决方案的制造商和爱好者
AI 辅助开发工具与 Zigbee 技术的集成为创建节能、可靠的无线传感器网络开辟了新的可能性。这种技术组合能够实现更快的开发周期,同时保持高代码质量,最终有助于推动物联网领域的创新。
本文由 Citric 在 Cursor 的协助下撰写。
技术支持与产品讨论
感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。