0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-05-27 09:54 次阅读

目录

1. 功能介绍

2. 硬件接线介绍

2.1 DS18B20温度传感器

2.2 ESP8266 WIFI模块

3. 案例代码

3.1 QT设计的上位机

3.2 B节点DS18B20代码

3.3 协调器-ESP8266代码


1. 功能介绍

这是基于CC2530设计的远程温度报警器,通过CC2530终端检测环境温度上传给手机APP实时显示。

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

image-20220111101500221poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

​编辑

image-20220111101624493

资料包里包含:

image-20220111102720925

2. 硬件接线介绍

2.1 DS18B20温度传感器

作为B节点的CC2530开发板上接了DS18B20温度传感器,采集温度传递给A节点。

image-20220111095739249

这是B节点的程序,在主函数1秒采集一次DS18B20温度数据,然后传递给A节点。

image-20220111095857654

2.2 ESP8266 WIFI模块

作为A节点协调器的CC2530开发板用到了2个串口:

(1)串口0—作为常规调试串口,可以向串口调试助手打印调试信息

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

image-20220111101041120

image-20220111100845766

image-20220111100101399

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

下面这个是代码主函数里,1秒的频率向APP上传DS18B20的温度。

image-20220111100721309

3. 案例代码

3.1 QT设计的上位机

image-20220111101951242poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

​编辑

image-20220111102052611

3.2 B节点DS18B20代码

代码也可以在这里下载:https://download.csdn.net/download/xiaolong1126626497/75315395

#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;
};i++)>
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.3 协调器-ESP8266代码

#include "esp8266.h"
​
uint lenU1 = 0;
uchar tempRXU1;
uchar RecdataU1[MAXCHAR];
//AP+服务器模式
char *ESP8266_AP_Server[]=
{
  "ATrn",
  "ATE0rn",
  "AT+CWMODE=2rn",
  "AT+RSTrn",
  "ATE0rn",
  "AT+CWSAP="wbyq_Cortex_M3","12345678",1,4rn",
  "AT+CIPMUX=1rn",
  "AT+CIPSERVER=1,8089rn",
  "AT+CIFSRrn" 
};
​
​
//"AT+CIPSEND=0,10rn"  //长度10
//返回">" 之后就可以正常发送数据了
//发送成功返回 "SEND OK"
​
​
//发送数据
void ESP8266_SendData(char *p,int len)
{
  char buff[50];
  sprintf(buff,"AT+CIPSEND=0,%drn",len);
  clearBuffU1();
  Uart1_Send_String(buff);
  DelayMs(1000);
  RecdataU1[lenU1]='�';
  UR0SendString(RecdataU1);
  clearBuffU1();
  
  //发送数据
  Uart1_Send_String(p);
  
  //等待发送完成
  DelayMs(1000);
  
  RecdataU1[lenU1]='�';
  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("ATrn");
  DelayMs(2000);
  RecdataU1[lenU1]='�';
  UR0SendString(RecdataU1);
  
  clearBuffU1();
  Uart1_Send_String("ATE0rn");
  DelayMs(2000);
  RecdataU1[lenU1]='�';
  UR0SendString(RecdataU1);
  
  clearBuffU1();
  Uart1_Send_String("AT+CWMODE=2rn");
  DelayMs(2000);
  RecdataU1[lenU1]='�';
  UR0SendString(RecdataU1);
  
  clearBuffU1();
  Uart1_Send_String("AT+RSTrn");
  DelayMs(2000);
  DelayMs(2000);
  RecdataU1[lenU1]='�';
  UR0SendString(RecdataU1);
  
  clearBuffU1();
  Uart1_Send_String("ATE0rn");
  DelayMs(2000);
  RecdataU1[lenU1]='�';
  UR0SendString(RecdataU1);
  
  clearBuffU1();
  Uart1_Send_String("AT+CWSAP="wifi_cc2530","12345678",1,4rn");
  DelayMs(2000);
  RecdataU1[lenU1]='�';
  UR0SendString(RecdataU1);
  
  clearBuffU1();
  Uart1_Send_String("AT+CIPMUX=1rn");
  DelayMs(2000);
  RecdataU1[lenU1]='�';
  UR0SendString(RecdataU1);
  
  clearBuffU1();
  Uart1_Send_String("AT+CIPSERVER=1,8080rn");
  DelayMs(2000);
  RecdataU1[lenU1]='�';
  UR0SendString(RecdataU1);
  
  clearBuffU1();
  Uart1_Send_String("AT+CIFSRrn");
  DelayMs(2000);
  RecdataU1[lenU1]='�';
  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;j++)>
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png


