CC2530的DHT11驱动,可用于协议栈!!!
- 格式:docx
- 大小:13.82 KB
- 文档页数:7
【⽆线通信篇Zstack协议栈】CC2530ZigbeeZstack协议栈组⽹项⽬及详细讲解篇物联⽹⽆线通信技术,ZigBee⽆线传感⽹络CC2530最⼤的特点就是⼀个拥有⽆线收发器(RF)的单⽚机,既能实现单⽚机功能,也能实现⽆线传输Zstack协议栈是ZigBee协议栈⾥的翘楚,是ZigBee组⽹的⾸选协议栈项⽬实现功能:l 总共有三个端点,⼀个协调器和两个终端节点l 终端节点1连接DHT11温湿度传感器,定时上传给协调器l 终端节点2连接LED,可以通过协调器按键控制,定时上报LED开关状态l 协调器连接12864 OLED 屏幕,实时显⽰温湿度和LED状态l 协调器可以通过按键控制终端2的LED开关,控制后将会显⽰控制结果扩展功能(当前未实现,可进⼀步开发实现):l 连接协调器串⼝,将终端节点采集的数据通过串⼝发送,PC写上位机实现数据展⽰l 连接WIFI或者4G模块,WIFI模块如ESP8266,实现数据局域⽹⽆线传输或者上传到OneNET、机智云、阿⾥云、⾃⼰开发云服务器等,实现WEB或⼿机APP显⽰和控制。
⼀、项⽬测试(可想⽽知,⼴州的天⽓有多热,39℃了都)实现功能汇总:l 总共有三个端点,⼀个协调器和两个终端节点l 终端节点1连接DHT11温湿度传感器,定时上传给协调器l 终端节点2连接LED,可以通过协调器按键控制,定时上报LED开关状态l 协调器连接12864 OLED 屏幕,实时显⽰温湿度和LED状态l 协调器可以通过按键控制终端2的LED开关,控制后将会显⽰控制结果(⼀) 环境汇总芯⽚:CC2530F256Zstack协议栈:ZStack-CC2530-2.5.1a编程环境:IAR(⼆) 引脚分配协调器:128*64 OLED 0.96⼨屏幕供电:3.3V通信协议:IIC引脚:SDA P0_6SCL P0_7按键:IO:P0_1下降沿触发中断终端1:DHT11:通信⽅式:单总线协议供电:3.3VIO:P0_6终端2:LEDIO:P1_0说明:⾼电平点亮,低电平熄灭⼆、基础认识(⼀) CC2530单⽚机CC2530最⼤的特点就是⼀个拥有⽆线收发器(RF)的单⽚机,既能实现单⽚机功能,也能实现⽆线传输。
cc2530试题及答案一、单选题(每题2分,共10分)1. CC2530芯片的内核是什么?A. Cortex-M3B. Cortex-M4C. Cortex-M7D. ARM7答案:A2. CC2530芯片的Flash存储容量是多少?A. 128KBB. 256KBC. 512KBD. 1MB答案:B3. CC2530芯片的SRAM存储容量是多少?A. 32KBB. 64KBC. 128KBD. 256KB答案:B4. 下列哪个接口不是CC2530芯片支持的?A. SPIB. I2CC. CAND. USB答案:D5. CC2530芯片的无线通信协议是什么?A. ZigBeeB. BluetoothC. Wi-FiD. Z-Wave答案:A二、多选题(每题3分,共15分)1. CC2530芯片支持的无线通信协议包括以下哪些?A. ZigBeeB. 6LoWPANC. ThreadD. Bluetooth答案:A, B2. 下列哪些特性是CC2530芯片具备的?A. 低功耗B. 高性能C. 大容量存储D. 多核处理器答案:A, B3. CC2530芯片的外设接口包括以下哪些?A. UARTB. ADCC. PWMD. DAC答案:A, B, C4. 下列哪些是CC2530芯片的通信接口?A. SPIB. I2CC. USARTD. CAN答案:A, B, D5. CC2530芯片的电源管理功能包括以下哪些?A. 睡眠模式B. 省电模式C. 关闭模式D. 唤醒模式答案:A, B, C三、判断题(每题2分,共10分)1. CC2530芯片是基于ARM Cortex-M3内核的。
(对)2. CC2530芯片的Flash存储容量为512KB。
(错)3. CC2530芯片支持USB接口。
(错)4. CC2530芯片支持CAN通信协议。
(对)5. CC2530芯片的SRAM存储容量为128KB。
(错)四、简答题(每题5分,共20分)1. 请简述CC2530芯片的主要应用场景。
文件名: 协议栈网络管理ZigBee 协议栈网络管理这章内容主要是对新加入的设备节点的设备管。
我们都知道每个CC2530 芯片出厂时候都有一个全球唯一的32 位MAC 地址。
当时当设备连入网络中的时候,每个设备都能获得由协调器分配的16 位短地址,协调器默认地址(0x0000)。
很多时候网络就是通过短地址进行管理。
注意:1.先安装好PL2302 USB转串口驱动,转备好USB线,连接计算机与接收模块。
2.需要两个或者两个以上模块,分别用于协调器、路由器、终端。
●实验目的:学习如何使用TI提供的协议栈,进行网络管理。
●实验步骤:1.打开工程文件:协议栈的无线数据传输\Projects\zstack\Samples\SampleApp\CC2530DB\ SampleApp,分别选择EndDeviceEB-Pro, RouterEB-Pro,CoordintorEB-Pro,分别下载到三个模块中,如下图所示。
2.连接计算机与协调器模块,可以看到协调器接收到数据。
实验结果:将修改后的程序分别以协调器、路由器、终端的方式下载到3个或以上设备,协调器连接到PC机。
上电后每个设备往协调器发送自身编号,协调器通过串口显示出来。
具体实验:要实现协调器收集数据的功能,可以使用点播方式传输数据,点播地址为协调器地址(0x0000),避免了路由器和终端之间的互传,减少网络数据拥塞。
在samplApp.c中修改发送数据函数为:void SampleApp_SendPointToPointMessage( void ){uint8 device;//设备类型变量if ( SampleApp_NwkState == DEV_ROUTER )device=0x01; //编号1表示路由器else if (SampleApp_NwkState == DEV_END_DEVICE)device=0x02;//编号2表示终端elsedevice=0x03;//编号3表示出错if ( AF_DataRequest( &Point_To_Point_DstAddr, //发送设备类型编号&SampleApp_epDesc,SAMPLEAPP_POINT_TO_POINT_CLUSTERID,1,&device,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){}}修改完成后系统设备自动检测自己烧写的类型,然后发送对应的编号。
基于ZigBee技术的温湿度远程监测系统设计学生:陈园(指导老师:吴琰)(淮南师范学院电子工程学院)摘要: 针对目前温室大棚农作物大面积种植,迫切需要科学的方法进行智能远程监测的研究现状,设计出一套温湿度远程监测系统。
该系统是有多个采集终端和一个协调控制器组成。
多个终端分别放置不同的大棚内进行实时采集数据,协调控制器的作用就是将多个采集终端通过无线传输过来的的数据进行分析并和PC机连接。
PC机上运行上位机软件实时的监测各大棚的温湿度信息。
多个终端和协调控制器均采用TI公司新一代CC2530芯片;温湿度传感器采用市场上比较流行的DHT11;无线传输采用ZigBee协议;上位机软件采用labVIEW编写,并通过RS-232与协调控制器连接通信。
通过实物测试了ZigBee无线传输的稳定可靠性,丢包率在误差范围内。
温湿度采集有0.5s延时时间,满足实时性要求。
关键词:终端;协调控制器;DHT11;CC2530;ZigBee;上位机Design of Remote Monitoring System for Temperature andHumidity based on ZigBee TechnologyStudent: Chen Yuan(Faculty Adviser:Wu Yan)(college of electronic engineering, Huainan Normal University)Abstract:According to the current situation of the research on the intelligent remote monitoring of greenhouse crops, the research status of intelligent remotemonitoring is urgently needed, and a set of remote monitoring system fortemperature and humidity is designed. The system is composed of a plurality ofacquisition terminals and a coordinated controller. Multiple terminals are placed indifferent greenhouses for real-time collection of data, the role of the coordinationcontroller is to collect more than one collection terminal through wireless datatransmission over the data analysis and PC machine connection. Temperature andhumidity information operation software of PC real-time monitoring of thegreenhouse on PC. A plurality of terminals and a coordinated controller are used ina new generation of CC2530 chip of TI company; temperature and humidity sensorused on the market more popular DHT11; wireless transmission based on ZigBeeprotocol; PC software using LabVIEW, and connected with the communicationthrough the RS-232 and coordination controller. The reliability of ZigBee wirelesstransmission stability test through the physical, the packet loss rate is in the rangeof error. Temperature and humidity acquisition 0.5s time delay, meet the real-timerequirements.Keywords:Terminal; coordination controller; DHT11;CC2530; ZigBee; host computer1. 绪论1.1 设计背景和研究意义现如今我国已经成为世界第一粮食生产大国,据有关统计说明,我国农作物设施栽培面积已经超过210万hm2。
学科探素Disciplines Exploration基于ZigBee无线通讯的粮库温湿度监控系统祁建伟姜丕杰赵天阳卢志荣(辽宁工业大学辽宁•锦州121001)摘要本文针对目前粮库温湿度检测与控制存在的问题,提出了一种基于ZigBee无线通讯系统温湿度监控系统。
采用DHT11温湿度模块进行温湿度采集,通过ZigBee组网,与上位机通信.如果温度或湿度超出参数设定的范围,系统报警,并且利用风机控制湿度、空调控制温度,或者二者并用控制温湿度.保证粮食在一个合适的环境中存储.关键词温湿度监控DHT11ZigBee粮库中图分类号:TN98 文献标识码:A DOI:10.16400/ki.kjdks.2019.11.021Temperature and Humidity Monitoring System of Grain DepotBased on ZigBee Wireless CommunicationQI Jianwei,JIANG Pijie,ZHAO Tianyang,LU Zhirong(Liaoning University of Technology,Jinzhou,Liaoning121001)Abstract In this paper,a temperature and humidity monitoring system based on ZigBee wireless communication system is proposed to solve the problems of temperature and humidity detection and control in grain depots.DHT11temperature and humidity module is used to collect temperature and humidity,and ZigBee network is used to communicate with the host compute匸If the temperature or humidity exceeds the range set by the parameters,the system alarms,and uses the fan to control the humidity,air conditioning to control the temperature,or both to control the temperature and humidity.Ensure that food is stored in an appropriate environment.Keywords temperature and humidity monitoring;DHT11;ZigBee;grain depot1系统方案设计本文是基于ZigBee无线通讯网络进行粮库温湿度控制系统设计。
一共5个文件:BH1750FVI.c、BH1750FVI.h、I2C.c、I2C.h、zComDef.h BH1750FVI.c#include "I2C.h"#include "BH1750FVI.h"/********************************************************************** MACROS*//********************************************************************** CONSTANTS*//********************************************************************** TYPEDEFS*//********************************************************************** GLOBAL VARIABLES*//********************************************************************** GLOBAL FUNCTIONS*//********************************************************************** LOCAL VARIABLES*//********************************************************************** LOCAL FUNCTIONS*/static void BH1750_Write_Cmd(uint8_t cmd);static void BH1750_Read(uint8_t* BUF);static float BH1750_Convert(uint8_t* BUF);/********************************************************************** EXTERN VARIABLES*//********************************************************************** EXTERN FUNCTIONS*//************************************************************************ * 函数名:void BH1750_Init(void)* 功能:初始化BH1750* 参数:NONE* 返回值:NONE* 调用函数:void I2C_Init(void)* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:*************************************************************************/ void BH1750_Init(void){I2C_Init();}/************************************************************************ * 函数名:void BH1750_Write_Cmd(uint8_t cmd)* 功能:向BH1750 写入命令* 参数:cmd:要写入的命令* 返回值:NONE* 调用函数:void I2C_Start(void)void I2C_WriteByte(uint8_t txd)uint8_t I2C_WaitAck(void)void I2C_Stop(void)void I2C_Delay_ms(uint32_t time)* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:*************************************************************************/ static void BH1750_Write_Cmd(uint8_t cmd){I2C_Start(); // 起始信号I2C_WriteByte(BH1750_Addr+0); // 发送设备地址+写信号while(I2C_WaitAck());I2C_WriteByte(cmd); // 部寄存器地址while(I2C_WaitAck());//BH1750_SendByte(REG_data); // 部寄存器地址I2C_Stop(); // 发送停止信号I2C_Delay_ms(5);}/************************************************************************ * 函数名:void BH1750_Read(void)* 功能:读取BH1750 的值* 参数:NONE* 返回值:NONE* 调用函数:void I2C_Start(void)void I2C_WriteByte(uint8_t txd)uint8_t I2C_WaitAck(void)uint8_t I2C_ReadByte(uint8_t ack)void I2C_Stop(void)void I2C_Delay_ms(uint32_t time)* 引用全局变量:BUF:存储BH1750 读取到的数据* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:*************************************************************************/ static void BH1750_Read(uint8_t* BUF){I2C_Start(); // 起始信号I2C_WriteByte(BH1750_Addr+1); // 发送设备地址+读信号while(I2C_WaitAck());BUF[0]=I2C_ReadByte(1); // 发送ACKBUF[1]=I2C_ReadByte(0); // 发送NACKI2C_Stop(); // 停止信号I2C_Delay_ms(5);}/************************************************************************ * 函数名:void BH1750_Convert(void)* 功能:将BH1750 读取到的数据转换成光照值* 参数:NONE* 返回值:NONE* 调用函数:NONE* 引用全局变量:BUF:存储BH1750 读取到的数据result_lx:光照值* 函数全局变量:* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:*************************************************************************/ static float BH1750_Convert(uint8_t* BUF){float value_light = 0;uint16_t result = 0;result = BUF[0];result = (result<<8) + BUF[1]; //o?3éêy?Y£??′1a??êy?Yvalue_light = (float)result/1.2;return value_light;}/************************************************************************ * 函数名:float Get_LightValue(void)* 功能:获取光照值* 参数:NONE* 返回值:NONE* 调用函数:void BH1750_Write_Cmd(uint8_t cmd)void I2C_Delay_ms(uint32_t time)void BH1750_Read(uint8_t* BUF)float BH1750_Convert(uint8_t* BUF)* 引用全局变量:* 函数全局变量:* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:*************************************************************************/float Get_LightValue(void){uint8_t BUF[2] = {0};BH1750_Write_Cmd(BH1750_ON); // power onBH1750_Write_Cmd(BH1750_RSET); // clearBH1750_Write_Cmd(BH1750_ONE); // 一次H分辨率模式,至少120ms,之后自动断电模式I2C_Delay_ms(400); // 延时400msBH1750_Read(BUF); // 连续读出数据,存储在BUF中return (BH1750_Convert(BUF));}BH1750FVI.h#ifndef __BH1750FVI_H#define __BH1750FVI_H#include <iocc2530.h>#include "zComDef.h"/********************************************************************** MACROS*//********************************************************************** CONSTANTS*/#define BH1750_Addr 0x46 // ADDR 接地时的地址#define BH1750_ON 0x01 // 通电#define BH1750_CON 0x10 // 连续H 分辨率模式#define BH1750_ONE 0x20 // 一次H 分辨率模式,测量后自动设置为断电模式#define BH1750_RSET 0x07 // 重置数组寄存器值,重置指令在断电模式下不起作用/********************************************************************** TYPEDEFS*//********************************************************************** VARIABLES*//********************************************************************* * FUNCTIONS*//*初始化BH1750**/void BH1750_Init(void);/*获取光照值**/float Get_LightValue(void);#endifI2C.c#include "I2C.h"/********************************************************************* * MACROS*/#define NOP() asm("NOP")/********************************************************************* * CONSTANTS*//********************************************************************* * TYPEDEFS*//********************************************************************* * GLOBAL VARIABLES*//********************************************************************** GLOBAL FUNCTIONS*//********************************************************************** LOCAL VARIABLES*//********************************************************************** LOCAL FUNCTIONS*//********************************************************************** EXTERN VARIABLES*//********************************************************************** EXTERN FUNCTIONS*//************************************************************************ * 函数名:static void I2C_Delay_10us(uint32_t time)* 功能:延时x 个10us* 参数:time:传入时间值,单位:10us* 返回值:NONE* 调用函数:NONE* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ static void I2C_Delay_10us(uint32_t time){while(time--){NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();}}/************************************************************************ * 函数名:static void I2C_Delay_ms(uint32_t time)* 功能:延时x 毫秒* 参数:time:传入时间值,单位:ms* 返回值:NONE* 调用函数:static void I2C_Delay_10us(uint32_t time)* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ void I2C_Delay_ms(uint32_t time){while(time--){I2C_Delay_10us(100);}}/************************************************************************ * 函数名:void I2C_Init(void)* 功能:初始化I2C GPIO 口* 参数:NONE* 返回值:NONE* 调用函数:NONE* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ void I2C_Init(void){I2C_SCL_OUTPUT();I2C_SDA_OUTPUT();I2C_SCL_HIGH();I2C_SDA_HIGH();}/************************************************************************ * 函数名:static void I2C_SCL_OUTPUT(void)* 功能:SCL引脚设置为输出模式* 参数:NONE* 返回值:NONE* 调用函数:NONE* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ void I2C_SCL_OUTPUT(void){// 配置P1_2 脚为输出模式P1SEL &= ~(1<<2);P1DIR |= (1<<2);}/************************************************************************ * 函数名:static void I2C_SCL_INPUT(void)* 功能:SCL引脚设置为输入模式* 参数:NONE* 返回值:NONE* 调用函数:NONE* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ void I2C_SCL_INPUT(void){// 配置P1_2 脚为输入模式P1SEL &= ~(1<<2);P1DIR &= ~(1<<2);P1INP &= ~(1<<2);P2INP &= ~(1<<6);}/************************************************************************ * 函数名:static void I2C_SDA_OUTPUT(void)* 功能:SDA引脚设置为输出模式* 参数:NONE* 返回值:NONE* 调用函数:NONE* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ void I2C_SDA_OUTPUT(void){// 配置P1_3 脚为输出模式P1SEL &= ~(1<<3);P1DIR |= (1<<3);}/************************************************************************ * 函数名:static void I2C_SDA_INPUT(void)* 功能:SCL引脚设置为输入模式* 参数:NONE* 返回值:NONE* 调用函数:NONE* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ void I2C_SDA_INPUT(void){// 配置P1_3 脚为输入模式P1SEL &= ~(1<<3);P1DIR &= ~(1<<3);P1INP &= ~(1<<3);P2INP &= ~(1<<6);}/************************************************************************ * 函数名:static void I2c_Start(void)* 功能:启动I2C* 参数:NONE* 返回值:NONE* 调用函数:void I2C_SCL_OUTPUT(void)void I2C_SDA_OUTPUT(void)static void I2C_Delay_10us(uint32_t time)* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ void I2C_Start(void){I2C_SCL_OUTPUT();I2C_SDA_OUTPUT();I2C_SDA_HIGH();I2C_SCL_HIGH();I2C_Delay_10us(1);I2C_SDA_LOW();I2C_Delay_10us(1);I2C_SCL_LOW();}/************************************************************************ * 函数名:static void I2C_Stop(void)* 功能:停止I2C* 参数:NONE* 返回值:NONE* 调用函数:void I2C_SCL_OUTPUT(void)void I2C_SDA_OUTPUT(void)static void I2C_Delay_10us(uint32_t time)* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ void I2C_Stop(void){I2C_SCL_OUTPUT();I2C_SDA_OUTPUT();I2C_SDA_LOW();I2C_SCL_LOW();I2C_Delay_10us(1);I2C_SCL_HIGH();I2C_SDA_HIGH();I2C_Delay_10us(1);}/************************************************************************ * 函数名:uint8_t I2C_WaitAck(void)* 功能:等待I2C 响应* 参数:NONE* 返回值:I2C 响应状态* 调用函数:void I2C_SCL_OUTPUT(void)void I2C_SDA_OUTPUT(void)void I2C_SDA_INPUT(void)static void I2C_Delay_10us(uint32_t time)void I2C_Stop(void)* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ uint8_t I2C_WaitAck(void){uint8_t ErrTime = 0;// 将SCL 引脚和SDA 引脚设置为输出模式I2C_SCL_OUTPUT();I2C_SDA_OUTPUT();I2C_SDA_HIGH(); // SDA 置高I2C_SCL_HIGH(); // SCL 置高I2C_Delay_10us(1);I2C_SDA_INPUT(); // SDA 设置为输入模式while(I2C_SDA_STATE())// 当SDA 为低电平时退出循环{ErrTime++;if(ErrTime>250){I2C_Stop();return 1;}}I2C_SCL_LOW();return 0;}/************************************************************************ * 函数名:static void I2C_SendAcknowledge(void)* 功能:产生ACK 应答* 参数:NONE* 返回值:NONE* 调用函数:void I2C_SCL_OUTPUT(void)void I2C_SDA_OUTPUT(void)static void I2C_Delay_10us(uint32_t time)* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ void I2C_SendAcknowledge(void){I2C_SCL_OUTPUT();I2C_SDA_OUTPUT();I2C_SDA_LOW();I2C_SCL_LOW();I2C_Delay_10us(1);I2C_SCL_HIGH();I2C_Delay_10us(1);}/************************************************************************ * 函数名:static void I2C_SendNoAcknowledge(void)* 功能:不产生ACK 应答* 参数:NONE* 返回值:NONE* 调用函数:void I2C_SCL_OUTPUT(void)void I2C_SDA_OUTPUT(void)static void I2C_Delay_10us(uint32_t time)* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ void I2C_SendNoAcknowledge(void){I2C_SCL_OUTPUT();I2C_SDA_OUTPUT();I2C_SCL_LOW();I2C_SDA_HIGH();I2C_Delay_10us(1);I2C_SDA_HIGH();I2C_Delay_10us(1);I2C_SCL_LOW();}/************************************************************************ * 函数名:static uint8_t I2C_WriteByte(uint8_t byte)* 功能:写字节数据* 参数:byte:写入字节数据* 返回值:NONE* 调用函数:void I2C_SCL_OUTPUT(void)void I2C_SDA_OUTPUT(void)static void I2C_Delay_10us(uint32_t time)* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ void I2C_WriteByte(uint8_t txd){uint8_t t = 0;I2C_SCL_OUTPUT();I2C_SDA_OUTPUT();for(t=0; t<8; t++){if((txd&0x80)>>7){I2C_SDA_HIGH();}else{I2C_SDA_LOW();}txd<<=1;I2C_Delay_10us(1);I2C_SCL_HIGH();I2C_Delay_10us(1);I2C_SCL_LOW();I2C_Delay_10us(1);}}/************************************************************************ * 函数名:static uint8_t I2C_ReadByte(void)* 功能:读取字节数据* 参数:NONE* 返回值:读取的有效字节* 调用函数:void I2C_SDA_INPUT(void)static void I2C_Delay_10us(uint32_t time)void I2C_SendNoAcknowledge(void)* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:无*************************************************************************/ uint8_t I2C_ReadByte(uint8_t ack){uint8_t i = 0;uint8_t receive = 0;I2C_SDA_INPUT();for(i=0; i<8; i++){I2C_SCL_LOW();I2C_Delay_10us(1);I2C_SCL_HIGH();receive <<= 1;if(I2C_SDA_STATE()){receive++;}I2C_Delay_10us(1);}if(!ack){I2C_SendNoAcknowledge();}else{I2C_SendAcknowledge();}return receive;}I2C.h#ifndef __I2C_H#define __I2C_H#include "iocc2530.h"#include "ZComDef.h"/********************************************************************** MACROS*/#define I2C_SCL_HIGH() (P1_2=1) /*置SCL高电平*/ #define I2C_SCL_LOW() (P1_2=0) /*置SCL底电平*/#define I2C_SDA_HIGH() (P1_3=1) /*置SDA高电平*/ #define I2C_SDA_LOW() (P1_3=0) /*置SDA底电平*/#define I2C_SCL_STATE() P1_2 /*读SCL电平*/#define I2C_SDA_STATE() P1_3 /*读SDA电平*//********************************************************************** CONSTANTS*//********************************************************************** TYPEDEFS*/typedef enum{ACK_OK = 0x00,ACK_ERROR = 0x01}I2C_AckState;/********************************************************************** VARIABLES*//********************************************************************** FUNCTIONS*//*SCL引脚设置为输出模式**/void I2C_SCL_OUTPUT(void);/*SCL引脚设置为输入模式**/void I2C_SCL_INPUT(void);SDA引脚设置为输出模式**/void I2C_SDA_OUTPUT(void);/*SCL引脚设置为输入模式**/void I2C_SDA_INPUT(void);/*初始化I2C GPIO 口**/void I2C_Init(void);/*启动I2C**/void I2C_Start(void);/*停止I2C**/void I2C_Stop(void);/*产生ACK 应答**/void I2C_SendAcknowledge(void); /*不产生ACK 应答**/void I2C_SendNoAcknowledge(void); /*等待I2C 响应**/uint8_t I2C_WaitAck(void);/*读取字节数据**/uint8_t I2C_ReadByte(uint8_t ack); /*:写字节数据**/void I2C_WriteByte(uint8_t txd);/*延时x 毫秒**/void I2C_Delay_ms(uint32_t time);#endifzComDef.h#ifndef __ZCOMDEF_H#define __ZCOMDEF_Htypedef char int8_t;typedef unsigned char uint8_t; typedef short int16_t;typedef unsigned short uint16_t; typedef long int32_t;typedef unsigned long uint32_t; #endif。
基于CC2530及ZigBee协议栈设计无线网络传感器节点①章伟聪,俞新武,李忠成(浙江万里学院智能控制研究所,宁波 315101)摘 要:针对智能家居、环境监测等的实际要求,设计了一种远距离通讯的无线传感器节点。
该系统采用集射频与控制器于一体的第二代片上系统CC2530为核心模块,外接CC2591射频前端功放模块;软件上基于ZigBee2006协议栈,在ZStack通用模块基础上实现应用层各项功能。
介绍了基于ZigBee协议构建无线数据采集网络,给出了传感器节点、协调器节点的硬件设计原理图及软件流程图。
实验证明节点性能良好、通讯可靠,通讯距离较TI第一代产品有明显增大。
关键词:传感器节点;CC2530;ZigBee;CC2591;无线传感器网络Wireless Network Sensor Node Design Based on CC2530 and ZigBee Protocol StackZHANG Wei-Cong, YU Xin-Wu, LI Zhong-Cheng(Intelligent Control Research Institute, Zhejiang Wanli University, Ningbo 315101, China)Abstract: According to the actual needs of intelligent household, environmental monitoring etc, this paper designed a wireless sensor node of long-distance communication system. This system used the second SoC CC2530 set in RF and controller chips as the core module and externally connected with CC2591 RF front-end power amplifier module. Based on ZigBee2006 in software agreement stack, it realized each application layer function based on ZStack. It also introduced wireless data acquisition networks based on the ZigBee agreement construction, and has given the hardware design schematic diagram and the software flow chart of sensor node, synchronizer node. The experiment proved that the node is good in performance and the communication is reliable. The communication distance has increased obviously compared with the first generation TI product.Key words: sensor node; CC2530; CC2591; wireless sensor networksZigBee[1]是一种新兴的短距离、低速率无线网络技术,是基于IEEE802.15.4无线标准研制开发的,关于组网、安全和应用软件的技术标准。
2021年 / 第12期 物联网技术430 引 言随着物联网、无线通信和人工智能等技术的不断成熟及商业化,智能设备也开始在各行业中广泛应用,同时也为进一步完善危险品仓库环境监测系统提供了新的解决方案。
在仓库管理行业中,智能设备具有机械化工作失误率低和可全天候工作等特性,与人工相比拥有巨大优势。
目前很多仓库都应用了物联网技术,但大部分只是在存取管理方面做到了智能化,而对于仓库的安全性,特别是危险品仓库的环境监测仍然存在很大漏洞。
例如“8·12”天津滨海新区爆炸事故,“7·11”成都化工仓库爆炸事故,这两起事故本可避免,但由于管理者对仓库环境疏于监测,导致危险因素未及时被发现,最终给人们的生命财产带来巨大损失,甚至对自然环境造成难以修复的损坏。
综合以上所述,危险品仓库环境监测系统需要对目前的仓库管理技术进行完善,针对不同的存储物品建设更加个性化的环境监测系统,以此来保障危险品仓库的安全,降低危险情况的发生率[1]。
本设计借助ZigBee 技术进行库房内部无线传感网络的组网,以TI 公司出品的CC2530芯片为核心,搭配Z-Stack 协议栈,完成无线传感器网络节点的软硬件设计。
通过构建实时监测危险品仓库环境参数和智能反向预警系统(可根据用户需求灵活增减传感器),监测不同环境参数并控制各硬件实现对应的功能,使系统更加人性化和智能化[2]。
1 系统总体设计控制系统主要包括加装了WiFi 大功率通信模块的ZigBee 协调器节点、路由器、以太网、ZigBee 无线双向通信以及本地控制端。
监测系统主要包括ZigBee 无线双向通信、MQ-2烟雾传感器以及DHT11传感器等。
系统框架如图1所示。
图1 系统框架检测系统中的路由器是整个仓库环境监测系统中最为重要的部分,它负责连接内外两个网络,不仅需要将内部网络中ZigBee 节点收集的环境数据上传至云端服务器,还需要获取外部网络中客户端发送的控制指令,并将其发送至内部网络[3]。
基于CC2530的ZigBee无线组网温度监测系统的设计麦军;邓巧茵;万智萍【摘要】Temperature has a very important impact on life, temperature changinginformation must bemonitoring in real-time. This design uses CC2530 chip as the processor plus CC2591 RF front-end consisting of ZigBee protocol for wireless networks;using DHT11 temperature sensor to collected temperature information and analyzed by LPC1114 chip; the main module receives each node transmits temperature data and then transmitted to PCvia RS232 serial port, PC analysis temperature information and then interact data in the form of chart, enabling users to predicted the changes in temperature trends.%温度对生活有着极其重要的影响,实时监测温度信息的变化成为必须.本设计使用CC2530芯片作处理器加上射频前端CC2591组成ZigBee协议的无线网络通信模块; 使用DHT11温度传感器采集到的温度信息通过LPC1114芯片进行采集并分析;主模块接收各个节点传送回来的温度数据,通过RS232串口传送到上位机,上位机对温度信息进行分析然后把数据以图表的形式进行交互,方便用户查看温度的变化还可预测温度趋势.【期刊名称】《电子设计工程》【年(卷),期】2015(023)022【总页数】5页(P117-121)【关键词】CC2530芯片;ZigBee技术;LPC1114芯片;DHT11温度传感器;实时温度监测【作者】麦军;邓巧茵;万智萍【作者单位】中山大学新华学院信息科学系, 广东广州 510520;中山大学新华学院信息科学系, 广东广州 510520;中山大学新华学院信息科学系, 广东广州510520【正文语种】中文【中图分类】TN919现代生产、生活都与温度息息相关,温度作为人们日常生活指标,影响着人们的行为活动,根据温度高低的不同继而进行应对,温度也影响着各种生命资源的存在,温度是构成地球上多种多样生命的重要因素之一。
共2个文件:DHT11.c和DHT11.hDHT11.c#include "DHT11.h"/************************************************ 函数名称:Set_32MHZ* 功能:设置系统时钟为32MHZ* 参数列表:无* 返回值:无************************************************/void Set_32MHZ(void){CLKCONCMD &= ~0x40; //系统时钟源为32MHZ晶振;while(CLKCONSTA & 0x40); //等待时钟稳定;CLKCONCMD &= ~0x47; //系统主时钟频率:32MHZ;}/********************************************************** ** dht11.c************************************************************///32MHZ us延时函数;#pragma optimize=nonevoid dht11_delay_us(unsigned int n){n>>=1;while(n--){asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");}}void delay_ms(uint32_t time){while(time--){dht11_delay_us(1000);}}unsigned char dht11_read_byte(void){unsigned char r_val = 0;unsigned char t_count = 0; //计时器,防止超时;unsigned char i;for(i = 0 ; i < 8 ; i++){t_count = 0;//低电平50us后开始一个数据位读取;while( !DHT11_PIN ){asm("NOP");t_count++;if(t_count > 250) //超时;return 100;}t_count = 0;dht11_delay_us(32);//高电平26~28us表示'0',70us表示'1'if( DHT11_PIN == 1 ){r_val <<= 1;r_val |= 1;else{r_val <<= 1;continue;}//等待DHT11数据输出结束;while( DHT11_PIN == 1){asm("NOP");t_count++;if(t_count>250){return 100;}}}return r_val;}char dht11_value(unsigned char *temp , unsigned char *humi , unsigned char flag) {unsigned char t_count = 0; //计时器;unsigned char h_i = 0 , h_f = 0;unsigned char t_i = 0 , t_f = 0;unsigned char check_sum = 0;DHT11_PIN_OUT();DHT11_PIN_L(); //输出低电平;//低电平持续时间必须大于18ms;delay_ms(40); //40ms;DHT11_PIN_H(); //主机结束信号;//主机等待20us~40us,读取DHT11响应输出;dht11_delay_us(30);DHT11_PIN_IN();if(DHT11_PIN == 0) //正确的响应输出;{while( !DHT11_PIN )asm("NOP");t_count++;if(t_count > 250) //超时;return -1;}t_count = 0;dht11_delay_us(50); //DHT11给出响应输出后会拉高总线80us; while( DHT11_PIN ); //等待接收;{asm("NOP");t_count++;if(t_count > 250) //超时;return -1;}h_i = dht11_read_byte(); //湿度整数部分;h_f = dht11_read_byte(); //湿度小数部分;t_i = dht11_read_byte(); //温度整数部分;t_f = dht11_read_byte(); //温度小数部分;check_sum = dht11_read_byte(); //校验和;//校验和正确或者温湿度整数部分获取正确即表示获取成功!if(check_sum == ( h_i + h_f + t_i + t_f ) || (h_i != 100 && t_i != 100) ) {if(flag == DHT11_STRING){temp[0] = t_i/10+0x30;temp[1] = t_i%10+0x30;humi[0] = h_i/10+0x30;humi[1] = h_i%10+0x30;}else{*temp = t_i;*humi = h_i;}}else{if(flag == DHT11_STRING){temp[0] = '0';temp[1] = '0';humi[0] = '0';humi[1] = '0';}else{*temp = 0;*humi = 0;}return -1;}}else{if(flag == DHT11_STRING){temp[0] = '0';temp[1] = '0';humi[0] = '0';humi[1] = '0';}else{*temp = 0;*humi = 0;}return -1;}return 0;}DHT11.h#ifndef __DHT11_H#define __DHT11_H#include <iocc2530.h>#include "zComDef.h"#define DHT11_PIN P0_7 //数据引脚//引脚配置为输出;#define DHT11_PIN_OUT() { P0DIR |= 1<<7; asm("NOP"); }//引脚配置为输入;#define DHT11_PIN_IN() { P0DIR &= ~(1<<7); asm("NOP"); }//拉高数据线;#define DHT11_PIN_H() { DHT11_PIN = 1; asm("NOP"); }//拉低数据线;#define DHT11_PIN_L() { DHT11_PIN = 0; asm("NOP"); }void Set_32MHZ(void);/*************************************************32MHZ us延时函数;*************************************************/void dht11_delay_us(unsigned int n);void delay_ms(uint32_t time);/************************************************************************* 读DHT11传感器;读取成功返回读取值,失败返回100(超过DHT11范围);*************************************************************************/ unsigned char dht11_read_byte(void);/****************************************************************************** *******获取温湿度数值;读取成功返回0,失败返回-1第一个参数为温度,第二个参数为湿度,第三个参数为类型(DHT11_STRING or DHT11_UINT8) 用法举例:例一:unsigned char temp , humi;char r_val;r_val = dht11_value(&temp , &humi , DHT11_UINT8);例二:unsigned char temp[2],humi[2];char r_val;r_val = dht11_value(temp , humi , DHT11_STRING);******************************************************************************* ******/#define DHT11_STRING 1#define DHT11_UINT8 2char dht11_value(unsigned char *temp , unsigned char *humi , unsigned char flag);#endif。