基于W5500+Yeelink的远程灯光控制设计

概述

工具:物联网云平台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[]={//提交温度

“GET /v1.0/device/15804/sensor/27168/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\”:x}\r\n”

};//xx用来填充数值

这其中,device/ID/sensor/ID 这两处ID 已经在Yeelink网站上注册得到,一个是设备ID,一个是设备上的传感器的ID,同时,一个设备可以有若干个传感器。U-ApiKey则是你的身份识别码,同样是注册后获得,只有正确提交U-ApiKey才可以在Yeelink上面更新数据。Content-Length:后面的12,指的就是 {“value”:24} 的长度,更具体的格式可以翻阅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的初始化,初始化工作完成之后,单片机就可以读取数据和向Yeelink发送数据了。W5500EVB作为Yeelink客户端,在向Yeelink上传数据时为TCP连接,所以这里按照TCP的状态机模式写程序。

第25行,socket初始化之后,W5500EVB就向Yeelink发送连接请求,从而完成了每分钟向Yeelink提交一次开关状态。27到50行是建立连接后数据的读取和灯光控制过程。第27行,socket连接建立建立完成,首先把Sn_IR的第0位置1来清空中断,然后向物联网平台提交报文/请求命令,发送成功以后再通过网络读Yeelink平台开关的状态并保存在Buffer中。读到开关状态以后就可以轻松控制LED灯了。。第42行是socket等待关闭状态,这个状态很简单,由于这个状态是一方断开连接,还能够继续向服务器发送数据,所以就和socket建立连接状态基本相同了。第53行,socket关闭状态,打开socket并初始化TCP模式。

int main(void)

{

static uint8 i=0;

uint8 ch=SOCK_HUMTEM;

uint16 anyport=3000;

uint8 server_ip[4]={42,96,164,52};//  api.yeelink.net  的ip地址

RCC_Configuration(); /* 配置单片机系统时钟*/

GPIO_Configuration();/* 配置GPIO*/

NVIC_Configuration();/* 配置嵌套中断向量*/

//  Timer_Configuration();

Systick_Init(72);/* 初始化Systick工作时钟*/

USART1_Init(); /*初始化串口通信:[email protected]*/

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的数据*/

//          printf(“%s\r\n”,Buffer);

Buffer[401]=Buffer[401]-48;

if(Buffer[401]==0)

{

LED3 =1;

printf(“LED OFF\r\n”);

}

else

{

LED3 =0;

printf(“LED ON\r\n”);

}

Delay_ms(200);

close(ch);

//               disconnect(ch);

break;

case SOCK_CLOSE_WAIT:

printf(“Send to Yeelink:OK\r\n”);

break;

case SOCK_CLOSED:

socket(ch, Sn_MR_TCP,anyport++ , 0×00);

break;

default:

break;

}

}

}

四、测试效果

以下视屏是我自己实验的效果,通过点击开关可以看到LED灯的变化。也可以通过手机APP来控制,效果还是可以的。点击开关发现开关颜色会发生变化,如果是绿色就是开,如果是灰色就是关。手机APP端控制按钮标有ON/OFF,可以一目了然。

五、注意事项

1.在申请账号时要注意API KEY,添加设备时会生成一个URL请求,里面提供了设备ID device,传感器ID sensor。

2. 要理解Http方法:Get请求与Post请求的区别

Get是向服务器发送索取数据的一种请求,Get是获取信息,而不是修改信息。而Post是向服务器提交数据的一种请求,Post请求则作为http消息的实际内容发送给web服务器,数据放置在HTML Header内提交,Post没有限制提交的数据。

控制灯光是W5500作为客户端向物联网平台获取信息,获取开关状态来控制LED的亮与灭,所以选用GET请求。

3.把之前得到的API KEY、设备ID、传感器ID添加到程序中的请求报文中

4.好多人可能会发现,得到的开关状态不知道去哪了,也不知道如何得到,我可以给大家提供一个比较简单的方法,当我们从物联网平台Yeelink端得到状态并保存在Buffer后,可以通过串口打印Buffer信息。如图2所示,{“timestamp”:”2014-11-21T17:39:24″,”value”:0}的value后就是开关状态,然后通过打开的测试就可以的到具体的开关状态。

图2  串口打印信息

5.在读取数据的过程中,每读一次数据Socket就要关闭在开一次,但是测试发现在等待关闭的情况读取几次以后就不能正常关闭,如果出现这种问题可以直接关闭Socket后再打开。

演示视频:http://www.iwiznet.cn/blog/?p=6677

By Andy

更多交流:

WIZnet中文官方网站:http://www.iwiznet.cn

WIZnet企业微博:http://weibo.com/wiznet2012

时间: 2024-10-15 01:55:12

基于W5500+Yeelink的远程灯光控制设计的相关文章

基于W5500的实时远程温湿度监控系统

概述 工具:物联网云平台Yeelink  DHT11温湿度传感器   W5500EVB 编译环境:Keil4 目的:通过以太网实时监控远程某个位置的温度和湿度 在W5500EVB端连接DHT11温湿度传感器,并实时读取温度和湿度:通过W5500与网络连接,并与物联网云平台Yeelink中添加设备建立连接:之后系统会将读取的温度和湿度上传到物联网云平台Yeelink,这样就可以随时通过网络观察温度和湿度变化. 物联网云平台Yeelink还提供了一个简单的手机,登陆 Yeelink账号,也可以随时随

