概述
工具:物联网云平台Yeelink DHT11温湿度传感器 W5500EVB
编译环境:Keil4
目的:通过以太网实时监控远程某个位置的温度和湿度
在W5500EVB端连接DHT11温湿度传感器,并实时读取温度和湿度;通过W5500与网络连接,并与物联网云平台Yeelink中添加设备建立连接;之后系统会将读取的温度和湿度上传到物联网云平台Yeelink,这样就可以随时通过网络观察温度和湿度变化。 物联网云平台Yeelink还提供了一个简单的手机,登陆 Yeelink账号,也可以随时随地的观察温度和湿度的变化。
一、物联网云平台Yeelink
Yeelink是一个免费的云平台,旨在利用无线网络、开源硬件和软件,智能手机和App共同打造一个家庭智能中心。图1为Yeelink云平台首页截图。点击“快速开始”,我们可以注册一个账号,登陆后,可以添加自己的设备和传感器。它将复杂的传感器以极简的方式组到同一个网络内,可满足智能家居的各种需求。通过Yeelink提供的数据接口,用户可以把自己的传感器通过互联网接入Yeelink云平台,从而实现随时随地获取传感器数据,为一些智能家居设备接入互联网提供了云平台支持。(http://www.yeelink.net)
图1 物联网云平台Yeelink首页
1. 登陆物联网云平台Yeelink,注册账号。注册账号以后,点击 账户》我的账户设置,可以看到有一个API KEY。
2. 根据开发指南添加设备
同大多数开源平台一样,Yeelink提供的API也是基于HTTP协议提交和接收数据。当我们在Yeelink上创建新的设备,并在设备上添加新的传感器后,会获得相应的设备ID和传感器ID,作为传感器在Yeelink平台上的唯一标识,我们可以使用Yeelink平台提供的URL,更新指定传感器的数据。有关于API文档的详细介绍请参考Yeelink网站,图2是与本节相关的设备添加介绍。
图2 添加设备信息
1) 点击管理设备,选择已经添加的设备,添加你的传感器,完成以后保存信息。
2) 保存以后会看到如图3所示内容。
URL:http://api.yeelink.net/v1.0/device/15855/sensor/27293/datapoints中提供了设备ID和传感器ID,这个会添加到程序中。
图3 设备添加显示页面
二、Yeelink平台API在线调试
1. 点击 API文档》在线调试,打开后在接口项添加生成的URL,在API Key项添加注册账户时生成的API KEY,请求方式选择GET模式,在Post中随意输入数据,如果您建立的设备可以运用,会得到正确回复,如图4所示。
图4 在线调试效果
Request显示了发送给网络的请求,主要注意请求方式,设备的ID号和API key,当然还有Yeelink平台的网址。Response显示恢复状态。
三、系统设计
1.电路设计
以太网控制芯片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存储器用于发送/接收缓存;
DHT11 是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。 DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11 功耗很低,5V 电源电压下,工作平均最大电流 0.5mA。
图5是DHT11跟W5500EVB的电路设计图,比较简单。图6是实物连接图,DHT11上的VCC连接3V3D引脚,GND对应相连,Dout输出连接PA2引脚。通过USB给W5500EVB供电,W5500EVB通过网线与路由器连接,电脑也通过网线与路由器连接,或者连接路由器建立的无线网。
图5 W5500开发板与DHT11的连接电路
图6 实物连接
2.程序设计
本节将Yeelink上传数据的整个过程分为3个文件,main.c主文件实现W5500EVB上传数据的主流程,DHT11.c文件实现dht11对室内温湿度数据的采集,mcu_init.c文件实现W5500EVB的初始化。
为了使程序能方便地组建Yeelink所要求的JSON数据格式,我们把采集到数据直接替代这个字符串中的xx即可,其他的请求命令在上一节的在线调试结果中可以得到。
char postT[]={//提交温度
“POST /v1.0/device/15738/sensor/27051/datapoints HTTP/1.1\r\n”
“Host:api.yeelink.net\r\n”
“Accept:*/*\r\n”
“U-ApiKey:fea57b9cc1ed5ad34d48430785b44e8f\r\n”
“Content-Length:12\r\n”
“Content-Type:application/x-www-form-urlencoded\r\n”
“Connection:close\r\n”
“\r\n”
“{\”value\”:xx}\r\n”
};//xx用来填充数值
这其中,device/ID/sensor/ID 这两处ID 已经在Yeelink网站上注册得到,一个是设备ID,一个是设备上的传感器的ID,同时,一个设备可以有若干个传感器。U-ApiKey则是你的身份识别码,同样是注册后获得,只有正确提交U-ApiKey才可以在Yeelink上面更新数据。Content-Length:后面的12,指的就是 {“value”:xx} 的长度,更具体的格式可以翻阅Yeelink的API文档。需要注意的是,在C语言中,双引号 “”需要使用转义字符。
在分析细节代码之前,我们还是先来看一下主函数。在这里完成了对W5500EVB的初始化,并在主循环里面完成了向Yeelink提交数据。由于这个程序需要访问Yeelink平台,也就要求W5500EVB能访问外网,因此这里我们要确保给W5500配置IP地址能访问外网。置W5500为客户端模式的调用过程:W5500_Init()–>Socket_Init(s)–>Socket_Connect(s),设置过程即完成,并与远程服务器连接。连接后就可以发送数据,在这里,数据发送完成后,链接会被Yeelink断开,下次发送需要重新进行Socket_Init(s)–>Socket_Connect(s)的过程。主程序第7行到第19行实现W5500EVB的初始化,初始化工作完成之后,单片机就可以读取DHT11数据和向Yeelink发送数据了。W5500EVB作为Yeelink客户端,在向Yeelink上传数据时为TCP连接,所以这里按照TCP的状态机模式写程序。第25行,socket初始化之后,W5500EVB就向Yeelink发送连接请求,从而完成了向Yeelink提交温湿度数据。第27行socket连接建立建立完成,首先把Sn_IR的第0位置1来清空中断,然后读取DHT11采集的数据,并保存在数组temp_rh中。第35行把发送的报文格式存在Buffer中;第36、37行是把Request报文中的xx替换成温度值或者湿度值。然后第38行发送请求报文到Yeelink 服务器。第38行切换数据类型,就是进行温度和湿度的切换,断开socket连接。第42行是socket等待关闭状态,这个状态很简单,由于这个状态是一方断开连接,还能够继续向服务器发送数据,所以就和socket建立连接状态基本相同了。第53行,socket关闭状态,打开socket并初始化TCP模式。
继续阅读:http://www.iwiznet.cn/blog/?p=6662
文章评论(0条评论)
登录后参与讨论