温湿度检测系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字0信号表示方法如下图所示
数字1信号表示方法.如下图所示
把DHT11数字温湿度传感器获取温湿度传输到stm32节点板上代码实现
#include "main.h"
#define DHT_DATA(x) x?(GPIOG->ODR|=(0x01<<15)):(GPIOG->ODR&=~(0x01<<15))
Draw_Text_8_16_Str(100,150,RED,BLUE,(unsigned char *)"DHT11 Read Data Error");
else
{
sprintf(nrf_tx_data_buf,"Tem=%2d,Hum=%2d",dht_data[2],dht_data[0]);
GPIOG->CRH|=(0x03<<28);//推挽输出
}
void DHT_IN_MODE(void)
{
GPIOG->CRH&=~(0xFul<<4*7);//清零
GPIOG->CRH|=(0x01<<30);//浮空输入
}
#define TIME_OUT_MAX 0xffff
char config_dht11(void)
{
char i=0, j=0;
uint32_t timeout = TIME_OUT_MAX;
RCC->APBaidu Nhomakorabea2ENR|=(0x01<<8);//开G端口的时钟
DHT_OUT_MODE();//推挽输出
DHT_DATA(1);//拉高
DHT_DATA(0);//拉低
Delay_ms(20);//延时20ms
{
timeout--;
if(!timeout) return 1;
Delay_us(1);
}
timeout = TIME_OUT_MAX;
while(!DHT_DATA_STATA)//等待拉高
{
timeout--;
if(!timeout) return 1;
Delay_us(1);
}
Delay_us(40);
if(DHT_DATA_STATA)
{
//代表数据1
dht_data[i]<<=1;
dht_data[i]+=1;
}else
{
//代表数据0
dht_data[i]<<=1;
}
}
}
if(dht_data[4]==(dht_data[0]+dht_data[1]+dht_data[2]+dht_data[3]))
上升沿发送、下降沿接收、高位先发送。
上升沿到来的时候,sdo 上的电平将被发送到从设备的寄存器中。
下降沿到来的时候,sdi 上的电平将被接收到主设备的寄存器中。
启动SPI总线协议程序:
void SPI2_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //PB13/14/15上拉
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
二、实训安排
时间
实训内容
第一周
实现DHT11数字温湿度传感器获取温湿度,并且把DHT11数字温湿度传感器获取温湿度传输到stm32开发板上。
第二周
实现Linux Ubuntu的环境搭建,模块编程A9开发板,移植NRF24L01无线通信模块
第三周
实现创建阿里云产品和设备,并A9开发板链接阿里云
第四周
实现Android获取阿里云端数据
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );//PORTB时钟使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE );//SPI2时钟使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
DHT_DATA(1);//拉高
Delay_us(30);//延时30us
DHT_IN_MODE();//浮空输入
while(DHT_DATA_STATA)
{
timeout--;
if(!timeout) return 1;
Delay_us(1);
}//等待拉低
timeout = TIME_OUT_MAX;
三、实训报告
3.1项目名称
项目名称:嵌入式远程监测
3.1.1实训内容
1、嵌入式远程监测与语音控制系统包括智能网关(A9内核,Linux Ubuntu操作系统)1个,无线通信节点1个,包含常用的物联网传感器DHT11,STM32开发板,A9开发板。
2、系统每个节点都采用ARM Cortex-M3架构的MCU,可以外接多种传感器以及控制设备。
1.通讯过程如下图所示
总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必 须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后, 等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后, 延时等待20-40us后, 读取DHT11的响应信号,主机发送开始信号后,可以切换到输 入模式,或者输出高电平均可, 总线由上拉电阻拉高。
1、DHT11数字温湿度传感器获取温湿度
2、把DHT11数字温湿度传感器获取温湿度传输到stm32节点板上
DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一 次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数 部分用于以后扩展,现读出为零.操作流程如下:
while(!DHT_DATA_STATA)
{
timeout--;
if(!timeout) return 1;
Delay_us(1);
}//等待拉高
for(i=0;i<5;i++)
{
for(j=0;j<8;j++)
{
timeout = TIME_OUT_MAX;
while(DHT_DATA_STATA)//等待拉低
{
printf("数据正确\r\n");
printf("温度=%d\r\n",dht_data[2]);
printf("湿度=%d\r\n",dht_data[0]);
}else
{
printf("数据错误\r\n");
}
return 0;
}
三、把传感器的数据以及控制设备的状态在2.8寸LCD屏上进行显示
3、同时把传感器的数据以及控制设备的状态在2.8寸LCD屏上进行显示。
4、节点通过NRF24L01无线通信模块,把节点的数据传输到网关。
5、网关再把数据传输到云服务器。
3.1.2实训过程及相关结果
一、采用STM32F103ZE为硬件开发平台,裸板开发驱动程序:
1)关于STM32开发板的介绍
核心处理器:STM32F103ZET6、主频:72MHZ、引脚:144、GPIO口的管脚个数112
1、环境搭建
(1)安装交叉编译器
(2)uboot烧写启动
(3)内核的制作、编译,烧写
(4)文件系统的搭建及securt CRT软件的应用
(5)学习linux系统的基本操作,vim编辑器使用,shell命令使用,熟练使用VI编辑命令和linux常用操作命令。
(6)学习linux系统下驱动开发的基础知识,挂载卸载驱动模块,掌握字符设备驱动程序设计方法。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PB13/14/15复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB
郑州轻工业大学
实训报告
实训名称:嵌入式软件工程实践
姓名:
院(系):
专业班级:
学号:
指导教师:
实习时间:
一、实训目的
(一)实习目的
本实训课程是针对嵌入式软件专业学生专门设计的,通过本课程设置的几个嵌入式综合项目的系统学习,可以使学生由浅入深的对嵌入式Linux系统进行全面学习,能够独立胜任嵌入式Linux应用开发、系统开发、驱动开发等多方面工作,并注重敬业团队精神培养。
(二)方法
本实训课程安排在学校实验室统一进行实训,学生上机独立完成规定实训项目。
(三)任务
要求每位同学独立完成实训题目的编程、调试、优化与测试,并交付使用。要求强化编程思维、编程能力和代码优化的能力,撰写《实训报告》(含:需求分析、总体设计、算法分析及设计中遇到的主要问题和解决方法,设计中尚存的不足与心得体会)。上交完成的所有源程序及相关文件。
2、NRF24L01无线通信模块是使用SPI总线协议,。SPI,是一种高速的,全双工,同步的通信总线, 并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现 在越来越多的芯片集成了这种通信协议。
SPI 是一个环形总线结构,由 ss(cs)、sck、sdi、sdo 构成,其时序其实很简单,主要是在 sck 的控制下,两个双向移位寄存器进行 数据交换。
2)GPIO口
GPIO口是可配置的输入输出口
GPIO口的8种工作模式
输入:上拉输入
下拉输入
浮空输入
模拟输入
输出:
推挽输出
开漏输出
复用推挽输出
复用开漏输出
3)系统滴答定时器
框架:
配置系统滴答定时器所需配置的寄存器
3)点亮一盏LED灯,实现流水灯程序;
4)使用PWM驱动蜂鸣器程序实现。
二 、基于stm32节点板采集温湿度数据
通过汉字取模和图片取模软件,把所需要使用汉字和图片转换代码可以调用,并把DHT11数字温湿度传感器获取温湿度数据传输到LCD屏上。
DHT11数字温湿度传感器驱动程序:
if(dht11_runtime[0]>dht11_runtime[1])
{
dht11_runtime[0]=0;
if(config_dht11())
图二
总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
nrf_tx_data_buf[15] = '\0';
Draw_Text_8_16_Str(100,150,RED,BLUE,(unsigned char *)nrf_tx_data_buf);
NRF24L01_TxPacket((u8 *)nrf_tx_data_buf);
}
}
四、通过NRF24L01无线通信模块将数据传输到A9开发板上。
#define DHT_DATA_STATA (!!(GPIOG->IDR & (0x01<<15)))
unsigned char dht_data[5]={0};
unsigned char temp_value=20;
void DHT_OUT_MODE(void)
{
GPIOG->CRH&=~(0xFUL<<4*7);//清零
1)增强学生的理论联系实际的能力
2)通过实训了解企业项目开发流程和学习新技术的方法
3)通过实训项目了解企业项目开发过程中文档的整理方法和问题的分析方法
4)通过实训项目加强学生对基础课程的运用能力,使其认识到基础知识的重要性
5)通过实训争强学生对本专业和未来工作岗位的理解,端正心态,明确就业目标
6)通过实训争强学生的编程技能,培养其良好的编码风格和编码习惯
一次完整的数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据 +8bit校验和
数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi 温度整数数据+8bit温度小数数据”所得结果的末8位。
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待 主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采 集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度 采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集 数据后转换到低速模式。
数字1信号表示方法.如下图所示
把DHT11数字温湿度传感器获取温湿度传输到stm32节点板上代码实现
#include "main.h"
#define DHT_DATA(x) x?(GPIOG->ODR|=(0x01<<15)):(GPIOG->ODR&=~(0x01<<15))
Draw_Text_8_16_Str(100,150,RED,BLUE,(unsigned char *)"DHT11 Read Data Error");
else
{
sprintf(nrf_tx_data_buf,"Tem=%2d,Hum=%2d",dht_data[2],dht_data[0]);
GPIOG->CRH|=(0x03<<28);//推挽输出
}
void DHT_IN_MODE(void)
{
GPIOG->CRH&=~(0xFul<<4*7);//清零
GPIOG->CRH|=(0x01<<30);//浮空输入
}
#define TIME_OUT_MAX 0xffff
char config_dht11(void)
{
char i=0, j=0;
uint32_t timeout = TIME_OUT_MAX;
RCC->APBaidu Nhomakorabea2ENR|=(0x01<<8);//开G端口的时钟
DHT_OUT_MODE();//推挽输出
DHT_DATA(1);//拉高
DHT_DATA(0);//拉低
Delay_ms(20);//延时20ms
{
timeout--;
if(!timeout) return 1;
Delay_us(1);
}
timeout = TIME_OUT_MAX;
while(!DHT_DATA_STATA)//等待拉高
{
timeout--;
if(!timeout) return 1;
Delay_us(1);
}
Delay_us(40);
if(DHT_DATA_STATA)
{
//代表数据1
dht_data[i]<<=1;
dht_data[i]+=1;
}else
{
//代表数据0
dht_data[i]<<=1;
}
}
}
if(dht_data[4]==(dht_data[0]+dht_data[1]+dht_data[2]+dht_data[3]))
上升沿发送、下降沿接收、高位先发送。
上升沿到来的时候,sdo 上的电平将被发送到从设备的寄存器中。
下降沿到来的时候,sdi 上的电平将被接收到主设备的寄存器中。
启动SPI总线协议程序:
void SPI2_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //PB13/14/15上拉
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
二、实训安排
时间
实训内容
第一周
实现DHT11数字温湿度传感器获取温湿度,并且把DHT11数字温湿度传感器获取温湿度传输到stm32开发板上。
第二周
实现Linux Ubuntu的环境搭建,模块编程A9开发板,移植NRF24L01无线通信模块
第三周
实现创建阿里云产品和设备,并A9开发板链接阿里云
第四周
实现Android获取阿里云端数据
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );//PORTB时钟使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE );//SPI2时钟使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
DHT_DATA(1);//拉高
Delay_us(30);//延时30us
DHT_IN_MODE();//浮空输入
while(DHT_DATA_STATA)
{
timeout--;
if(!timeout) return 1;
Delay_us(1);
}//等待拉低
timeout = TIME_OUT_MAX;
三、实训报告
3.1项目名称
项目名称:嵌入式远程监测
3.1.1实训内容
1、嵌入式远程监测与语音控制系统包括智能网关(A9内核,Linux Ubuntu操作系统)1个,无线通信节点1个,包含常用的物联网传感器DHT11,STM32开发板,A9开发板。
2、系统每个节点都采用ARM Cortex-M3架构的MCU,可以外接多种传感器以及控制设备。
1.通讯过程如下图所示
总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必 须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后, 等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后, 延时等待20-40us后, 读取DHT11的响应信号,主机发送开始信号后,可以切换到输 入模式,或者输出高电平均可, 总线由上拉电阻拉高。
1、DHT11数字温湿度传感器获取温湿度
2、把DHT11数字温湿度传感器获取温湿度传输到stm32节点板上
DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一 次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数 部分用于以后扩展,现读出为零.操作流程如下:
while(!DHT_DATA_STATA)
{
timeout--;
if(!timeout) return 1;
Delay_us(1);
}//等待拉高
for(i=0;i<5;i++)
{
for(j=0;j<8;j++)
{
timeout = TIME_OUT_MAX;
while(DHT_DATA_STATA)//等待拉低
{
printf("数据正确\r\n");
printf("温度=%d\r\n",dht_data[2]);
printf("湿度=%d\r\n",dht_data[0]);
}else
{
printf("数据错误\r\n");
}
return 0;
}
三、把传感器的数据以及控制设备的状态在2.8寸LCD屏上进行显示
3、同时把传感器的数据以及控制设备的状态在2.8寸LCD屏上进行显示。
4、节点通过NRF24L01无线通信模块,把节点的数据传输到网关。
5、网关再把数据传输到云服务器。
3.1.2实训过程及相关结果
一、采用STM32F103ZE为硬件开发平台,裸板开发驱动程序:
1)关于STM32开发板的介绍
核心处理器:STM32F103ZET6、主频:72MHZ、引脚:144、GPIO口的管脚个数112
1、环境搭建
(1)安装交叉编译器
(2)uboot烧写启动
(3)内核的制作、编译,烧写
(4)文件系统的搭建及securt CRT软件的应用
(5)学习linux系统的基本操作,vim编辑器使用,shell命令使用,熟练使用VI编辑命令和linux常用操作命令。
(6)学习linux系统下驱动开发的基础知识,挂载卸载驱动模块,掌握字符设备驱动程序设计方法。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PB13/14/15复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB
郑州轻工业大学
实训报告
实训名称:嵌入式软件工程实践
姓名:
院(系):
专业班级:
学号:
指导教师:
实习时间:
一、实训目的
(一)实习目的
本实训课程是针对嵌入式软件专业学生专门设计的,通过本课程设置的几个嵌入式综合项目的系统学习,可以使学生由浅入深的对嵌入式Linux系统进行全面学习,能够独立胜任嵌入式Linux应用开发、系统开发、驱动开发等多方面工作,并注重敬业团队精神培养。
(二)方法
本实训课程安排在学校实验室统一进行实训,学生上机独立完成规定实训项目。
(三)任务
要求每位同学独立完成实训题目的编程、调试、优化与测试,并交付使用。要求强化编程思维、编程能力和代码优化的能力,撰写《实训报告》(含:需求分析、总体设计、算法分析及设计中遇到的主要问题和解决方法,设计中尚存的不足与心得体会)。上交完成的所有源程序及相关文件。
2、NRF24L01无线通信模块是使用SPI总线协议,。SPI,是一种高速的,全双工,同步的通信总线, 并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现 在越来越多的芯片集成了这种通信协议。
SPI 是一个环形总线结构,由 ss(cs)、sck、sdi、sdo 构成,其时序其实很简单,主要是在 sck 的控制下,两个双向移位寄存器进行 数据交换。
2)GPIO口
GPIO口是可配置的输入输出口
GPIO口的8种工作模式
输入:上拉输入
下拉输入
浮空输入
模拟输入
输出:
推挽输出
开漏输出
复用推挽输出
复用开漏输出
3)系统滴答定时器
框架:
配置系统滴答定时器所需配置的寄存器
3)点亮一盏LED灯,实现流水灯程序;
4)使用PWM驱动蜂鸣器程序实现。
二 、基于stm32节点板采集温湿度数据
通过汉字取模和图片取模软件,把所需要使用汉字和图片转换代码可以调用,并把DHT11数字温湿度传感器获取温湿度数据传输到LCD屏上。
DHT11数字温湿度传感器驱动程序:
if(dht11_runtime[0]>dht11_runtime[1])
{
dht11_runtime[0]=0;
if(config_dht11())
图二
总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
nrf_tx_data_buf[15] = '\0';
Draw_Text_8_16_Str(100,150,RED,BLUE,(unsigned char *)nrf_tx_data_buf);
NRF24L01_TxPacket((u8 *)nrf_tx_data_buf);
}
}
四、通过NRF24L01无线通信模块将数据传输到A9开发板上。
#define DHT_DATA_STATA (!!(GPIOG->IDR & (0x01<<15)))
unsigned char dht_data[5]={0};
unsigned char temp_value=20;
void DHT_OUT_MODE(void)
{
GPIOG->CRH&=~(0xFUL<<4*7);//清零
1)增强学生的理论联系实际的能力
2)通过实训了解企业项目开发流程和学习新技术的方法
3)通过实训项目了解企业项目开发过程中文档的整理方法和问题的分析方法
4)通过实训项目加强学生对基础课程的运用能力,使其认识到基础知识的重要性
5)通过实训争强学生对本专业和未来工作岗位的理解,端正心态,明确就业目标
6)通过实训争强学生的编程技能,培养其良好的编码风格和编码习惯
一次完整的数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据 +8bit校验和
数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi 温度整数数据+8bit温度小数数据”所得结果的末8位。
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待 主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采 集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度 采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集 数据后转换到低速模式。