审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    25

    文章

    4874

    浏览量

    96971
  • 温度报警器
    +关注

    关注

    3

    文章

    29

    浏览量

    11223
  • CC2530
    +关注

    关注

    19

    文章

    221

    浏览量

    57703
收藏 人收藏

    评论

    相关推荐

    zigbeecc2530

    `晒晒我的zigbeecc2530)模块`
    发表于 03-20 13:58

    基于CC2530ZigBee通信网络的应用设计

    组成的星型网络,各终端利用CC2530自带的A/D转化采集温度数据并通过网络汇聚到协调。实现了Zi
    发表于 11-06 10:01

    基于CC2530温度报警器的设计

    的影响。据此本文基于CC2530 芯片作处理,使用DS18B20温度传感采集外部环境数据并通过处理进行比对分析,结合
    发表于 07-26 07:04

    怎样去设计一种基于CC2530单片机的温度报警器

    基于CC2530温度报警器是由哪些部分组成的?怎样去设计一种基于CC2530单片机的温度报警器
    发表于 09-24 08:23

    基于CC2530芯片_zigbee基础实验

    zigbee基础实验,基于CC2530芯片
    发表于 12-11 10:48 48次下载

    cc2530 adc测外部电压

    CC2530 是用于2.4-GHz IEEE 802.15.4、ZigBee 和RF4CE 应用的一个真正的片上系统(SoC)解决方案。它能够以非常低的总的材料成本建立强大的网络节点。要在zigbee的组网中加入烟雾传感
    发表于 11-07 18:53 5552次阅读
    <b class='flag-5'>cc2530</b> adc测外部电压

    cc2530芯片有哪些功能

    CC2530是专门针对IEEE 802.15.4和Zigbee应用的单芯片解决方案,经济且低功耗。 CC2530有四种不同的版本:CC2530-F32 / 64 / 128 / 256
    发表于 11-08 11:05 2.3w次阅读

    基于CC2530ZigBee协调节点设计

    本文给出了基于TI新一代芯片CC2530ZigBee协调节点设计方法,该方法选用TICC2591作为射频前端芯片。
    发表于 01-05 15:25 4.9w次阅读
    基于<b class='flag-5'>CC2530</b>的<b class='flag-5'>ZigBee</b>协调<b class='flag-5'>器</b>节点设计

    CC2530芯片的基本特性和CC2530无线模块的设计

    本文介绍了CC2530芯片的基本特性,论述了以CC2530芯片为核心的无线通信模块的硬件设计和调试软件设计,在介绍设计规范和模块结构的基础上,采用TI公司的CC2530芯片作为主控制芯片设计出具
    发表于 02-11 08:00 97次下载
    <b class='flag-5'>CC2530</b>芯片的基本特性和<b class='flag-5'>CC2530</b>无线模块的设计

    如何使用ZigBee TI ZStack CC2530 2.5搭建开发环境

    本文档的主要内容详细介绍的是如何使用ZigBee TI ZStack CC2530 2.5搭建开发环境。
    发表于 05-10 18:14 25次下载
    如何使用<b class='flag-5'>ZigBee</b> TI ZStack <b class='flag-5'>CC2530</b> 2.5搭建开发环境

    基于zigbee CC2530和环境光传感实现照度计的设计

    本项目是一个基于zigbee CC2530的照度计,传感器使用的是TI的环境光传感OPT3001。成果如上图所示,关于OPT3001传感硬件电路设计,可参考《基于
    的头像 发表于 02-03 07:03 7785次阅读
    基于<b class='flag-5'>zigbee</b> <b class='flag-5'>CC2530</b>和环境光传感<b class='flag-5'>器</b>实现照度计的设计

    ZigbeeCC2530与烟雾传感

    CC2530与烟雾传感上代码:
    发表于 11-29 20:36 49次下载
    <b class='flag-5'>Zigbee</b>的<b class='flag-5'>CC2530</b>与烟雾传感<b class='flag-5'>器</b>

    基于CC2530ZigBee通信网的应用设计.pdf

    基于CC2530ZigBee通信网的应用设计.pdf
    发表于 12-15 18:17 23次下载

    Zigbee(CC2530)传感

    电子发烧友网站提供《Zigbee(CC2530)传感板.zip》资料免费下载
    发表于 07-04 14:49 10次下载
    <b class='flag-5'>Zigbee</b>(<b class='flag-5'>CC2530</b>)传感<b class='flag-5'>器</b>板

    基于CC2530ZigBee通信网络的应用设计

    电子发烧友网站提供《基于CC2530ZigBee通信网络的应用设计.pdf》资料免费下载
    发表于 10-26 09:34 3次下载
    基于<b class='flag-5'>CC2530</b>的<b class='flag-5'>ZigBee</b>通信网络的应用设计