基于W5500的嵌入式SNMP代理端实现

 一 实验背景 最近一个做焊接设备的朋友想在焊机上添加监控的新功能,实时获取焊机的温度.功耗等参数,还可简单控制,实现对集群焊接设备的网络化管理.而这个朋友不想在开发管理系统上花太多精力,想找一个开源的管理软件来实现他的需求.这让我想到了简单邮件管理协议SNMP,它生来就是为搞网络管理服务的.能广泛兼容各网络设备,一经推出就得到了广泛的应用和支持,几乎所有的网络设备生产厂家都实现了对SNMP的支持,大多数网络管理系统和平台也都是基于SNMP的.事实上,目前SNMP已成为网络管理领域中的工业标

第七篇:基于物联网/WIFI/单片机的室内灯光控制系统设计论文、开题报告、原理图(全套毕业设计资料,绝对干货,内附下载链接)

首先打个广告:如果需要做毕设以及嵌入式项目合作,欢迎进入我们工作室:创想嵌入式设计工作室 以下时本人独立开发设计的毕设项目课题:<基于WIFI的室内灯光控制系统设计与实现>,现在共享出来供大家参阅,可用于做项目时借鉴,博尾附有下载链接.(内附本人联系方式,可一起交流探讨,交朋友). 针对本课题,本次共享的资料包几乎涵盖毕业设计所需的全部资料:设计方案,开题报告,程序源码,原理图,模块资料,论文,答辩PPT,模块学习资料,等等.本资料包不仅仅适用于"室内灯光控制系统设计与实现"

基于短消息的远程家电红外遥控系统

通过远程广域网控制家电设备是信息家电的主要发展方向之一.由于价格低廉.覆盖面广.使用方便等原因,短消息平台已经成为远程家电控制的重要方法. 本文研究和开发了一种基于短消息的远程红外遥控系统.该系统以Java语言应用程序作为客户控制终端,以短消息作为控制信号的传输平台,以家电常用的红外遥控器作为控制设备,形成了比较完备的远程家电控制系统原型. 本文首先分析了广域网传输技术.家电控制设备.客户控制终端等三个关键技术的选型问题,并据此提出了系统设计的总体结构. 随后,本文介绍了系统的硬件设计,着重讨论

AACOS:基于编译器和操作系统内核的算法设计与实现

AACOS:基于编译器和操作系统内核的算法设计与实现 [计算机科学技术] 谢晓啸 湖北省沙市中学 [关键词]: 编译原理,操作系统内核实现,算法与数据结构,算法优化 0.索引 1.引论 1.1研究内容 1.2研究目的 1.3研究提要 正文 2.1研究方法 2.2编译器部分 2.2.1从计算器程序中得到的编译器制作启示 2.2.2在编译器中其它具体代码的实现 2.2.3编译器中栈的高级应用 2.2.3编译器中树的高级应用 2.2.4编译器与有限状态机 2.3操作系统内核部分 2.3.1操作系统与底

基于STM32的四旋翼飞行器的设计与实现

针对四旋翼飞行控制器姿态数据测量易受干扰.算法实现及设计较为困难等问题,设计并实现了以高性价比的STM32F103VET6微处理器作为主控板的四 旋翼飞行器.选用六轴运动组件MPU6050.电子罗盘HMC5883L及气压计MS5611等传感器对飞行器姿态数据进行了实时采集,并结合卡尔曼滤波 方法对姿态数据进行了数据融合.在控制算法上采用了非线性双闭环PID来实现两组四个电机的转速控制,并通过遥控器对四旋翼飞行器的飞行姿态进行实时调 节.飞行试验表明:基于STM32F103VET6微处理器的四旋翼

射频识别技术漫谈(28)——基于MF1射频卡的酒店门锁设计

电子门锁是现代星级酒店管理电子化.智能化的重要电子设备.相较于传统的机械锁,基于RFID技术的电子门锁使用方便,易于管理,安全性高,可实现对开锁用户的分优先级自动管理,对房间入住信息实现自动统计与报表输出. 1  系统整体分析 MF1 S50和S70卡是遵守ISO14443A国际标准的非接触式逻辑加密卡,S50卡内共有1024字节非易失性存储空间,分为16个扇区,每个扇区包含4个数据块,每个扇区都有一组独立的密码A和B,扇区内的每个数据块都可单独设置存取条件.S70存储结构与S50类似,存储空间

基于能量水平的无线传感器网络拓扑控制研究

基于能量水平的无线传感器网络拓扑控制研究 摘要:在无线传感器网络的规划和设计中,减少节点的能量消耗.延长其工作时间并最大化网络的生命周期是首先要解决的重要问题.本文设计了一种基于节点能量水平的拓扑控制策略,该策略针对汇聚节点附近节点的能量消耗过多而设计,避免了这些节点因能量过早耗尽而导致的网络失效,该机制使网络中的节点能量消耗更加均衡,延长了网络的寿命.最后通过程序仿真验证了该方法的有效性. 关键词:无线传感器网络,能量水平,网络拓扑 一. 提出问题     最小能量消耗路由是从数据源到汇聚节点

基于HBASE的并行计算架构之rowkey设计篇

1.大数据在HBASE存储.计算以及查询的应用场景 海量数据都是事务数据,事务数据都是在时间的基础上产生的.数据的业务时间可能会顺序产生,也可能不会顺序产生,比如某些事务发生在早上10点,但是在下午5点才结束闭并生成出来,这样的数据就会造成存储加载时的时间连续性.另外海量数据的挖掘后产生的是统计数据,统计数据也有时间属性,统计数据如果进行保存必须保证在统计计算之后数据尽量不再变化,如果统计发生后又有新的事务数据产生,那么将重新触发统计计算然后重新保存覆盖原有已经存储的数据.其它数据则主要是以配置