基于nRF24L01的无线温度采集系统设计

发布者:中原读书客最新更新时间:2011-10-09 关键字:nRF24L01  无线温度采集 手机看文章 扫描二维码
随时随地手机看文章

1 引言
    温度采集系统所采集的温度通常通过RS485、CAN总线通信方式传输至上位机,但这种方式维护较困难,不利于工业现场生产;而无线通信GPRS技术传输距离长,通信可靠稳定,但设计复杂、成本昂贵。这里采用工业级内置硬件链路层协议的低成本单芯片nRF24L01型无线收发器件实现系统间的无线通信,完成无线信号的接收、显示及报警功能。

2 nRF24L01简介
    nRF24L01是一款工业级内置硬件链路层协议的低成本无线收发器。该器件工作于2.4 GHz全球开放ISM频段,内置频率合成器、功率放大器、晶体振荡器、调制器等功能模块,并融合增强型ShockBurst技术,其输出功率和通信频道可通过程序配置。拥有ShockBurst和Enhanced ShockBurst两种数据传输模式。可直接与单片机I/O连接,外接元件数目少。nRF24L01功耗低,以-6 dBm的功率发射时,工作电流仅9 mA;接收时,工作电流仅12.3 mA,多种低功率工作模式(掉电和空闲模式)更利于节能设计。

3 系统硬件设计
    系统硬件设计主要由采集发送和接收显示两部分组成。图1为采集发送电路原理图,该电路主要由温度传感器DS18B20、单片机STC12LE5408和nRF24L01组成。
  

 

  STC12LE5408是增强型8051单片机,速度快,集成度高,电压范围宽(2.2~3.8 V),和MCS-51系列单片机指令系统完全兼容。其内部还有8 KB Flash程序存储器,512字节RAM、2 KB EEPROM、4路PWM以及硬件看门狗(WDT)等资源.性价比高。
    DSl8B20是DALLAS公司生产的单总线数字1-Wire温度传感器,可把温度信号直接转换成串行数字信号供单片机处理,采用1-Wire接口。DSl8B20的数据端DQ可通过4.7 kΩ的上拉电阻接STC12LE5408。nRF24L01的CE,CSN,SCK,MOSI,MISO,IRQ引脚则可接STC12LE5408的任意端口,但需在编程时注意,这里接至P1端口。由于nRF24L01具有接收数据功能,所以接收显示电路由单片机STC12LE5408、nRF24L01和显示电路组成。所采集的数据也通过串口发送至PC机进行处理。
4 系统软件设计
4.1 nRF24L01的软件设置
    由于STC12LE5408无标准的SPI总线接口,需采用软件模拟实现SPI总线。因此应严格按照SPI的时序要求编写,否则导致对nRF24L01的操作失败。nRF24L01的各种命令字都只有一个字节,分为读寄存器、写寄存器、读数据接收缓冲区、写发送数据缓冲区等。在输入任意命令字的同时,MISO输出STATUS寄存器的内容。对RF24L01的读写程序代码如下:

 

  nRF24L01的ShockBurst和Enhanced ShockBurst两种数据模式的区别是:后者比前者多一个确认数据传输的信号,保证数据传输的可靠性。按Enhanced ShockBurst模式初始化,重新发送等待时间为250μs,重新发送次数为10次,地址是RX_ADR_WIDTH,输出功率为0 dBm,速度为1 Mb/s。nRF24L01处于POWER_UP状态。函数中WRITE_REG为写命令基地址0x20。其相关程序如下:


  在接收端将nRF24L01配置为接收模式,地址是RX_AW,负载数据宽度是TX_PL_W,使能接收完数据中断,CRC校验位为2字节,nRF24L01处于POWER_UP状态,其相关程序代码如下:




