让你的WizFi250适应各种气候

博客
这篇文章会详细描述怎样立即得到指定城市的天气状况(比如首尔),由OpenWeatherMap提供。用JSON(由OpenWeatherMap提供),XML和一个以太网模块,使WIZnet-WizFi250运行起来。 首先,在OpenWeatherMap上检查API内容。 由城市的名称调用。API用一列结果应答,来匹配一个搜索词。在JSON中: api.openweathermap.org/data/2.5/weather?q=London,uk 在XML: api.openweathermap.org/data/2.5/weather?q=London&mode=xml http://openweathermap.org/current 然后,跟随上面的指导,在电脑上将JSON和XML格式中的首尔天气数据提取出来。下面有一个网络数据包的截屏可以作为参考。  红色高亮部分的数据是由PC发送的。我们准备消除不必要部分,并使用请求数据输入以下数据。 在这步, \r(Carriage return, 0x0d), \n(Line Feed, 0x0a)必须准确输入,并且传送数据(72 Byte, 81 Byte)也要特别注意。 * JSON GET /data/2.5/weather?q=Seoul HTTP/1.1\r\n Host: api.openweathermap.org\r\n\r\n (72 Byte) * XML GET /data/2.5/weather?q=Seoul&mode=xml HTTP/1.1\r\n Host: api.openweathermap.org\r\n\r\n (81 Byte) 既然初始化设置已完成,我们将运行WizFi250.首先,在AP上建立联接。 AT+WSET=0,Team Wiki [OK] AT+WSEC=0,,12345678 [OK] AT+WNET=1 [OK] AT+WJOIN Joining : Team Wiki Successfully joined : Team Wiki [Link-Up Event] IP Addr : 192.168.101.33 Gateway : 192.168.101.1 [OK] 提取OpenWeatherMap API 服务器的IP地址。 AT+FDNS=api.openweathermap.org,3000 128.199.164.95 [OK] 与OpenWeatherMap API 服务器连接。 AT+SCON=O,TCN,128.199.164.95,80,,0 [OK] [CONNECT 0] 发送JSON请求数据到 OpenWeatherMap API服务器。 AT+SSEND=0,,,72 [0,,,72] (여기에서 위에 설명된 72 Byte를 전송하면 된다.) [OK] 然后,OpenWeatherMap API 服务器将用一个JSON回复(如下)来应答。 {0,128.199.164.95,80,857}HTTP/1.1 200 OK Server: nginx Date: Wed, 06 Aug 2014 00:06:49 GMT Content-Type: application/json; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive X-Source: redis Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true Access-Control-Allow-Methods: GET, POST 221 {"coord":{"lon":126.98,"lat":37.57},"sys":{"type":3,"id":8519,"message":0.033,"country":"KR","sunrise":1407184771,"sunset":1407234998},"weather":[{"id":721,"main":"Haze","description":"haze","icon":"50n"},{"id":500,"main":"Rain","description":"light rain","icon":"10n"},{"id":701,"main":"Mist","description":"mist","icon":"50n"}],"base":"cmc stations","main":{"temp":297.26,"pressure":1005,"humidity":83,"temp_min":295.15,"temp_max":298.15},"wind":{"speed":1,"deg":140},"clouds":{"all":40},"dt":1407277800,"id":1835848,"name":"Seoul","cod":200} 0 如果一旦完整接收,连接仍在进行,用OpenWeatherMap API服务器来终止连接。 AT+SMGMT=ALL [DISCONNECT 0]…
Read More

分分钟网络控制你的Arduino引脚

博客
用网络控制Arduino引脚,不需要在防火墙上使用什么复杂的端口转发设置。 只要Arduino连接网络,并拥有有效的IP地址,你就可以改变引脚的开关状态! 步骤1:你需要准备什么 材料列表: 1. Arduino UNO R3 (或者其他兼容 Arduino Ethernet 的Arduino) 2. Arduino Ethernet shield 负载到UNO上. 3. Arduino 例程,可在griblinks.co.za 或者 联系作者 4. 一个LED接地,Arduino上的引脚7 用于测试 ( 随后你可以自己添加继电器和三极管) 5. 一个Griblinks 账户 (不要急,是免费的!) 步骤2:在 http://www.griblinks.co.za/ 上注册   在 http://www.griblinks.co.za/ 上注册账户。 你所做的是 填写邮箱,密码,名字。 下载例程文件。 步骤3:下载 GribLinks 例程 用Arduino代码编辑器打开Arduino,输入一个有效IP在你的IP范围内。 换一个你有别于注册griblink时用的邮箱、密码,你可以在edit profile菜单中找到代码。 步骤4:搞定了! 给Arduino点时间,让他们轴承在一起,有时它会有点不知所措,但是一旦,它链接GribLinks,就会变得稳定起来。 例程中的代码,打印了一些有用的串口信息。所以你可以用串口监视器来看都做了什么。   Tips: 在给Arduino烧录代码时,确保代码中拥有一个有效且唯一的IP。IP地址用,隔开","而不是"."。 确保网络中的其他设备,像笔记本或者Ipad的网络访问,确保没有网络问题。 仅需要像教程中描述的那样修改代码,之后当一切都在运行时,你可以随意更改成你喜欢的方式。 如果你有疑问,可以看一下YouTube视频。   来自:Instructables
Read More

