• 1
  • 2
  • 3
  • 4

首页 / 资料库 / 电路图

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

2023-09-18 18:58:00

目录

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、IOS、Linux都可以编译运行安装。

image-20220111101500221poYBAGDYdXCAWkKMAAAAK8RNs4s030.webp

​编辑

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.webp

​编辑

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--;   }}​//时钟频率为32Mvoid 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.webp

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;j++)>
poYBAGDYdXCAWkKMAAAAK8RNs4s030.webp


审核编辑:汤梓红

温度开发板报警器ZigBee

  • 1
  • 2
  • 3
  • 4

最新内容

手机

相关内容

  • 1
  • 2
  • 3

猜你喜欢