首页 / 资料库 / 电路图
基于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都可以编译运行安装。
编辑
资料包里包含:
2. 硬件接线介绍
2.1 DS18B20温度传感器
作为B节点的CC2530开发板上接了DS18B20温度传感器,采集温度传递给A节点。
这是B节点的程序,在主函数1秒采集一次DS18B20温度数据,然后传递给A节点。
2.2 ESP8266 WIFI模块
作为A节点协调器的CC2530开发板用到了2个串口:
(1)串口0—作为常规调试串口,可以向串口调试助手打印调试信息。
(2)串口1—连接ESP8266 WIFI,进行通信。 P0.4,P0.5用作串口
上面这张图是代码的截图,设置ESP8266的AP热点名称和密码。 把ESP8266接线接好之后,在把程序下载进去。 正常情况下,ESP8266就会创建一个名称为” wbyq_Cortex_M3” 的热点,连接密码为”12345678”, 这是打开手机APP搜索这个WIFI名称,然后连接即可,连接上了,打开专用的手机APP,点击连接服务器,然后就可以收到ESP8266发送过来的温度数据了。
下面这个是代码主函数里,1秒的频率向APP上传DS18B20的温度。
3. 案例代码
3.1 QT设计的上位机
编辑
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++)>
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++)>
审核编辑:汤梓红
最新内容
手机 |
相关内容
分离式光电液位传感器与电容式液位
分离式光电液位传感器与电容式液位传感器对比,传感器,值会,温度,检测,测量,介电常数,分离式光电液位传感器与电容式液位传感器是常强磁场会影响到射频芯片的性能吗?
强磁场会影响到射频芯片的性能吗?,性能,芯片,电磁干扰,屏蔽,结构,信号,强磁场可能会对射频芯片的性能产生影响。AD1580BRTZ-REEL7射浅析动力电池熔断器的基础知识及选
浅析动力电池熔断器的基础知识及选型,动力电池,时切,系统安全,作用,产品,系统,BA4558F-E2动力电池熔断器是用于保护动力电池系统安一文了解PTC热敏电阻(贴片式)
一文了解PTC热敏电阻(贴片式),容量,布局,安装,超过,温度,响应,PTC热敏电阻(Positive Temperature Coefficient Thermistor)是一种热敏如何测量温度传感器的好坏?
如何测量温度传感器的好坏?,温度传感器,测量,精度,效应,性度,评估,FDS6679AZ温度传感器是一种用于测量环境温度的设备,它能够将温度转智能家居中的MEMS传感器
智能家居中的MEMS传感器,传感器,智能家居,控制,用户,温度传感器,系统,MEMS(微机电系统)传感器是智能家居中的关键技术之一。它们是一应用在智能空调中的数字温度传感芯
应用在智能空调中的数字温度传感芯片,数字,芯片,温度,智能,数据,实时,数字温度传感芯片是一种用于测量环境温度的MAX3243CAI集成电除雾传感器为您的安全行车的提供基
除雾传感器为您的安全行车的提供基本保障,传感器,安全行车,除雾,驾驶,手动,安全性,除雾传感器是一种安装在汽车前挡风玻璃上的BQ240