前言
- 👑由于无线传感器网络(也即是Zigbee)作为🌐
物联网工程的一门必修专业课,具有很强的实用性,因此很多院校都开设了zigbee的实训课程; - 👑同时最近很多使用了我的单片机课设的同学又来私信咨询我
基于Zigbee的的课程设计的相关问题; - 👑所以为了帮助各位有需要的同学顺利完成自己的课程设计,有个顺利的假期,同时为了方便各位想要学习ZigBee的同学查找学习,建立了本专栏。
- 💞但是由于笔者正在读研,每天的任务比较重,只能在从实验室回来后,晚上抽一个小时的时间来写,所以,更新不易,靠爱发电。

正在更新中~ ✨

🚨 我的项目环境:
- 平台:Windows 11
- 编译器:IAR for 8051 8.10
- Zigbee协议栈:Zstack-CC2530-2.5.1a
- 芯片型号:CC2530

🎊无线传感器网络专栏地址:【Zigbee课程设计系列文章】(附详细使用教程+完整代码+原理图+完整课设报告)
提示:以下是本篇文章正文内容,下面案例可供参考,代码链接以及电路图已经放在文末,点击获取,如失效请私信
基于无线传感器网络的无线火灾报警系统(云平台版)(附详细使用教程+完整代码+原理图+完整课设报告)
- [1 功能介绍以及成品图](#1 功能介绍以及成品图)
- [2 硬件模块介绍](#2 硬件模块介绍)
- [3 代码](#3 代码)
-
- [3.1 协调器代码](#3.1 协调器代码)
- [3.2 终端节点代码](#3.2 终端节点代码)
- [4 实物图](#4 实物图)
- [6 链接](#6 链接)
1 功能介绍以及成品图
- 云平台:接受上传的数据,并且能够根据结果进行展示
- 协调器:Wi-Fi模块通过MQTT协议发送接收终端数据至云端
- 终端1获得烟雾浓度传感器的数据,无线发送至协调器节点
- 终端2获得温湿度传感器的数据,无线发送至协调器节点
- 报警功能:协调器根据阈值上限,对当前环境中的温度与烟雾浓度数据进行判断,当有任意一项出现异常时,进行蜂鸣器报警处理
2 硬件模块介绍

DHT11:温湿度传感器

MQ-2:烟雾浓度传感器

蜂鸣器:高电平触发

Zigbee开发板:创思通信
3 代码
3.1 协调器代码
协调器代码
系统初始化代码
c
MT_UartInit(); //串口初始化
MT_UartRegisterTaskID(task_id); //注册串口任务
HalUARTWrite(0, "CoordinatorZB\r\n", 15);
osal_memset(tmp,0,10);
tmp[0] = HAL_UART_DMA+0x30;
tmp[1] = HAL_UART_ISR+0x30;
tmp[2] = HAL_UART_USB+0x30;
HalUARTWrite(0, tmp, 6);
// 蜂鸣器
P0SEL &= 0x7f; //
P0DIR |= 0x80; //output
P0_7 = 0;
ReSetWifi();
Delay_ms(1000); //等待模块启动
HalUARTWrite(1,"AT\r\n",strlen("AT\r\n")); //发送AT检测WiFi模块
系统解析接收到的数据的代码,主要接收终端节点(温湿度 / 烟雾传感器)的无线数据;解析数据后通过 MQTT AT 指令上传至云平台;触发本地蜂鸣器告警(超阈值时驱动硬件引脚);异常时复位系统,保障通信稳定性。
c
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint16 flashTime;
char HttpData[256];
memset(HttpData,0,256);
switch ( pkt->clusterId )
{
case SAMPLEAPP_P2P_CLUSTERID:
break;
case SAMPLEAPP_PERIODIC_CLUSTERID:
//输出接收到的数据{"tem1":23,"hum1":58} 长度是21
LCD_P8x16Str(0, 6, " ");
LCD_P8x16Str(0, 6, LYPASSWD);
if(ibusy==1) //还在发数据的时候返回
return ;
//tcp连接成功并且收到终端数据后向平台发送温湿度
if(flat==6){
if(pkt->cmd.DataLength==3){
if(1){
//memset(check,0,3);
//strncpy(check,(char const *)pkt->cmd.Data+18,2);
if(1){
if(pkt->cmd.Data[0]==1) //终端1 温湿度
{
解析数据
}
if(pkt->cmd.Data[0]==2)//终端2
{
sprintf(HttpData,"AT+MQTTPUB=0,\"$sys/%s/%s/thing/property/post\",\"{\\\"id\\\":\\\"2313\\\"\\\,\\\"version\\\":\\\"1.0\\\"\\\,\\\"params\\\":{\\\"fog\\\":{\\\"value\\\":%.2f}}}\",0,0\r\n",proid,devid,F);
}
//memset(check,0,3);
HalUARTWrite(1,(unsigned char *) HttpData,strlen(HttpData));
// 条件:温度超上下限 或 烟雾浓度超阈值
略去
ibusy = 0;//忙碌结束
}
}
}
3.2 终端节点代码
温湿度终端
c
void DHT11(void) //温湿传感启动
{
DATA_PIN=0;
Delay_ms(19); //>18MS
DATA_PIN=1;
P0DIR &= ~0x80; //重新配置IO口方向
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
if(!DATA_PIN)
{
ucharFLAG=2;
while((!DATA_PIN)&&ucharFLAG++);
ucharFLAG=2;
while((DATA_PIN)&&ucharFLAG++);
COM();
ucharRH_data_H_temp=ucharcomdata;
COM();
ucharRH_data_L_temp=ucharcomdata;
COM();
ucharT_data_H_temp=ucharcomdata;
COM();
ucharT_data_L_temp=ucharcomdata;
COM();
ucharcheckdata_temp=ucharcomdata;
DATA_PIN=1;
uchartemp=(ucharT_data_H_temp+ucharT_data_L_temp+ucharRH_data_H_temp+ucharRH_data_L_temp);
if(uchartemp==ucharcheckdata_temp)
{
ucharRH_data_H=ucharRH_data_H_temp;
ucharRH_data_L=ucharRH_data_L_temp;
ucharT_data_H=ucharT_data_H_temp;
ucharT_data_L=ucharT_data_L_temp;
ucharcheckdata=ucharcheckdata_temp;
}
wendu=ucharT_data_H;
shidu=ucharRH_data_H;
}
else //没用成功读取,返回0
{
wendu=0;
shidu=0;
}
P0DIR |= 0x80; //IO口需要重新配置
}
烟雾浓度终端
c
void SampleApp_Init( uint8 task_id )
{
unsigned char tmp[10];
SampleApp_TaskID = task_id;
SampleApp_NwkState = DEV_INIT;
SampleApp_TransID = 0;
MT_UartInit(); //串口初始化
MT_UartRegisterTaskID(task_id); //注册串口任务
HalUARTWrite(0, "EndDevice-2\r\n", 13);
osal_memset(tmp,0,10);
tmp[0] = HAL_UART_DMA+0x30;
tmp[1] = HAL_UART_ISR+0x30;
tmp[2] = HAL_UART_USB+0x30;
HalUARTWrite(0, tmp, 6);
/*ADC*/
HalAdcInit();// 初始化ADC
HalAdcSetReference ( HAL_ADC_REF_AVDD ); //设置基准电压为3.3v
APCFG |= 0x40; //设置P0.6为模拟口
P0SEL |= 0x40; //设置P0.6为外设口
}
4 实物图



6 链接
下载链接1🔐:点击跳转下载➡️云平台版火灾报警系统(附详细使用教程+完整代码+原理图+完整课设报告)
链接易失效,亦可直接私信我要!