基于stm32的无线多点温度采集系统设计
本科时候做过关于ds18b20温度传感器的课程设计,当时好像是先用单片机A采集温度,其中用矩阵键盘设置报警值,然后通过232串口将温度值传给单片机B,单片机B上的数码管显示,同时单片机B的矩阵键盘也可以设置报警值。我当时搞A和B通信这块,至于老师给的分数就不提了。后来学习stm32,想着用stm32通过单总线采集8个ds18b20的值,在通过无线传给另一个stm32,另一个stm32通过串口发给电脑,电脑上的上位机显示8个温度值。
stm32选用的stm32rct6,无线模块选用的是nrf24l01,温度传感器是ds18b20。其中DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
温度传感器通过单总线协议与stm32进行通讯,对于温度传感器的就不在介绍了,可以百度它的中文手册。至于单点采集,就是将ds18b20的DQ与STM32的一个管脚相连,然后地接地,VCC接VCC,而采集8个点无非就是将8个温度传感器并联,这里我用到是PE4作为信号线,因为每个ds18b20都有一个独特的64位序列号,从而允许多个ds18b20同时连在一根单总线上。STM32依靠每个温度传感器独有的64位片序列号辨认总线上的器件,对8个点的温度分别进行采集,首先要知道每个ds18b20的序列号,读取序列号的程序如下:
有了这8个序列码,就可以通过匹配序列号的原则,对8个点的温度进行采集。其中匹配程序如下:
void DS18B20_Match_Serial(u8 a)
{
u8 i;
u8 id1[8]={0x28,0xee,0x59,0x52,0x18,0x16,0x02,0x08};
u8 id2[8]={0x28,0xee,0xfb,0x49,0x18,0x16,0x02,0x14};
u8 id3[8]={0x28,0xee,0x36,0x52,0x18,0x16,0x02,0x76};
u8 id4[8]={0x28,0xee,0xa5,0x43,0x18,0x16,0x02,0x38};
u8 id5[8]={0x28,0xee,0x77,0x42,0x18,0x16,0x02,0x6a};
u8 id6[8]={0x28,0xee,0xb8,0x4b,0x18,0x16,0x02,0xb4};
u8 id7[8]={0x28,0xee,0xd4,0x49,0x18,0x16,0x02,0x83};
u8 id8[8]={0x28,0xee,0xce,0x4c,0x18,0x16,0x02,0xc3};
u8 id9[8]={0x28,0xee,0x13,0x4b,0x18,0x16,0x02,0xf7};
u8 id10[8]={0x28,0xee,0xc5,0x44,0x18,0x16,0x02,0xaf};
DS18B20_Reset();
DS18B20_Write_Byte(0X55);//发匹配ROM指令
if(a==1)
{
for(i=0;i<8;i++)
DS18B20_Write_Byte(id1[i]);
}
else if(a==2)
{
for(i=0;i<8;i++)
DS18B20_Write_Byte(id2[i]);
}
else if(a==3)
{
for(i=0;i<8;i++)
DS18B20_Write_Byte(id3[i]);
}
else if(a==4)
{
for(i=0;i<8;i++)
DS18B20_Write_Byte(id4[i]);
}
else if(a==5)
{
for(i=0;i<8;i++)
DS18B20_Write_Byte(id5[i]);
}
else if(a==6)
{
for(i=0;i<8;i++)
DS18B20_Write_Byte(id6[i]);
}
else if(a==7)
{
for(i=0;i<8;i++)
DS18B20_Write_Byte(id7[i]);
}
else if(a==8)
{
for(i=0;i<8;i++)
DS18B20_Write_Byte(id8[i]);
}
然后就是读取温度值函数:
double DS18B20_Get_wd(u8 b)
{
u8 TL=0,TH=0;
u16 temp=0;
double wd=0;
DS18B20_Reset();//复位
DS18B20_Write_Byte(0xCC); //忽略ROM指令
DS18B20_Match_Serial(b); //进行匹配
DS18B20_Write_Byte(0x44); //得到温度
delay_ms(800);
DS18B20_Reset();
DS18B20_Write_Byte(0xCC);
DS18B20_Match_Serial(b);
DS18B20_Write_Byte(0xBE);
TL=DS18B20_Read_Byte();
TH=DS18B20_Read_Byte();
temp=TH;
temp=(temp<<8)+TL;
if((temp&0xF800)==0xF800)//判断正负
{
temp=~temp;
temp=temp+1;
wd=temp*(-0.0625);
}
else
{
wd=temp*0.0625;
}
return wd;
}
STM32(A)把采集的温度值处理后,发送的程序如下:
NRF24L01_TX_Mode();//发送模式while(1){ temp1=DS18B20_Get_wd(1);temp2=DS18B20_Get_wd(2);temp3=DS18B20_Get_wd(3);temp4=DS18B20_Get_wd(4);temp5=DS18B20_Get_wd(5);temp6=DS18B20_Get_wd(6);temp7=DS18B20_Get_wd(7);temp8=DS18B20_Get_wd(8);sprintf( tmp_buf, "%.1f", temp1);//浮点转字符sprintf( tmp_buf1, "%.1f", temp2 );sprintf( tmp_buf2, "%.1f", temp3 );sprintf( tmp_buf3, "%.1f", temp4); sprintf( tmp_buf4, "%.1f", temp5 );sprintf( tmp_buf5, "%.1f", temp6 );sprintf( tmp_buf6, "%.1f", temp7 );sprintf( tmp_buf7, "%.1f", temp8 );strcat(tmp_buf,tmp_buf1);//字符拼接strcat(tmp_buf,tmp_buf2);strcat(tmp_buf,tmp_buf3);strcat(tmp_buf,tmp_buf4);strcat(tmp_buf,tmp_buf5);strcat(tmp_buf,tmp_buf6);strcat(tmp_buf,tmp_buf7);NRF24L01_TxPacket(tmp_buf);//打包发送}
NRF24L01_RX_Mode();
while(1)
{
NRF24L01_RxPacket(tmp_buf);//打包接受
delay_ms(1000);//发现不延时的话,VB上位机接受不到数据
printf("%s\r\n",tmp_buf);//发给上位机(96 N 8 1 格式)
}
基于stm32的无线多点温度采集系统设计相关推荐
- 基于射频NRF无线多点温度采集显示系统设计(毕设课设)
1.一个主机可采集1~18路从机温度 2.主机与电脑之前通过MODBUS RTU协议通信,9600,8,N,1 3.温度超限报警,继电器控制输出,达到报警温度继电器断开. 4.从机锂电池超低功耗供电, ...
- 基于ZigBee 的多点温度采集系统设计与实现
摘要:针对广阔空间环境温度采集系统对功耗及成本的要求,设计了基于无线传感网络技术的多点温度采集系统.以CC2430 为主控芯片,选用DS18B20 作为温度采集节点的传感器,基于ZigBee 协议栈构 ...
- 多点温度采集系统设计c语言,单片机多点(八路)DS18B20温度采集系统仿真与源码...
#include #include #define DATA P1 //1602驱动端口 //ROM操作命令 #define ...
- STM32单片机三线制PT100温度采集控制系统LCD12864显示器
实践制作DIY- GC0096-三线制PT100温度采集控制系统 一.功能说明: 基于STM32单片机设计-三线制PT100温度采集控制系统 功能介绍: STM32F103C系列最小系统班+PT100 ...
- 基于数字电路交通灯信号灯控制系统设计-基于单片机病房温度监测与呼叫系统设计-基于STM32的无线蓝牙心电监护仪系统设计-基于STM32的智能蓝牙温控风扇控制设计-基于STM32的智能温室控制系统设计
1617基于数字电路交通灯信号灯控制系统设计(仿真电路,论文报告) 摘 要:交通灯控制系统在城市交通控制中发挥着重要的作用,本次课程设计就是以城市交通灯控制系统为背景的,主要通过运用学过的数字电路 ...
- 基于STM32的智能温室控制系统仿真电路设计(温控补光)-基于STM32的智能蓝牙温控风扇控制系统设计-基于STM32的无线蓝牙心电监护仪系统设计【毕设课设分享】
1609 基于STM32的智能蓝牙温控风扇控制系统设计-毕设课设 1.LCD1602液晶显示当前温度,温度上下限值,风扇等级,自动手动模式: 2.设置有4个按键,按键1可以设置自动和手动2种模式切换: ...
- 带内部参考电压(VREFINT)校正的STM32 DMA 内置温度采集
笔者今天来介绍一下STM32ADC内置温度的采集,重点是通过内置参考电压来避免ADC参考电压VDDA对温度ADC采集的影响. 1.STM32ADC简介 stm32F4系列ADC,逐次趋近型AD.1 ...
- 基于STM32物联网WiFi智能家居控制系统设计(原理图+源代码+系统资料)
基于STM32物联网WiFi智能家居控制系统设计(原理图+源代码+系统资料) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 设计编号:C0053 主要功能: 1. ...
- 基于STM32的无线通信模块使用——A7130
基于STM32的无线通信模块使用-A7130 2.4G Hz的无线通信芯片A7130.本文简单介绍A7130的使用. 注:相关资源在这里 A7130简介 A7130 SPI接口 A7130寄存器配置及 ...
- 基于STM32的无线飞鼠(二)
基于STM32的无线飞鼠(二) 在前一篇博客中讲了下一些题外话,从本篇开始讲讲重点的知识,说说无线飞鼠过程用到的模块 细说MPU6050 一. MPU6050简介 二. 细节问题 三. 相关技术 四. ...
最新文章
- 行业盛会!2018中国人体微生物组大会
- HTML5仿微信聊天界面、微信朋友圈实例
- linux系统运维面试题
- 游戏设计、原型与开发:基于Unity与C#从构思到实现pdf
- 给AI换个“大动力小心脏”之OCR异构加速
- java aop 实例_Spring aop 简单示例
- 用matlab解一维单势垒波函数,一维多势垒结构准束缚态的MATLAB分析计算
- 用Keras搭建神经网络 简单模版(三)—— CNN 卷积神经网络(手写数字图片识别)...
- H5 FileReader对象
- CreateThread函数--创建线程
- MinIO之C#上传文件等各项操作
- 如何更换tomcat版本
- 谷歌云服务器的ip是什么ip,看到有人在问谷歌云的IP段问题,我推荐几个自用觉得不错的...
- 视频下载v1.0全能短视频解析
- 锐捷交换机配置手册完整
- cruzer php sandisk 闪迪u盘量产工具_SanDisk Cruzer Micro(闪迪U盘量产助手)V1.1 最新版
- JPEG中Huffman解码实例讲解
- xio you c语言 程序设计入门——函数的定义
- css背景颜色和图片
- Ubuntu / Windows 查看域名系统 (Domain Name System,DNS)
热门文章
- iOS 元素定位方式总结
- php 网站实例,php网站实例【货币问答】- php网站实例所有答案 - 联合货币
- python科赫雪花递归理解_科赫雪花的python3实现(递归,非递归)
- Next主题 - 图片设置
- 横向合计代码 锐浪报表_[原创]锐浪报表动态加入列和最后加入合计列+进度条显示...
- Ansys APDL的超声换能器的模态分析(更新中)
- 程序员自学能学会吗?我是自学的,努力比天分重要
- 操作系统实验ucore lab1
- 密码只靠大脑记好累,有没有试过用群晖NAS来记?
- 【Python 小白到精通 | 课程笔记】第三章:数据处理就像侦探游戏(函数和包)