4.2 数据采集发送子程序
  数据采集发送部分上电后首先配置nRF24L01的相关寄存器.使其工作在发射状态,然后复位DSl8B20,向DSl8B20发送温度转换命令,读取已转换的温度值,然后由nRF24L01发送.其流程如图2所示。



  
  这里需注意DS18B20是单总线器件.其硬件接口比较简单,这是以相对复杂的软件编程为代价的。DS18B20与单片机的接口协议也是通过严格的时序来实现的。虽然增加软件开销,但由于STC12LE5408运行速度快,可以满足系统要求。另外,对DS18B20操作的程序必须按照初始化,ROM操作命令,存储器操作命令,执行/数据的先后顺序进行。如果总线上只挂1个DS18B20,初始化后可执行跳过ROM命令,再发送温度转换命令。温度转换完成后,将温度值暂存在发送缓冲区tx_buf中,然后通过nRF24L01发送,其相关程序代码如下:




4.3 数据接收显示子程序
  nRF24L01在数据接收显示中为接收状态。当nRF24L01模块配置为接收模式后,当接收到数据中断时,从接收FIFO读取数据。然后将其存储到接收缓冲区rX_bur中。其相关程序代码如下:




5 结束语
  本文介绍了nRF24L01和STC12LE5408组成的无线温度采集系统。采用高度集成的nRF24L01器件。大大简化了系统硬件和软件设计,减小了体积,提高了系统工作的可靠性。采用新一代增强型8051单片机STC12LE5408降低了系统成本,缩短了开发时间。实践证明该系统设计简单,成本低廉,通信可靠,运行稳定,性能可靠,具有较高的实用价值。

关键字:nRF24L01  无线温度采集 引用地址:基于nRF24L01的无线温度采集系统设计

上一篇:基于单片机的数字频率计的方案
下一篇:MCS-51指令简介

推荐阅读最新更新时间:2024-03-16 12:42

