2">
锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

基于CC2530(ZigBee设计)的温度报警器

时间:2023-10-12 02:07:00 igt202传感器

目录

1. 功能介绍

2. 硬件接线介绍

温度传感器-toc" style="margin-left:80px;">2.1 DS18B20温度传感器

2.2 ESP8266 WIFI模块

3. 案例代码

3.1 QT上位机的设计

3.2 B节点DS18B20代码

3.3 协调器-ESP8266代码


1. 功能介绍

这是基于CC通过2530设计的远程温度报警器CC2530终端检测环境温度APP实时显示。

一共有两块CC2530开发板分别称为A板(作为协调器),B板(作为温度节点),A板上接了ESP8266 WIF与手机一起使用模块APP之间通信。B板上接了DS18B20 温度传感器模块用于将检测到的温度传递给A板,A板收到DS18B20温度后,发送给手机APP显示。APP上位机采用Qt支持跨平台的框架设计,Android、windows、IOS、Linux可编译操作安装。

image-20220111101500221

完整的项目代码下载地址: 基于CC2530(ZigBee)设计温度报警器.zip-嵌入式文档资源-CSDN下载

信息包含:

2. 硬件接线介绍

2.1 DS18B20温度传感器

B节点CC2530开发板连接DS18B20温度传感器,采集温度传递到A节点。

这是B节点的程序,在主函数1秒内收集一次DS18B20温度数据,然后传输到A节点。

2.2 ESP8266 WIFI模块

A节点协调器CC2530开发板使用了两个串口:

(1)串口0-作为常规调试串口,可将调试信息打印给串口调试助手。

(2)串口1-连接ESP8266 WIFI,进行通信。 P0.4,P0.5用作串口

上图为代码截图,设置ESP8266的AP热点名称和密码。 把ESP接线8266后,下载程序。 正常情况下,ESP8266将创建一个名称” wbyq_Cortex_M3” 连接密码为热点”12345678”, 这是打开手机APP搜索这个WIFI名称,然后连接,连接,打开专用手机APP,点击连接服务器,即可收到ESP8266发送的温度数据。

以下是代码主函数中1秒的频率向APP上传DS18B20的温度。

3. 案例代码

3.1 QT上位机的设计

3.2 B节点DS18B20代码

#define Ds18b20IO P0_6    //温度传感器引脚  void Delay_us(unsigned int k)//us延时函数 {   T1CC0L = 0x06;    T1CC0H = 0x00;    T1CTL = 0x02;    while(k)    {      while(!(T1CNTL >= 0x04));     k--;    }   T1CTL = 0x00; ///关闭定时器 }  void Delay_ms(unsigned int k) {   T1CC0L = 0xe8;   T1CC0H = 0x03;   T1CTL = 0x0a; //模模式 32分频   while(k)    {     while(!((T1CNTL >= 0xe8)&&(T1CNTH >= 0x03)));     k--;    }   T1CTL = 0x00; ///关闭定时器 }  void Delay_s(unsigned int k) {   while(k)    {     Delay_ms(1000);     k--;    } }  //时钟频率为32M void Ds18b20Delay(unsigned int k) {   unsigned int i,j;   for(i=0;i 8000)Flag_1 = 0;
        Status = Ds18b20IO;
    }
    Ds18b20OutputInitial();
    Ds18b20IO = 1;
    Ds18b20Delay(100);
    return Status;       //返回初始化状态
}
​
void Ds18b20Write(unsigned char infor)
{
    unsigned int i;
    Ds18b20OutputInitial();
    for(i=0;i<8;i++)
    {
        if((infor & 0x01))
        {
            Ds18b20IO = 0;
            Ds18b20Delay(6);
            Ds18b20IO = 1;
            Ds18b20Delay(50);
        }
        else
        {
            Ds18b20IO = 0;
            Ds18b20Delay(50);
            Ds18b20IO = 1;
            Ds18b20Delay(6);
        }
        infor >>= 1;
    }
}
​
unsigned char Ds18b20Read(void)
{
    unsigned char Value = 0x00;
    unsigned int i;
    Ds18b20OutputInitial();
    Ds18b20IO = 1;
    Ds18b20Delay(10);
    for(i=0;i<8;i++)
    {
        Value >>= 1; 
        Ds18b20OutputInitial();
        Ds18b20IO = 0;// 给脉冲信号
        Ds18b20Delay(3);
        Ds18b20IO = 1;// 给脉冲信号
        Ds18b20Delay(3);
        Ds18b20InputInitial();
        if(Ds18b20IO == 1) Value |= 0x80;
        Ds18b20Delay(15);
    } 
    return Value;
}
​
​
​
//温度读取函数 带1位小数位
float floatReadDs18B20(void) 
{
    unsigned char V1,V2;   //定义高低8位 缓冲
    unsigned int temp;     //定义温度缓冲寄存器
    float fValue;
    Ds18b20Initial();
    Ds18b20Write(0xcc);    // 跳过读序号列号的操作
    Ds18b20Write(0x44);    // 启动温度转换
    
    Ds18b20Initial();
    Ds18b20Write(0xcc);    //跳过读序号列号的操作 
    Ds18b20Write(0xbe);    //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
    
    V1 = Ds18b20Read();    //低位
    V2 = Ds18b20Read();    //高位
    //temp = ((V1 >> 4)+((V2 & 0x07)*16)); //转换数据 
    temp=V2*0xFF+V1;
    fValue = temp*0.0625;
    
    return fValue;
}

3.3 协调器-ESP8266代码

#include "esp8266.h"
​
uint lenU1 = 0;
uchar tempRXU1;
uchar  RecdataU1[MAXCHAR];
//AP+服务器模式
char *ESP8266_AP_Server[]=
{
    "AT\r\n",
    "ATE0\r\n",
    "AT+CWMODE=2\r\n",
    "AT+RST\r\n",
    "ATE0\r\n",
    "AT+CWSAP=\"wbyq_Cortex_M3\",\"12345678\",1,4\r\n",
    "AT+CIPMUX=1\r\n",
    "AT+CIPSERVER=1,8089\r\n",
    "AT+CIFSR\r\n" 
};
​
​
//"AT+CIPSEND=0,10\r\n"   //长度10
//返回">" 之后就可以正常发送数据了
//发送成功返回 "SEND OK"
​
​
//发送数据
void ESP8266_SendData(char *p,int len)
{
   char buff[50];
   sprintf(buff,"AT+CIPSEND=0,%d\r\n",len);
   clearBuffU1();
   Uart1_Send_String(buff);
   DelayMs(1000);
   RecdataU1[lenU1]='\0';
   UR0SendString(RecdataU1);
   clearBuffU1();
    
   //发送数据
   Uart1_Send_String(p);
   
   //等待发送完成
   DelayMs(1000);
   
   RecdataU1[lenU1]='\0';
   UR0SendString(RecdataU1);
   
    clearBuffU1();
}
​
​
/****************************************************************************
* 名    称: SetWifi()
* 功    能: 设置LED灯相应的IO口
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void SetWifi(void)
{
  P0DIR |= 0x40;           //P0.6定义为输出
  IGT = 0;                 //高电平复位
  DelayMs(500);
  IGT = 1;                 //低电平工作
}
​
/*
设置WIFI为AP模式+TCP服务器
*/
void SetESP8266_AP_TCP_Server()
{
   clearBuffU1();
   Uart1_Send_String("AT\r\n");
   DelayMs(2000);
   RecdataU1[lenU1]='\0';
   UR0SendString(RecdataU1);
   
   clearBuffU1();
   Uart1_Send_String("ATE0\r\n");
   DelayMs(2000);
   RecdataU1[lenU1]='\0';
   UR0SendString(RecdataU1);
   
   clearBuffU1();
   Uart1_Send_String("AT+CWMODE=2\r\n");
   DelayMs(2000);
   RecdataU1[lenU1]='\0';
   UR0SendString(RecdataU1);
   
    clearBuffU1();
   Uart1_Send_String("AT+RST\r\n");
   DelayMs(2000);
   DelayMs(2000);
   RecdataU1[lenU1]='\0';
   UR0SendString(RecdataU1);
   
   clearBuffU1();
   Uart1_Send_String("ATE0\r\n");
   DelayMs(2000);
   RecdataU1[lenU1]='\0';
   UR0SendString(RecdataU1);
   
   clearBuffU1();
   Uart1_Send_String("AT+CWSAP=\"wifi_cc2530\",\"12345678\",1,4\r\n");
   DelayMs(2000);
   RecdataU1[lenU1]='\0';
   UR0SendString(RecdataU1);
   
   clearBuffU1();
   Uart1_Send_String("AT+CIPMUX=1\r\n");
   DelayMs(2000);
   RecdataU1[lenU1]='\0';
   UR0SendString(RecdataU1);
   
   clearBuffU1();
   Uart1_Send_String("AT+CIPSERVER=1,8080\r\n");
   DelayMs(2000);
   RecdataU1[lenU1]='\0';
   UR0SendString(RecdataU1);
   
   clearBuffU1();
   Uart1_Send_String("AT+CIFSR\r\n");
   DelayMs(2000);
   RecdataU1[lenU1]='\0';
   UR0SendString(RecdataU1);
}
​
​
unsigned char dataRecv;
unsigned char Flag = 0;
/*===================UR1初始化函数====================*/
void Init_Uart1()
{
  PERCFG = 0x00;        //位置1  P0.4/P0.5口
  P0SEL |= 0x30;        //P0.4,P0.5用作串口(外部设备功能)
  
  U1CSR |= 0x80;        //设置为UART方式
  U1GCR |= 11;      //BAUD_E        
  U1BAUD |= 216;        //BAUD_M 波特率设为115200
  UTX1IF = 0;           //UART1 TX中断标志初始置位0
  U1CSR |= 0X40;              //允许接收 
  IEN0 |= 0x88;               // 开总中断,UART1接收中断  
}
​
​
void clearBuffU1(void)
{
  int j;
  for(j=0;j

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章