基于W5500的物联网环境信息监测系统

博客
一、系统适用范围特点: 随着科技的发展,环境信息采集应用的领域也越来越广。冷库,仓库,大棚等场所都需要对其环境信息进行监控,以保证食品等货物的储存。对大面积农作物的机械自动化管理有着重要的意义。而对于大面积的自动化大棚管理,在缺少技术人员的情况下,很难对农作物的生长有科学的管理,而且邀请专家进行技术指导会比较麻烦,人力成本和代价较高。因此,我们基于W5500模块,接入温湿度采集和光照采集模块,进行对环境信息的监控,并上传至Yeelink平台。专家可以远程对上传的信息进行方便的查看,并给与大棚管理员合适的建议。也可以方便管理员对仓库的监控和管理。同时由于上传的信息公开化,因此可以作为交流平台,来对各个地方上传信息的人员相互间交流。 二、系统简介: 系统所包含有:W5500EVB(包含有STM32单片机)、DHT11温湿度传感器、GY-30光照传感器、路由器和Yeelink网络平台。通过手机、PC机等上网查看。系统的框架图如下: 如图所示,STM32作为MCU处理温湿度和光照传感器采集到的数据信息,并且控制W5500将信息通过路由器上传到Yeelink平台上。   三、各器件简介: 1、W5500简介 W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案。W5500 集成了 TCP/IP 协议栈,10/100M 以太网数据链路层(MAC) 及物理层(PHY),使得用户使用单芯片就能够在他们的应用中拓展网络连接。 2、DHT11温湿度采集 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为给类应用甚至最为苛刻的应用场合的最佳选择。产品为4针单排引脚封装,连接方便。 3、GY-30光强采集传感器特点 1)I2C总线接口(f/s模式支持) 2)光谱的范围是人眼相近 3)照度数字转换器 4)宽范围和高分解.(1-65535勒克斯) 5)低电流关机功能 6)50Hz/60Hz光噪声reject-function 7)1.8V逻辑输入接口 8)无需任何外部零件 9)光源的依赖性不大.(例如白炽灯.荧光灯.卤素灯.白LED.孙光) 10)是有可能的选择2类型的ICslave-address. 11)可调的光学窗口测量结果的影响 (它可以探测分钟.使用本功能0.11勒克斯,最大.100000勒克斯) 12)小测变异(+/-20%) 13)的红外线的影响很小 四、基本功能: 具有环境信息采集功能,可以采集环境的温度、湿度和光照强度。 具有联网功能,可以将采集到的环境信息直接上传到Yeelink云平台上。 具有网络查看功能,可以用任何联网设备,在互联网上查看采集点的信息。 五、核心代码及程序流程图: 核心代码 W5500EVB向Yeelink平台发送的一个http数据包,Yeelink平台是非常便捷的一个平台,通过这个平台,只需要把U-ApiKey内容换成自己需要的Apikey,就可以轻松实现上传数据和监测数据。http数据包代码如下: char  postH[]={//提交湿度 "POST /v1.0/device/6857/sensor/10674/datapoints HTTP/1.1\r\n" "Host: api.yeelink.net\r\n" "Accept: */*\r\n" "U-ApiKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\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用来填充数值 stm32单片机获取计数器i值状态,i值每分钟增加1,这是通过stm32的定时器2中断设置的。i=0时,发送湿度数据;i=1时,发送温度数据;i=2时,发送光照强度数据。当然,W5500都是在socket连接建立的情况下,向Yeelink 服务器端发送数据。代码如下: if(i==0||i==1) { if( DHT11_GetValue(temp_rh)) { Buffer[236]=temp_rh[i]/10+0x30; Buffer[237]=temp_rh[i]%10+0x30; send(ch,(const uint8 *)Buffer,sizeof(Buffer)); i=i+1; } } else { temp=BH1750_Getvalue(); Buffer[236]=temp/10+0x30; Buffer[237]=temp%10+0x30; send(ch,(const uint8 *)Buffer,sizeof(Buffer)); i=0; } 程序流程图   六、项目总结: 本次项目完成了基本的环境信息采集功能,通过Yeelink平台观察采集到的数据,无论你在网页上还是手机客户端APP上,都能很好的监测数据,观察历史数据的走势。 通过本次项目,我学到了很多,W5500提供的全硬件TCP/IP协议栈实在是太方便了,你只需要编写片上处理程序就可以了,tcp/ip需要处理的协议它已经帮助你完成了。刚拿到w5500的开发板时,试着写了一些TCP,UDP,Smtp协议,都通过W5500EVB很轻松的实现了,这让我对网络协议有了一个更仔细的认识。然后我就开始把自己采集到的数据上传到Yeelink平台上,通过Wireshark抓包工具分析http报文,然后编写报文,最后终于成功实现了数据的上传。真心感谢Yeelink平台提供的强大功能,让我们这些爱好者能够轻松实现自己的想法,并分享给他人。 这次比赛比较遗憾的是一直想实现无线功能,就是通过W5500EVB+Zigbee无线模块+数据传感器+Yeelink平台,实现环境信息的无线采集。但是由于这学期学习比较紧张,没有投入足够的时间,所以就没在这里实现。不过这学期选的工程教育高级有这样的无线模块传输数据的项目,我可以好好研究一下Zigbee模块,算是弥补了我这次遗憾。   七、心得体会: 这次比赛基本上都是由我一个人完成的,工作量还是蛮大的。经过这次比赛,本人有一种想法分享给大家:做项目开始时,要做一个简单的规划,当然,这要根据自己的实际能力。在目标确定后,就不要轻言放弃,你只要不放弃,开始的方向有没有错误,最后一定会做出自己想要的结果的,那是的成就感不是别人能体会到的。   -- 选自2013年WIZnet杯 以太网技术竞赛,三等奖陈超航作品  
Read More

利尔达推出工控解决方案 串口转以太网模块LSD1ES-W5500_S2E0

博客
利尔达近期推出工控解决方案,串口转以太网模块LSD1ES-W5500_S2E0,模块基于WIZnet-W5500。 同时,这也是利尔达科技集团成为WIZnet代理商后,自行推出的第一款基于WIZnet产品的成品解决方案。   嵌入式串口转以太网转换器,是一款具有高效性能并集成了ARM Cortex-M3 微处理器的串行至以太网转换器。该转换器内嵌TCP/IP协议,可高效处理网络流量。转换器体积小,重量轻,功能强大,方便用户快速嵌入到自己的串行产品中. 特性 支持静态IP、DHCP 支持TCP、UDP透传 支持上位机、串口的参数配置 支持2路串口透传 支持远程虚拟COM端口(VCP) 串口通讯扩展(延长通讯距离) 支持插针及邮票孔接口 管脚 信号 描述 1 5V 5V供电和3.3V供电只能选择一种方式(防反插) 2 CONFIG_IO 用于恢复出厂设置,上电前低电平有效。不用时悬空 3 ETH_LED0 以太网数据流指示信号 4 ETH_LED1 以太网连接指示信号 5 RST_n 系统复位,低电平有效 6 TDO JTAG引脚 7 TDI JTAG引脚 8 TMS JTAG引脚 9 TCK JTAG引脚 10 3.3V 采用5V供电时该管脚输出3.3V可用于外部供电 11 GND 信号地 12  3.3V 采用5V供电时该管脚输出3.3V可用于外部供电 13 U0RX 串口 0 接收 14 U0TX 串口 0 发送 15 U0TCK 预留 16 IO1 预留 17 IO2 预留 18 IO3 预留 19 U1RX 串口 1 接收 20 U1TX 串口 1 发送 21 GND 信号地 典型应用 工业数据传输领域 POS支付领域 安防监控领域 物联网领域 * WIZnet官方 WIZ550S2E模块 采用的是 ARM Cortex-M0 微处理器,用户可根据需求进行选型。 欢迎关注WIZnet官方微博: http://weibo.com/wiznet2012
Read More

将光电鼠标转变成Arduino网络摄像头

博客
光电鼠标用一个小的摄像头来记录表面情况(计算鼠标的移动)。 在这个教程中,他将展示如何在你的浏览器中显示照相机的视频信号。 他拆解的鼠标是一个旧的Logi RX250,其中含一个ADNS-5020 光学传感器 这个传感器记录15*15像素灰度图像。还计算鼠标的X-Y轴运动。 (more…)
Read More

用Arduino做一个车库门开启器

博客
  做这个项目的动机是:忘记带钥匙被困在雨中。你可以通过Arduino主控的网页来触发一个车库门开启器。当Arduino连入无线网络,你可以将智能手机连接网页服务器,并键入密码,激活车库门,在被雨淋之前进去。一个MegunoLink Pro接口面板用于配置程序,可以设置多达10个密码,存储在设备的EEPROM. 硬件   硬件相当简单: 一个Arduino Etherten - 与Arduino Uno完全兼容,这个Etherten 包括一个基于WIZnet芯片(用于官方Arduino插板)的以太网模块。你可以在这个项目中使用Arduino Uno+ 以太网插板或者Arduino以太网板。   一个继电器用于激活车库门开关工具。多数的车库门电机在车库内侧的门旁边有一个低电压开关。继电器与开关平行工作,这样Arduino可以无需终端正常操作就激活车库门。确保开关在连线之前是低电压(安全)的。   晶体管控制继电器开/关。任何小信号晶体管都可以做到,比如2N2222或者2N3904。   源码: 所有源码都在 BOX上已提供。所需库文件副本在"Libraries"文件夹中。项目被设置为:使用Visual Studio Arduino 建造工具,也可以在Arduino IDE中工作。   Program.cpp是程序的核心。你可以找到设置和循环功能,即初始化串口命令处理和网页服务器。 Webserver.h/Webserver.cpp控制着网页服务器,返回用户要求的页面。它提供了一种模式,即需要密码且核对提交的密码,而且不会存储密码。我们使用可靠的Webduino库来创建网页服务器。 CommandProcessing.h/CommandProcessing.cpp负责串口命令的处理。命令支持以下几点: -       init-pwdr:初始化eeprom来存储密码。所有存储的密码都被清除。 -       list-pwdr:列出存储在eeprom中的密码。 -       set-pwd [Password Slot] [Password]r:在eeprom中保存一个新密码。这里[Password Slot],一个从1到10的数字,设一个储存口令的位置,并且 [Password]是存储的密码。   配置接口   他们在 MegunoLink Pro中使用接口面板和穿行监控可视化工具,制作一个简单的接口来通过Arduino串口配置车库门开启器。通过在接口面满上设置的控制,不再需要记得串口命令。所以按按钮就可以初始化EEPROM,并列出存储密码。一个数字空间用于选择密码槽,文本控件用于键入密码。每项配置都在下表中给出。控制车库门开启器接口面板的配置。
Read More

基于CC2530的ZigBee转以太网网关的设计与实现

博客
物联网技术的实现中,无线技术是不可缺少的部分。近年无线技术的发展,将ZigBee推入人们的视线中,那么ZigBee是怎样的一种技术呢?带着疑问,我查询了它的来历: ZigBee,来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,可以想象蜜蜂依靠这样的方式构成了群体中的通信网络! 是不是有点意思,那么随之 ZigBee的出现就成了一种我们熟知的无线组网通讯技术并广为应用。本篇就带你认识ZigBee,并实现一种常见应用:ZigBee转以太网网关。 将ZigBee技术连接互联网 图1 智能家居中ZigBee应用示意图 ZigBee是一种低成本,低功耗的近距离无线组网通讯技术,在智能家居、智能楼宇、工业监控等领域均有广泛应用。基于ZigBee的智能家居应用,如图1所示,用户在家庭中安装一个主控中心(ZigBee网关),及若干个与家电设备相连的分控终端,来远程操控所有家用电器,设想下躺在沙发上控制厨房的电饭煲煮饭是不是无限畅快呢?如果网关可以连到互联网上,甚至远在公司,打开手机就能登录到家里的网关查看家里的情况。 作为开源爱好者,可能很多人已经做过ZigBee方面的开发,一般使用TI公司的CC2530射频芯片较多,TI公司也针对这类芯片制定了完备的软件协议栈zstack。CC2530受处理器速度和内存限制,无法运行TCP/IP协议,用户往往通过串口获得协调器汇聚的数据。想要让协调器直接连上互联网只能借助其他以太网芯片,由于W5500以太网芯片在硬件上实现了TCP/IP协议,即使像CC2530这样的8位单片机也可以自如操控W5500,实现联网,无需借助其他辅助处理器做数据转换。 本文我们使用两个CC2530模块,组建一个小型的ZigBee网络,一个作为协调器建立网络,另一个作为终端节点不断的采集温湿度数据并发送给协调器。为实现协调器的联网,我们在协调器上外接一个W5500模块,协调器作为TCP客户端连接以太网内的主机,并将终端节点发来的数据通过W5500上传给主机。应用系统的实物如图2所示: Zigbee2 图2系统实物 准备工作 1. 安装编译环境IAR Embedded Workbench for MCS-51 7.51A 2. 安装协议栈ZStack-CC2530-2.2.2-1.3.0 3. 安装CC2530模块调试下载器驱动 硬件连接与驱动程序重写 W5500在硬件上实现TCP/IP协议,用户几乎不需要任何网络基础,并且WIZnet公司针对W5500也有很好的程序包的支持,只需调用socket函数,就可以完成网络的建立和通讯,当然,要获得以上便利,我们要先将CC2530与W5500连接起来,并能够发送数据控制W5500。 W5500与MCU通信使用SPI接口,CC2530是带有8051内核的无线MCU,片上有两个SPI接口,并且与USART复用,这里我们选择SPI1作为W5500的控制接口。图2为W5500模块的管脚对应关系,控制这个模块仅需J1插针上的1-7引脚(程序上使用轮询机制,所以可以省略INT中断管脚)。图3为CC2530模块上SPI1引脚的对应关系,另外使用P13作为W5500模块RST(复位)的输出控制引脚。通过排线将以上引脚对应连好后就可以编写硬件驱动程序啦。 Zigbee3 图3 W5500模实物与原理图管脚对照 图4 CC2530EB板SPI管脚对照 由于W5500的函数驱动库是分层次书写的,我们只需将SPI通信的硬件抽象层的函数重新编写即可。 以下为CC2530的SPI1的初始化配置函数和数据收发函数的程序,以及复位管脚的控制程序: CODE: SELECT ALL#include “ioCC2530.h” //SPI管脚和初始化配置 voidWIZ_SPI_Init(void) { PERCFG |=0×02;//打开UART1外设 P1SEL  |=0xE0;// 使能P1_7, P1_6, and P1_5 外设功能 P1SEL  &=~0×10;// 配置P1_4为普通GPIO (SPI_CS) P1DIR  |=0×10;// 配置P1_4输出引脚 // Set baud rate to max (system clock frequency / 8) U1BAUD =0×00;// BAUD_M = 0 U1GCR |=0×11;// BAUD_E = 17 U1CSR &=~0xA0;// SPI 主机模式 // Configure phase, polarity, and bit order U1GCR &=~0xC0;// CPOL = CPHA = 0 U1GCR |=0×20;// ORDER = 1 P1SEL  &=~0×08;// 配置P1_3为普通GPIO (RST) P1DIR  |=0×08;// 配置P1_3为输出引脚 } //W5500 复位引脚的控制 void WIZ_RST(uint8 val) { if(val== LOW){ P1_3=0;//引脚拉低 }elseif(val== HIGH){ P1_3=1;//引脚拉高 } } //SPI CS管脚的电平控制 void WIZ_CS(uint8 val) { if(val== LOW){…
Read More

W5500 keep-alive的用途与用法

博客
大家是否遇到过这样的问题,W5500作为服务器已经建立连接,突然网线掉了,然后再去连接W5500,就连不上了。为什么?下面对这个问题进行解释说明,并提出解决办法。 图1中的上位机程序作为客户端,连接W5500服务器。 图2是对这个问题的wireshark抓包说明。其中192.168.11.114为W5500的IP,192.168.11.110为PC的IP。下图中的第48个包是第一次握手:建立连接时,客户端发送SYN包到服务器,等待服务器确认;第49个包为第二次握手:服务器收到SYN包,必须确认客户的SYN同时自己也发送一个SYN包,即SYN+ACK包。第50个包为第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。在第70个包中显示,PC向W5500发送9个字节数据,在第73个包中,W5500向PC发送9个字节数据。此时,突然拔掉网线,并点击图1 “Disconnect”按钮,图1中的第160个包显示的是PC发送FIN+ACK包,第161包,W5500发送应答。然后连上网线,并且点击图3的“connect”,但是无法连接。 这是因为,网线没掉之前,W5500处于SOCK_ESTABLISHED状态,此时突然拔掉网线,SOCKET状态没变,还是SOCK_ESTABLISHED状态,没有监听,所以无法再次连接。 W5500 KEEP-ALIVE的用途与用法   图1 wireshark抓包 图2 上位机建立连接 图3 网线掉了,再插上网线连接不上 解决方法: Sn_KPALVTR寄存器配置了socket  n 的keep-alive包传输时间间隔。只在TCP模式下生效,单位时间为5秒。Keep-alive包会在Sn-SR 寄存器变为SOCK_ESTABLISHED之后,且与对方至少进行过一次收或发的通信后进行传输。如果Sn_KPALVTR>0,W5500在设置的时间间隔后自动传输keep-alive包以检查TCP的连接状态(自动在线检验),如果对方不能在超时计数期内反馈keep-alive包,这个连接将会被关闭并触发超时中断。如果‘Sn_KPALVTR = 0’,将不会启动自动在线验证,主机可以通过向寄存器Sn-CR写入SEND_KEEP命令发送keep-alive包(手动在线验证)。在‘Sn_KPALVTR> 0’时,将会无视手动在线验证。 自动检验:只需在主函数中,向寄存器Sn_KPALVTR写入不为0的数,即可启动自动在线检验。在函数中写入下面的函数,那么在W5500与对方进行过一次数据通信后,10秒后W5500自动发送keep-alive包。 例如:voidsetkeepalive(SOCKET s) { IINCHIP_WRITE(Sn_KPALVTR(s),0×02); } Wireshark抓包如图4 1-3包是三次握手过程,5-10包是发送和接收数据的过程,19包是W5500向PC发送keep-alive包,20包是PC对keep-alive包的应答。10秒之后,即是第30包,W5500又发送一次keep-alive包。此时拔掉网线,点击“Disconnect”。10秒之后,W5500发送的keep-alive包没有反应,SOCKET关闭。然后连上网线,点击“Connect”按钮,可以重新建立连接,109-111包是第二次建立连接过程。 图4 启用keep-alive后可以重新建立连接 以上演示的是自动发送keep-alive包的过程,如果想手动发送keep-alive包,把Sn_KPALVTR寄存器写入0,当向Sn-CR写入SEND_KEEP命令时,W5500发送一次keep-alive包。 voidsend_ka(SOCKET s) { IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND_KEEP); return; } 原文链接:http://kuaibao.qq.com/s/20180131G0GEHJ00
Read More

