基于Zigbee的无线火灾报警系统(云平台版)


🎊项目专栏:【Zigbee课程设计系列文章】(附详细使用教程+完整代码+原理图+完整课设报告)

前言

  • 👑由于无线传感器网络(也即是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 功能介绍以及成品图

  1. 云平台:接受上传的数据,并且能够根据结果进行展示
  2. 协调器:Wi-Fi模块通过MQTT协议发送接收终端数据至云端
  3. 终端1获得烟雾浓度传感器的数据,无线发送至协调器节点
  4. 终端2获得温湿度传感器的数据,无线发送至协调器节点
  5. 报警功能:协调器根据阈值上限,对当前环境中的温度与烟雾浓度数据进行判断,当有任意一项出现异常时,进行蜂鸣器报警处理

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

相关推荐
U-Mail邮件系统5 小时前
如何挑选优质可靠的邮件系统供应商
网络·邮件系统
测试人社区-小明5 小时前
从前端体验到后端架构:Airbnb全栈SDET面试深度解析
前端·网络·人工智能·面试·职场和发展·架构·自动化
邵小的运维之路5 小时前
静态路由与 BFD 联动
运维·网络·智能路由器
ooolmf5 小时前
【无标题】TemperatureMonitor.m matlab2024串口监控温度run_temperature_monitor.m
linux·运维·网络
眠晚晚5 小时前
src挖洞笔记分享_上
服务器·网络·笔记
YANshangqian5 小时前
网页Http远程启动应用工具
网络·网络协议·http
猪八戒1.05 小时前
9.5 【定时器】输入捕获
单片机·嵌入式硬件
合才科技5 小时前
【要闻周报】网络安全与数据合规 12-13
网络·安全
此生只爱蛋5 小时前
【Linux】网络层IP
服务器·网络·tcp/ip