tag 标签: dht11

相关帖子
相关博文
  • 热度 2
    2014-12-15 17:54
    427 次阅读|
    0 个评论
    概述   工具: 物联网云平台Yeelink  DHT11温湿度传感器   W5500EVB 编译环境: Keil4 目的: 通过以太网实时监控远程某个位置的温度和湿度 在W5500EVB端连接LED灯,通过W5500与网络连接,并与物联网云平台Yeelink中添加设备建立连接;之后系统会将读取的温度和湿度上传到物联网云平台Yeelink,这样就可以随时通过网络观察温度和湿度变化。 物联网云平台Yeelink还提供了一个简单的手机,登陆 Yeelink账号,也可以随时随地的观察温度和湿度的变化。 一、物联网云平台 Yeelink 物联网云平台Yeelink在之前发的帖子里有简单的介绍,官方网站也有详细的介绍,在此就不再多讲了。如果有问题的可以回复我,谢谢。 图1是设备添加号以后自动生成的一个开关模型,点击它可以控制LED灯的亮灭。   图1 开关设备   二、W5500简介 韩国WIZnet公司生产的以太网控制芯片W5500整合了五层结构中的前四层,即物理层、数据链路层、网络层和传输层,并在内部利用硬件实现了TCP/IP协议栈。开发者无需专业的网络知识,使用W5500如同控制外部存储器一样简单,为用户提供了最简单的网络接入方法。全硬件TCP/IP协议栈完全独立于主控芯片,可以降低主芯片负载且无需移植繁琐的TCP/IP协议栈,便于产品实现网络化更新。   以太网控制芯片W5500具有以下特点: 1、W5500支持硬件TCP/IP协议,包括TCP、UDP、ICMP、IPv4、ARP、IGMP、PPPoE和以太网的PHY和MAC层,TCP/IP协议的硬件实现,使得应用协议的实现更简单容易; 2、支持8个独立的SOCKET同时工作,可同时工作在不同的工作模式; 3、支持掉电模式,并支持网络唤醒,最大程度地减少功率消耗和发热; 4、支持高速SPI接口(SPI MODE 0,3),SPI的时钟最高可达到80MHz,极大地提高了网络通信的数据传输速率; 5、内部集成32KB存储器用于发送/接收缓存; 6、内嵌10BaseT/100BaseTX以太网物理层(PHY); 7、支持自动协商(10/100-Based全双工/半双工); 8、不支持IP分片; 9、工作电压为3.3V,但I/O信号口可承受5V电压; 10、具有多功能LED指示输出(全双工/半双工,网络连接,网络速度,活动状态等); 11、48引脚LQFP无铅封装(7x7mm, 0.5mm 间距)。   三、系统设计 1. 电路设计 电路很简单,在W5500EVB板上有STM32最小系统电路,所有引脚引出,我们只要在任何一个未被占用的端口接入一个LED登就可以。好多爱好者可能没有这个板子,不过没关系。淘宝上有好多W5500的模块,通过SPI方式于你们自己的最小系统连接,再在程序中相应的引脚对应好,就可以方便控制 2. 程序分析 char postT ={42,96,164,52};//  api.yeelink.net  的ip地址 继续阅读:http://www.iwiznet.cn/blog/?p=6677
  • 热度 2
    2014-12-15 17:40
    931 次阅读|
    0 个评论
    概述   工具: 物联网云平台Yeelink  DHT11温湿度传感器   W5500EVB 编译环境: Keil4 目的: 通过以太网实时监控远程某个位置的温度和湿度 在W5500EVB端连接LED灯,通过W5500与网络连接,并与物联网云平台Yeelink中添加设备建立连接;之后系统会将读取的温度和湿度上传到物联网云平台Yeelink,这样就可以随时通过网络观察温度和湿度变化。 物联网云平台Yeelink还提供了一个简单的手机,登陆 Yeelink账号,也可以随时随地的观察温度和湿度的变化。 一、物联网云平台 Yeelink 物联网云平台Yeelink在之前发的帖子里有简单的介绍,官方网站也有详细的介绍,在此就不再多讲了。如果有问题的可以回复我,谢谢。 图1是设备添加号以后自动生成的一个开关模型,点击它可以控制LED灯的亮灭。   图1 开关设备   二、W5500简介 韩国WIZnet公司生产的以太网控制芯片W5500整合了五层结构中的前四层,即物理层、数据链路层、网络层和传输层,并在内部利用硬件实现了TCP/IP协议栈。开发者无需专业的网络知识,使用W5500如同控制外部存储器一样简单,为用户提供了最简单的网络接入方法。全硬件TCP/IP协议栈完全独立于主控芯片,可以降低主芯片负载且无需移植繁琐的TCP/IP协议栈,便于产品实现网络化更新。   以太网控制芯片W5500具有以下特点: 1、W5500支持硬件TCP/IP协议,包括TCP、UDP、ICMP、IPv4、ARP、IGMP、PPPoE和以太网的PHY和MAC层,TCP/IP协议的硬件实现,使得应用协议的实现更简单容易; 2、支持8个独立的SOCKET同时工作,可同时工作在不同的工作模式; 3、支持掉电模式,并支持网络唤醒,最大程度地减少功率消耗和发热; 4、支持高速SPI接口(SPI MODE 0,3),SPI的时钟最高可达到80MHz,极大地提高了网络通信的数据传输速率; 5、内部集成32KB存储器用于发送/接收缓存; 6、内嵌10BaseT/100BaseTX以太网物理层(PHY); 7、支持自动协商(10/100-Based全双工/半双工); 8、不支持IP分片; 9、工作电压为3.3V,但I/O信号口可承受5V电压; 10、具有多功能LED指示输出(全双工/半双工,网络连接,网络速度,活动状态等); 11、48引脚LQFP无铅封装(7x7mm, 0.5mm 间距)。   三、系统设计 1. 电路设计 电路很简单,在W5500EVB板上有STM32最小系统电路,所有引脚引出,我们只要在任何一个未被占用的端口接入一个LED登就可以。好多爱好者可能没有这个板子,不过没关系。淘宝上有好多W5500的模块,通过SPI方式于你们自己的最小系统连接,再在程序中相应的引脚对应好,就可以方便控制 2. 程序分析 char postT ={42,96,164,52};//  api.yeelink.net  的ip地址 RCC_Configuration(); /* 配置单片机系统时钟*/ GPIO_Configuration();/* 配置GPIO*/ NVIC_Configuration();/* 配置嵌套中断向量*/ //  Timer_Configuration(); Systick_Init(72);/* 初始化Systick工作时钟*/ USART1_Init(); /*初始化串口通信:115200@8-n-1*/ at24c16_init();/*初始化eeprom*/ //  printf(“W5500 EVB initialization over.\r\n”); Reset_W5500();/*硬重启W5500*/ WIZ_SPI_Init();/*初始化SPI接口*/ //  printf(“W5500 initialized!\r\n”); set_default(); set_network(); while(1) { switch(getSn_SR(ch)) { case SOCK_INIT: connect(ch, server_ip ,80); break; case SOCK_ESTABLISHED: //case SOCK_CLOSE_WAIT: if(getSn_IR(ch) Sn_IR_CON) { setSn_IR(ch, Sn_IR_CON); } memcpy(Buffer,post,strlen(post)); send(ch,(const uint8 *)Buffer,sizeof(Buffer)); memset(Buffer,0,sizeof(Buffer)); //                  printf(“%d:Socket Send OK\r\n”,ch); recv(ch,Buffer,405);/*W5500接收来自Sever的数据*/   继续阅读:http://www.iwiznet.cn/blog/?p=6677  
  • 热度 3
    2013-8-1 17:28
    607 次阅读|
    0 个评论
    一、 所用器件: 1 、 LEWEI50 E-KIT   (Arduino  UNO+W5100 ) 2 、 DHT11 温湿度传感器 3 、杜邦线 二、 DHT11温湿度上传过程: 1、   下载 Arduino 开发软件 2、   下载类库 https://github.com/lewei50/LeweiTcpClient/archive/LeweiTcpClientLite.zip 3、   下载DHT11温湿度传感器的库 文件   Dht11.zip (3.03 KB, 下载次数: 16) 4、   下载后解压放到 D:\arduino-1.0.5\libraries ,目录下文件名改成 /LeweiTcpClient   5、  打开软件arduino-1.0.5文件夹下面的arduino.exe 6、  打开库文件 ekit_upload_dht11 后修改4个地方 上面的 #define LW_USERKEY  后面分号里面的内容是你的 key ,这个每个人都不一样,刚才注册账户的时候已经记住了。     #define LW_GATEWAY 后面分号里面的内容是网关 ID , 01 是默认,如果你也是 01 则不要修改。      你在乐联网上的设备的标识 7 、用杜邦线连接传感器和 E-kit , dht11 温湿传感器连接, + 接 ekit 的 5V , - 接 GND ,中间的数据接 D2 。       用 usb 线连接 ekit 和电脑,板子上有 usb 转串口的芯片,电脑会提示安装驱动,按照提示安装。 8 、修改好后,另存为 ekit_upload_dht11 ,点击 upload ,下载程序到板子上。下载完成,网线连接到路由器上,就可以上传数据了。 三、自动发微博过程: 1 、乐联网注册一个免费账户 http://www.lewei50.com/home/register 2 、注册后登陆 http://www.lewei50.com/home/login 3 、创建一个网关 (图见文章最下链接) 4 、创建设备 (图见文章最下链接) 5、注册、登陆、创建等过程请自行参考乐联网的入门教程 http://www.lewei50.com/dev/content/about?sk=63 6 、查看你的 key 7、   绑定微博账户 8 、表达式管理 9 、发送微博内容管理 10 、自动发送微博设置 (图见文章最下链接) 11 、乐联网查看数据,数据上传成功!! http://www.lewei50.com/home/gatewaystatus/1026 12 、查看微博 http://weibo.com/u/2722417743?from=profilewvr=5loc=infdomain   测量数据,微博发送成功。   操作视频,参看: (转自:Arduino中文社区)http://www.arduino.cn/forum.php?mod=viewthreadtid=3549   感谢关注! 与我们更多交流,请发送至WIZnet邮箱:wiznetbj@wiznet.co.kr  
  • 热度 4
    2013-8-1 17:23
    809 次阅读|
    2 个评论
    一、 所用器件: 1 、 LEWEI50 E-KIT   (Arduino  UNO+W5100 ) 2 、 DHT11 温湿度传感器 3 、杜邦线 二、 DHT11温湿度上传过程: 1、   下载 Arduino 开发软件 2、   下载类库 https://github.com/lewei50/LeweiTcpClient/archive/LeweiTcpClientLite.zip 3、   下载DHT11温湿度传感器的库 文件    Dht11.zip  (3.03 KB, 下载次数: 16) 4、   下载后解压放到 D:\arduino-1.0.5\libraries ,目录下文件名改成 /LeweiTcpClient   5、  打开软件arduino-1.0.5文件夹下面的arduino.exe 6、  打开库文件 ekit_upload_dht11 后修改4个地方 上面的 #define LW_USERKEY  后面分号里面的内容是你的 key ,这个每个人都不一样,刚才注册账户的时候已经记住了。     #define LW_GATEWAY 后面分号里面的内容是网关 ID , 01 是默认,如果你也是 01 则不要修改。      你在乐联网上的设备的标识 7 、用杜邦线连接传感器和 E-kit , dht11 温湿传感器连接, + 接 ekit 的 5V , - 接 GND ,中间的数据接 D2 。       用 usb 线连接 ekit 和电脑,板子上有 usb 转串口的芯片,电脑会提示安装驱动,按照提示安装。 8 、修改好后,另存为 ekit_upload_dht11 ,点击 upload ,下载程序到板子上。下载完成,网线连接到路由器上,就可以上传数据了。 三、自动发微博过程: 1 、乐联网注册一个免费账户 http://www.lewei50.com/home/register 2 、注册后登陆 http://www.lewei50.com/home/login 3 、创建一个网关 4 、创建设备 5、注册、登陆、创建等过程请自行参考乐联网的入门教程 http://www.lewei50.com/dev/content/about?sk=63 6 、查看你的 key 7、   绑定微博账户 8 、表达式管理 9 、发送微博内容管理 10 、自动发送微博设置 11 、乐联网查看数据,数据上传成功!! http://www.lewei50.com/home/gatewaystatus/1026 12 、查看微博 http://weibo.com/u/2722417743?from=profilewvr=5loc=infdomain   测量数据,微博发送成功。   操作视频,参看: (转自:Arduino中文社区) http://www.arduino.cn/forum.php?mod=viewthreadtid=3549   感谢关注! 与我们更多交流,请发送至WIZnet邮箱:wiznetbj@wiznet.co.kr  
  • 热度 3
    2013-3-24 22:53
    4194 次阅读|
    2 个评论
       第三十六章  DHT11数字温湿度传感器实验、 上一章,我们介绍了数字温度传感器DS18B20的使用,本章我们将介绍数字温湿度传感器DHT11的使用,该传感器不但能测温度,还能测湿度。本章我们将向大家介绍如何使用STM32来读取DHT11数字温湿度传感器,从而得到环境温度和湿度等信息,并把从温湿度值显示在TFTLCD模块上。本章分为如下几个部分: 36.1 DHT11简介 36.2 硬件设计 36.3 软件设计 36.4 下载验证 36.1 DHT11简介 DHT11是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11与单片机之间能采用简单的单总线进行通信,仅仅需要一个I/O口。传感器内部湿度和温度数据40Bit的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11功耗很低,5V电源电压下,工作平均最大电流0.5mA。 DHT11的技术参数如下: l  工作电压范围:3.3V-5.5V l  工作电流 :平均0.5mA l  输出:单总线数字信号 l  测量范围:湿度20~90%RH,温度0~50℃ l  精度 :湿度±5%,温度±2℃ l  分辨率 :湿度1%,温度1℃ DHT11的管脚排列如图36.1.1所示:   图36.1.1 DHT11管脚排列图 虽然DHT11与DS18B20类似,都是单总线访问,但是DHT11的访问,相对DS18B20来说要简单很多。下面我们先来看看DHT11的数据结构。 DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,一次完整的数据传输为40bit,高位先出。DHT11的数据格式为:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和。其中校验和数据为前四个字节相加。 传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。例如,某次从DHT11读到的数据如图36.1.2所示:   图36.1.2 某次读取到DHT11的数据 由以上数据就可得到湿度和温度的值,计算方法: 湿度= byte4 . byte3=45.0 (%RH) 温度= byte2 . byte1=28.0 ( ℃) 校验= byte4+ byte3+ byte2+ byte1=73(=湿度+温度)(校验正确) 可以看出,DHT11的数据格式是十分简单的,DHT11和MCU的一次通信最大为3ms左右,建议主机连续读取时间间隔不要小于100ms。 下面,我们介绍一下DHT11的传输时序。DHT11的数据发送流程如图36.1.3所示:   图36.1.3 DHT11数据发送流程 首先主机发送开始信号,即:拉低数据线,保持t1(至少18ms)时间,然后拉高数据线t2(20~40us)时间,然后读取DHT11的相应,正常的话,DHT11会拉低数据线,保持t3(40~50us)时间,作为响应信号,然后DHT11拉高数据线,保持t4(40~50us)时间后,开始输出数据。  DHT11输出数字‘0’的时序如图36.1.4所示:   图36.1.4 DHT11数字‘0’时序 DHT11输出数字‘1’的时序如图36.1.5所示:   图36.1.5 DHT11数字‘1’时序        通过以上了解,我们就可以通过STM32来实现对DHT11的读取了。DHT11的介绍就到这里,更详细的介绍,请参考DHT11的数据手册。 36.2 硬件设计 由于开发板上标准配置是没有DHT11这个传感器的,只有接口,所以要做本章的实验,大家必须找一个DHT11插在预留的DHT11接口上。 本章实验功能简介:开机的时候先检测是否有DHT11存在,如果没有,则提示错误。只有在检测到DHT11之后才开始读取温湿度值,并显示在LCD上,如果发现了DHT11,则程序每隔100ms左右读取一次数据,并把温湿度显示在LCD上。同样我们也是用DS0来指示程序正在运行。 所要用到的硬件资源如下: 1)  指示灯DS0  2) TFTLCD模块 3)  DHT11温湿度传感器 这些我们都已经介绍过了,DHT11和DS18B20的接口是共用一个的,不过DHT11有4条腿,需要把U13的4个接口都用上,将DHT11传感器插入到这个上面就可以通过STM32来读取温湿度值了。连接示意图如图36.2.1所示:   图36.2.1 DHT11连接示意图        这里要注意,将DHT11贴有字的一面朝内,而有很多孔的一面朝外,然后然后插入如图所示的四个孔内就可以了。 36.3 软件设计 打开上一章的工程,首先在HARDWARE文件夹下新建一个DHT11的文件夹。然后新建一个dht11.c和dht11.h的文件保存在DHT11文件夹下,并将这个文件夹加入头文件包含路径。 打开dht11.c在该文件下输入如下代码: #include "dht11.h" #include "delay.h" //复位DHT11 void DHT11_Rst(void)      {                        DHT11_IO_OUT();      //SET OUTPUT     DHT11_DQ_OUT=0;    //拉低DQ     delay_ms(20);    //拉低至少18ms     DHT11_DQ_OUT=1;    //DQ=1        delay_us(30);            //主机拉高20~40us } //等待DHT11的回应 //返回1:未检测到DHT11的存在 //返回0:存在 u8 DHT11_Check(void)           {          u8 retry=0;        DHT11_IO_IN();//SET INPUT         while (DHT11_DQ_INretry100)//DHT11会拉低40~80us        {               retry++;               delay_us(1);        };           if(retry=100)return 1;        else retry=0;     while (!DHT11_DQ_INretry100)//DHT11拉低后会再次拉高40~80us        {               retry++;               delay_us(1);        };        if(retry=100)return 1;             return 0; } //从DHT11读取一个位 //返回值:1/0 u8 DHT11_Read_Bit(void)                   {       u8 retry=0;        while(DHT11_DQ_INretry100)//等待变为低电平        {               retry++;               delay_us(1);        }        retry=0;        while(!DHT11_DQ_INretry100)//等待变高电平        {               retry++;               delay_us(1);        }        delay_us(40);//等待40us        if(DHT11_DQ_IN)return 1;        else return 0;             } //从DHT11读取一个字节 //返回值:读到的数据 u8 DHT11_Read_Byte(void)     {            u8 i,dat;     dat=0;        for (i=0;i8;i++)        {             dat=1;            dat|=DHT11_Read_Bit();     }                                                return dat; } //从DHT11读取一次数据 //temp:温度值(范围:0~50°) //humi:湿度值(范围:20%~90%) //返回值:0,正常;1,读取失败 u8 DHT11_Read_Data(u8 *temp,u8 *humi)    {              u8 buf ;        u8 i;        DHT11_Rst();        if(DHT11_Check()==0)        {               for(i=0;i5;i++)//读取40位数据               {                      buf =DHT11_Read_Byte();               }               if((buf +buf +buf +buf )==buf )               {                      *humi=buf ;                      *temp=buf ;               }        }else return 1;        return 0;      } //初始化DHT11的IO口 DQ 同时检测DHT11的存在 //返回1:不存在 //返回0:存在        u8 DHT11_Init(void) {        RCC-APB2ENR|=18;    //使能PORTG口时钟        GPIOG-CRH=0XFFFF0FFF;//PORTG.11 推挽输出        GPIOG-CRH|=0X00003000;        GPIOG-ODR|=111;      //输出1                                       DHT11_Rst();        return DHT11_Check(); } 该部分代码就是根据我们前面介绍的单总线操作时序来读取DHT11的温湿度值的,DHT11的温湿度值通过DHT11_Read_Data函数读取,如果返回0,则说明读取成功,返回1,则说明读取失败。保存dht11.c,并把该文件加入到HARDWARE组下,然后我们打开dht11.h,在该文件下输入如下内容: #ifndef __DHT11_H #define __DHT11_H #include "sys.h"   //IO方向设置 #define DHT11_IO_IN()  {GPIOG-CRH=0XFFFF0FFF;GPIOG-CRH|=812;} #define DHT11_IO_OUT() {GPIOG-CRH=0XFFFF0FFF;GPIOG-CRH|=312;} ////IO操作函数                                                                               #define    DHT11_DQ_OUT PGout(11) //数据端口     PG11 #define    DHT11_DQ_IN  PGin(11)  //数据端口     PG11 u8 DHT11_Init(void);           //初始化DHT11 u8 DHT11_Read_Data(u8 *temp,u8 *humi);//读取温湿度 u8 DHT11_Read_Byte(void); //读出一个字节 u8 DHT11_Read_Bit(void);   //读出一个位 u8 DHT11_Check(void);       //检测是否存在DHT11 void DHT11_Rst(void);         //复位DHT11    #endif 此部分代码比较简单,接下来,我们先保存这段代码,然后打开test.c,在该文件下修改main函数如下: int main(void) {                            u8 t=0;                             u8 temperature;                u8 humidity;                 Stm32_Clock_Init(9);           //系统时钟设置        uart_init(72,9600);             //串口初始化为9600        delay_init(72);                         //延时初始化        LED_Init();                        //初始化与LED连接的硬件接口        LCD_Init();                       //初始化LCD        usmart_dev.init(72);             //初始化USMART              KEY_Init();                         //按键初始化       POINT_COLOR=RED;//设置字体为红色        LCD_ShowString(60,50,200,16,16,"WarShip STM32");           LCD_ShowString(60,70,200,16,16,"DHT11 TEST");         LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");        LCD_ShowString(60,110,200,16,16,"2012/9/12");                    while(DHT11_Init())     //DHT11初始化            {               LCD_ShowString(60,130,200,16,16,"DHT11 Error");               delay_ms(200);               LCD_Fill(60,130,239,130+16,WHITE);              delay_ms(200);        }                                                                LCD_ShowString(60,130,200,16,16,"DHT11 OK");        POINT_COLOR=BLUE;//设置字体为蓝色       LCD_ShowString(60,150,200,16,16,"Temp:  C");           LCD_ShowString(60,170,200,16,16,"Humi:  %");           while(1)        {                                  if(t%10==0)//每100ms读取一次               {                                                                                    DHT11_Read_Data(temperature,humidity);          //读取温湿度值                                                          LCD_ShowNum(60+40,150,temperature,2,16);          //显示温度                                          LCD_ShowNum(60+40,170,humidity,2,16);                     //显示湿度                            }                                          delay_ms(10);               t++;               if(t==20)               {                      t=0;                      LED0=!LED0;               }        } } 至此,我们本章的软件设计就结束了。 36.4 下载验证 在代码编译成功之后,我们通过下载代码到ALIENTEK战舰STM32开发板上,可以看到LCD显示开始显示当前的温度值(假定DHT11已经接上去了),如图36.4.1所示:   图36.4.1 DHT11实验效果图 至此,本章实验结束。大家可以将本章通过DHT11读取到的温度值,和前一章的通过DS18B20读取到的温度值对比一下,看看哪个更准确?
相关资源
广告