大部分教程通常都是已Zigbee原理开始讲解和学习,各种概念让初学者难以理解。本教程从一个小白的角度出发,入门无需任何Zigbee底层原理知识,只需要基本的MCU研发经验就可以掌握,让您快速实现zigbee组网和节点之间通信。
本教程采用泰凌微TLSR8258芯片,芯片资料链接TLSR825x Series - Telink wiki
硬件准备
泰凌微TLSR8258模组一个,并引出IO口4个(VCC,GND,SWD,PD7), PD7用于调试口打印输出到PC。使用的模组为SNB信邦智能科技有限公司的模组(SNB是专业智能家居研发者,拥有10多年无线通信研发经验)
硬件连接只需要4根线,VCC,GND,SWD,PD7
开发环境搭建
下载SDK
TLSR825x Series - Telink wiki
下载开发工具
eclipse(这个eclipse非常难以使用的老古董代码编辑器,入门后可以自行改成vscode等工具,通过make命令行来编译)
IDE for TLSR8 Chips - Telink wiki
导入DEMO工程
下载SDK后,解压到一个空白目录中
编译程序
Zigbee组网通信最小组成需要2个节点。一个协调器(sampleGW)加一个节点(sampleLight)
编译协调器CO程序
编译路由节点Light
编译结果确认
烧写程序到芯片
如果在donwnload之前点击erase按钮为清除所有数据
您需要烧写2个模块
一个sampleGW_8258.bin 作为协调器
一个sampleLight_8258.bin 作为节点
至此,您已经接近成功!下面通过修改sample例子少量的代码来实现组网通信,并输出结果到PC串口上
修改代码
- sampleGW上电就打开网络180秒,让Light节点与GW节点组成相同的网络,Zigbee组网特性,如果不打开网络无法组成网络
- sampleGW协调器1秒1次广播消息到light节点
- 修改使用PD7作为调试打印(printf)输出,把调试信息输出到PC上
sampleGW代码修改
sampleGateway.c
增加一个函数enable_join
int enable_flg=0;
s32 enable_join(void *arg){
if(enable_flg==1){
//控制周期执行只执行1次
return 0;
}
enable_flg =1;
if(zb_isDeviceJoinedNwk()){
printf("Enable join\n");
u8 duration = zb_getMacAssocPermit() ? 0 : 180;
zb_nlmePermitJoiningRequest(duration);
}
return 0;
}
增加一行到user_init函数(入口函数)
TL_ZB_TIMER_SCHEDULE(enable_join, NULL, 3000);
开启调试打印
编译后重新烧写到协调器模块
修改sampleLight节点代码
重新编译,烧写到light节点, 重新上电sampleGW节点,正常情况下2个模块会组成同一个网络
启动PC上串口,就能看到打印信息了
认识我
http://cn.snbie.cc/me/me.jpeg