STC8H开发(五): SPI驱动nRF24L01无线模块
nRF24L01模块 整体介绍和STM32F1, STM32F4, STC12的代码 https://www.cnblogs.com/milton/p/14999884.html 2x4pin模块和USB测试板, Arduino配置 https://www.cnblogs.com/milton/p/8807436.html 利用FIFO队列进行发送速度优化 https://www.cnblogs.com/milton/p/15259485.html 迁移到STC8H 只需要调整SPI发送部分, 为适应nRF24L01的发送方式, 增加了多字节发送方法(节省了字节间拉高拉低CS的GPIO操作) uint8_t SPI_TxRx(
[单片机]
基于C8051F020的多路无线温度采集系统的设计方案
1.引言 随着科技的不断进步,在多数领域中有线连接的方式已经不能满足科技高速发展的要求,无线通信正进入到我们生活中的各个领域,它与有线连接方式相比,具有携带方便、使用灵活、不必考虑走线等优点。在无线报警、工业数据采集、遥控、遥测射频IC卡、手持PDA、无线图像传输、不停车收费、无线抄表等各个方面有着极其广泛的应用。本文所介绍的测温系统也是无线通讯系统的应用之一。它以SOC单片机C8051F020为中央控制器,以CC1000为无线传送模块和温度测量电路构成了多路无线温度采集系统。 将8路的温度数据进行采集,通过无线方式送给主机C8051F020进行处理。 调制解调由CC1000完成,系统采用频移键控调制(FSK),载波频率为433M
[电源管理]
基于C8051F020的多路<font color='red'>无线</font><font color='red'>温度采集</font>系统的设计方案
基于ARM和nRF24L01无线数据传输系统
1 引言       由于无线数据通信不用布线,快速布局,因此具有有线数据通信无法比拟的便捷性,在特殊场合具有不可替代性。然而,传统的由基本射频集成电路搭建的无线数据通信系统存在电路复杂,成本高,传输速率低,可靠性差等缺点。为此,Nordic公司推出一款工业级内置硬件链路层协议的低成本单芯片nRF24L01型无线收发器件。该器件采用GFSK调制,128个频点自动跳频,片内自动生成报头和CRC校验码,具有出错自动重发功能,这些特性使得由nRF24L0l构建的无线数据传输系统具有成本低,速率高,传输可靠等优点。 2 nRF24L01简介       图l给出nRF24L0l的引脚排列。nRF24L01工作于2.4~2.5 GHz
[嵌入式]
51单片机与NRF24L01数据口连接问题解决
很多朋友在调试NRF24L01时,肯定遇到这样的问题,NRF24L01供电是3.3V,最大电压不能超过3.6V,但是89C51电压是5V。NRF24L01电源是好解决,加一个117(3.3V的LDO)就可以了,但是数据口电压怎么解决呢?在网上看到很多人说加一个限流电阻就可以,我在调试时,就用了这个方法,但是用万用表测数据口电压,竟然有4.几V。哎~~~~又报费了一个NRF24L01芯片,最后问了一个硬件工程师,他说是因为电流倒灌所致。解决方法:在每个数据口加一个10K下拉电阻即可,于是我按着他的方法试了一下,果然每个数据口的电压都在3.3V以下。希望朋友们能看到我这篇文章,按这种方法可以解决给你经济损失。 以下是连接图:
[单片机]
基于nRF24L01无线温度采集系统设计
1 引言 温度采集系统所采集的温度通常通过RS485、CAN总线通信方式传输至上位机,但这种方式维护较困难,不利于工业现场生产;而无线通信GPRS技术传输距离长,通信可靠稳定,但设计复杂、成本昂贵。这里采用工业级内置硬件链路层协议的低成本单芯片nRF24L01型无线收发器件实现系统间的无线通信,完成无线信号的接收、显示及报警功能。 2 nRF24L01简介 nRF24L01是一款工业级内置硬件链路层协议的低成本无线收发器。该器件工作于2.4 GHz全球开放ISM频段,内置频率合成器、功率放大器、晶体振荡器、调制器等功能模块,并融合增强型ShockBurst技术,其输出功率和通信频道可通过程序配置。拥有ShockBurst和
[测试测量]
基于<font color='red'>nRF24L01</font>的<font color='red'>无线</font><font color='red'>温度采集</font>系统设计
STM32F103VET6 2.4G通信模块NRF24L01 GPIO模拟SPI的测试例程
自己画的一块基于STM32F103VET6的开发测试板,留有一个NRF24L01+的通信接口,之前买了一些NRF24L01+的模块打算研究一下用上,淘宝上买的比较便宜,可以用于物联网方面的无线应用吧。 做过NRF905的通信,NRF24L01的也是有些相似。网上教程一大堆,我原理上设计为GPIO模拟SPI,因此我找了个GPIO 模拟SPI通信的例程,改了下,开始出了点问题,后来找到原因并解决,通信正常了。 先说一下问题: NRF24L01引脚初始化问题,设置了引脚,但是GPIO初始化时,引脚没有对应上,因此程不跑,串口一直打印 找不到NRF24L01模块,因为有一个检测NRF24L01是否存在的函数。 //上电检
[单片机]
ARM9 2440硬件SPI驱动程序-NRF24L01
从开始接触,到驱动编写调试完成,前前后后花费10多天,网上浏览了一下,目前还没有找到硬件SPI控制NRF24L01的驱动程序,绝大多数都是软件SPI,但是软件SPI不好,不稳定,既然都写驱动程序了,肯定要用硬件SPI啦,这样才能学到东西。学习的过程中,通过看韦东山的SPI视频,和参考他写的两个驱动程序。然后花费了四五天,终于将驱动写好了。 这个驱动可以通过ioctl切换接收和发送模式,通过read,write选择接收数据还是发送数据,废话少说,上代码 #include linux/init.h #include linux/fs.h #include linux/slab.h #include linux/module.h #
[单片机]
基于C8051单片机的无线心电监护系统设计
   1 引言   随着经济的快速发展和人们生活水平的不断提高,健康已成为人们关注的焦点。心脏疾病是危害人类健康的一大杀手,其偶然性与突发性的特点使得心电监护系统具有重要的临床应用价值。由于传统的心电监护仪不能进行远距离的实时监护,所以便携式无线心电监护系统显得更加重要。无线医疗监护系统主要由生理信息与数据采集、无线数据通信、控制和显示等单元组成。目前国内已有用于临床的无线心电监护产品,但其采用的方案大都是“采集器+发送器(PDA或手机)”,从成本上看其价格昂贵;从无线传输方面看,大多是将心电数据以模拟信号传输,这必然导致信号在传输过程中发生失真。此外,由于人体电阻差异导致心电信号在1~10 mV之间变动,固定放大倍数系统缺乏适
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved