概述

工具:物联网云平台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协议的硬件实现,使得应用协议的实现更简单easy;

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. 电路设计

电路非常easy,在W5500EVB板上有STM32最小系统电路,全部引脚引出,我们仅仅要在不论什么一个未被占用的port接入一个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为client模式的调用过程:W5500_Init()–>Socket_Init(s)–>Socket_Connect(s),设置过程即完毕,并与远程server连接。连接后就能够发送数据,在这里,数据发送完毕后。链接会被Yeelink断开,下次发送须要又一次进行Socket_Init(s)–>Socket_Connect(s)的过程。

主程序第7行到第19行实现W5500EVB的初始化,初始化工作完毕之后,单片机就能够读取数据和向Yeelink发送数据了。

W5500EVB作为Yeelinkclient。在向Yeelink上传数据时为TCP连接。所以这里依照TCP的状态机模式敲代码。

第25行。socket初始化之后,W5500EVB就向Yeelink发送连接请求,从而完毕了每分钟向Yeelink提交一次开关状态。

27到50行是建立连接后数据的读取和灯光控制过程。第27行,socket连接建立建立完毕。首先把Sn_IR的第0位置1来清空中断,然后向物联网平台提交报文/请求命令,发送成功以后再通过网络读Yeelink平台开关的状态并保存在Buffer中。读到开关状态以后就行轻松控制LED灯了。。

第42行是socket等待关闭状态。这个状态非常easy,因为这个状态是一方断开连接,还可以继续向server发送数据。所以就和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(); /*初始化串口通信: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的数据*/

//          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端控制button标有ON/OFF,能够一目了然。

五、注意事项

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

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

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

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

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

4.好多人可能会发现。得到的开关状态不知道去哪了。也不知道怎样得到,我能够给大家提供一个比較简单的方法。当我们从物联网平台Yeelink端得到状态并保存在Buffer后,能够通过串口打印Buffer信息。

如图2所看到的,{“timestamp”:”2014-11-21T17:39:24″,”value”:0}的value后就是开关状态,然后通过打开的測试就能够的到详细的开关状态。

attachment_id=6679" rel="attachment wp-att-6679" style="margin:0px; padding:0px; border:0px; font-family:inherit; font-size:undefined; font-style:inherit; font-variant:inherit; font-weight:inherit; line-height:inherit; vertical-align:baseline; color:rgb(33,117,155); text-decoration:none">

图2  串口信息打印

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

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

p=6677

By Andy

很多其它交流:

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

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

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

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

     一 实验背景 近期一个做焊接设备的朋友想在焊机上加入监控的新功能,实时获取焊机的温度.功耗等參数,还可简单控制,实现对集群焊接设备的网络化管理.而这个朋友不想在开发管理系统上花太多精力,想找一个 ...

  2. 基于ESP32的智能家居管理系统的设计与实现

    基于ESP32的智能家居管理系统的设计与实现 ESP32的智能家居管理系统访问链接: https://www.cnblogs.com/easyidea/p/13101165.html 一.需求分析 1 ...

  3. 基于 Angularjs&Node.js 云编辑器架构设计及开发实践

    基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...

  4. 基于特定领域国土GIS应用框架设计及应用

              基于特定领域国土GIS应用框架 设计及应用              何仕国 2012年8月16日   摘要: 本文首先讲述了什么是框架和特定领域框架,以及与国土GIS 这个特定领 ...

  5. 【科研论文】基于文件解析的飞行器模拟系统软件设计(应用W5300)

    摘要: 飞行器模拟系统是复杂飞行器研制和使用过程中的重要设备,它可以用来模拟真实飞行器的输入输出接口,产生与真实系统一致的模拟数据,从而有效避免因使用真实飞行器带来的高风险,极大提高地面测发控系统的研 ...

  6. 基于UML的高校教务管理系统的设计与实现

    一.基本信息 标题:基于UML的高校教务管理系统的设计与实现 时间:2018 出版源:南昌航空大学 领域分类:教育信息化:教务管理系统:UML:SSH:Oracle 二.研究背景 问题定义:高校教务管 ...

  7. 远程桌面控制项目开发(Spring+Netty+Swing)

    [目录] 1.前言 2.初现端倪 3.款款深入 4.责任细分 5.功能层级图 6.项目结构 7.关键类设计 8.一些设计想法 9.待优化 10.一点心得 11.效果演示 12.讨论 13.GitHub ...

  8. 基于Redis的限流系统的设计

    本文讲述基于Redis的限流系统的设计,主要会谈及限流系统中限流策略这个功能的设计:在实现方面,算法使用的是令牌桶算法来,访问Redis使用lua脚本.   1.概念 In computer netw ...

  9. 基于React的贪吃蛇游戏的设计与实现

    代码地址如下:http://www.demodashi.com/demo/11818.html 贪吃蛇小游戏(第二版) 一年半前层用react写过贪吃蛇小游戏https://github.com/ca ...

随机推荐

  1. VJGUI消息设计-兼谈MFC、QT和信号/槽机制

    星期六下午4点,还在公司加班.终于写完了下周要交工的一个程序. 郁闷,今天这几个小时写了有上千行代码吧?虽然大部分都是Ctrl-C+Ctrl-V,但还是郁闷. 作为一个有10年经验的MFC程序员,郁闷 ...

  2. Qt编程中,Ui文件如何被利用

    这两天跟着班级辅导,总有学生感到很疑惑,用ui designer设计出来的ui文件是如何使用的,下面我从一个例子来说明下,希望能对有这样疑惑的同学有帮助. 事实上,现在有了继承设计工具qtcreato ...

  3. Nginx日志增长过快详细分析

    前言: Nginx日志里面Mobileweb_access.log增长特别大,一天上百兆,将近100W的访问记录,按照我们目前的规模,热点用户才500个左右,就算人人用手机app访问,怎么可能会有这么 ...

  4. utf8字节

    <pre name="code" class="html">[root@wx03 0724]# perl a1.pl 112 [root@wx03 ...

  5. fedora 下安装 文泉驿正黑体

    1. 可以到文泉驿正黑体的 主页 http://wenq.org/wqy2/index.cgi?%E9%A6%96%E9%A1%B5 最好能去官网表示一下支持 2. 也可以直接使用命令 :  sudo ...

  6. 解决warning: incompatible implicit declaration of built-in function &#39;malloc&#39;

    因为代码中使用了malloc函数和字符串函数.编译时出现错误 warning: incompatible implicit declaration of built-in function 'mall ...

  7. Handler没法取出消息队列中的数据的一个原因

    主线程发送消息到工作线程,工作线程的步骤是固定为3步的. Looper.prepare();//步骤1,线程里使用handler必须这样写, handler = new Handler(){//步骤2 ...

  8. windows下apache+wsgi+web.py环境搭建

    首先安装好wsgi模块并启用:1.下载地址:我本机是python2.7 http://code.google.com/p/modwsgi/downloads/detail?name=mod_wsgi- ...

  9. 用QFileSystemWatcher来监视文件和目录的改变(内部还是使用了timer)

    Use Case: 两个程序共享同一个Configuration文件,当一个程序作出改变的时候,需要另外一个程序能够及时响应. 之前其实猜的八九不离十,估计是有一个Timer,然后定时查询Config ...

  10. OGG同构(ORACLE-ORACLE)、异构(ORACLE-MYSQL)同步配置及错误解析

    环境:11.2.0.3(已安装数据库实例)+OEL5.7 192.168.1.55 zlm sid:zlm11g 192.168.1.60 zlm2 sid:zlm11g 一.安装软件,配置环境,创建 ...