Arduino 网络时钟客户端

博客
更新! 11/15/2015 添加了WiFi和可充电电池选项(步骤10)。 更新! 增加了12h/24h 的开关,还有标准/ 夏令时开关!见步骤7 & 步骤8。 你是否曾想要一个和办公室时间来源完全准确的表? 这就有一个网络的办公时间服务器,你可以依据它并同步你的时间。大多数人用电脑来进行设置,现在Arduino也可以同样做到。(GPS时间客户端,详见 http://arduinotronics.blogspot.com/2014/03/gps-on-lcd.html) 你只需要一个Arduino和一个以太网插板,但是我们也加一个LCD显示屏。随后可能还增加闹钟功能。 Arduino UNO Arduino Ethernet Shield 可选: 串口 LCD 显示屏  步骤1:连接硬件 首先,记下印在以太网插板顶端的MAC地址。你接下来会用到。 看起来像 90 A2 DA 00 23 36,但是在代码中插入需要变成 0×90,0xA2,0xDA,0×00,0×23,0×36. 将以太网插板查到Arduino UNO顶部。用一根网线把它连到路由器上。 步骤2:代码 只需要在Arduino库文件夹下额外安装一个库。那就是 Time Library,可找 http://www.pjrc.com/teensy/td_libs_Time.html。 你讲需要以太网插板顶部的那个MAC地址,但是IP,网关,子网掩码都可以通过DHCP获得。你还需要时间服务器地址(见下面步骤)。 需要下载到Arduino上的程序如下: //sample code originated at http://www.openreefs.com/ntpServer //modified by Steve Spence, http://arduinotronics.blogspot.com #include <SPI.h> #include <Ethernet.h> #include <EthernetUdp.h> #include <Time.h> /* ******** Ethernet Card Settings ******** */ // Set this to your Ethernet Card Mac Address byte mac[] = { 0×90, 0xA2, 0xDA, 0×00, 0×23, 0×36 }; /* ******** NTP Server Settings ******** */ /* us.pool.ntp.org NTP server (Set to your time server of choice) */ IPAddress timeServer(216, 23, 247, 62); /* Set this to the offset (in seconds) to your local time This example is GMT – 4 */ const long timeZoneOffset…
Read More