W5500 EMC参考设计(金属壳体)

W5500, WIZnet 产品应用小例全系列, 博客, 应用
EMC测试比较重要的有四项:ESD——静电抗扰度测试,EFT——电快速瞬变脉冲群抗扰度测试,SURGE——浪涌(冲击)抗扰度测试,PFMF——工频磁场抗扰度测试。 其中EFT和SURGE是针对电源的测试,发生问题应该在电源防护上做文章。而与W5500相关的只有ESD和PFMF。 我们在近期也结合一些合作单位的测试经验,将提供能够通过测试的原理图和硬件设计参考。现将金属壳体的防护参考设计分享给大家。 下载链接:(百度云) 链接:https://pan.baidu.com/s/1pzITNHFGrSIvGKXGPJ4Bag 提取码:5p3v 也可扫描二维码下载
Read More

W5500常见问题及解决方案

Uncategorized, 博客
Q1: 在芯片处于TCP_Server模式下,在交换机/路由器网络中无法ping通也无法通讯。 R: WIZnet芯片是硬件协议栈芯片,有别于软件协议栈,如果芯片不主动往网络中发包,在TCP_Server模式下是不会有任何数据包发送的,这样会造成路由ARP表中无法形成IP和MAC设备的对应关系。 A:解决方案: 在芯片上电时往任意IP发送一个UDP数据包,从而更新路由的ARP表,形成匹配关系,后续通讯就正常了。 Q2: 芯片在TCP_Client模式下,断电重启之后无法立即连接到服务器。 R:这是由于客户端没有主动发送断开请求,造成服务器并不知道Socket已发生异常断开; 重新上电之后,芯片以相同的IP和端口连接服务器,而服务器还认为此Socket链接存在,所以拒绝芯片的立即连接。 A:解决方案: 在芯片使用KEEP_ALIVE机制,一段时间内发送呼吸包,如果芯片没有给服务器回复,服务器则判断链接已断开,并释放Socket资源,这时就可以成功连接。如果对客户端的本地端口没有要求的话,也可以在初始化Socket的部分让端口自动+1处理。两种方式根据具体应用分析采用。 注: 有的场景不能采用端口自动+1的方式,比如电力104规约,只允许采用2404端口连接。 Q3: 网线异常断开,服务器的Socket已经断开,但是芯片不知道Socket已经断开,并没有重建链接,此时怎么处理? A:解决方案: 可以在主循环中加入判断PHYCFGR状态的处理流程,如果PHY状态发生异常,释放所有的socket资源,并重新初始化socket。相关寄存器如下: Q4:如果芯片作为TCP_Server,最多可以链接几个Client,应该如何操作? A:解决方案: 芯片作为TCP_Server,最多可以与8个客户端建立连接。不能初始一个Socket对应多个连接。可以将芯片的8个socket全部初始化,这样就可以与8个不同的TCP_Client建立通讯链接。 Q5: 在芯片处于TCP_Client模式下,无法连接到服务器。 R: 在TCP_Client模式下,WIZnet芯片无法连接到服务器。 A: 遇到这个问题,有一个排查的步骤: 检查IP层是否可以PING通; 检查服务器的目标端口是否处于侦听状态,否则会收到RST数据包; WIZnet芯片在连接服务器时,首先会发送ARP请求,请确认ARP得到正确回复; 检查客户端-服务器间的3步握手是否完成; Q6:W5200进入Power Down模式后,长时间以后唤醒不能恢复正常,如何解决? A: 解决方案: W5200的Power Down模式是通过在一定时间内关闭W5200的内置PHY电路的工作来实现的,但是有一定几率PHY在休眠之后无法唤醒,需要在软件上做处理来唤醒芯片。经过测试验证发现,W5200芯片在3s极限值内快速唤醒一次再进入Power Down,当芯片需要唤醒正常工作时就不会出现以上问题。 Q7:WIZnet芯片进行公网通讯或者芯片间通讯的话怎么抓包? A: 解决方案: 芯片和PC通讯的话可以直接通过Wireshark抓包,如果芯片和公网直接通讯或者通讯是发生在芯片之间,则没有办法直接抓包,这需要借助于“可以抓包的交换机”,这种交换机多数是二手产品,而且是10M的网络,比如TP-LINK TL-HP5MU。把芯片和抓包计算机的网线分别插上交换机就可以运行抓包工具抓包。 Q8: W5300 TCP连接以后,Socket0数据收发正常,其它Socket有数据丢失是什么问题? A:解决方案: W5300是总线方式操作,在确保地址总线和数据总线连接正确的情况下,还有一个很重要的问题,就是保持总线时序统一,经过验证MCU总线地址保持时间至少是W5300总线操作时间的2倍以上,否则可能会导致W5300来不及处理数据而导致数据丢失。如下图介绍。 Q9: W5500的硬件设计和以往的以太网设计有不同的地方,可否使用客户原有的以太网经验电路? A:解决方案: 不能使用以往的经验电路,请严格按照WIZnet给出的参考设计进行硬件设计。 有的客户反馈在使用原有的经验电路也可以正常通讯,但是有可能发生在实验室正常,而客户现场连接不上的情况,所以统一建议客户使用官方的参考设计。 Q10:W5500的以太网电路,正常线序连接的话可能必须做过孔交叉线序,能否在线路上做交叉处理? A: 解决方案: W5500的以太网接口的四根线,按照正常的线序连接,必须通过过孔交叉线序; 按照以太网布局规范,需要等长差分走线。而且需要尽量少的过孔,可以适当做P-N交叉,既TXP-TXN交叉,RXP-RXN交叉,以符合以太网布线规范的要求。 figure-8-w5500-ethernet-wiring Q11: Wake On Line(WOL)功能如何使用? A:解决方案: WIZnet芯片打开WOL功能只需要置位MR寄存器的WOL位,不需要外部设定。唤醒方法为向WIZnet芯片的UDP端口发送Magic数据包(0xffffffffffff+16个目的MAC地址),设备唤醒后IR寄存器的WOL位会置1,通过检测该位获取WIZnet芯片的状态。(注意WOL功能不能和掉电模式(Power down mode)同时打开) Q12: 如何使用UDP组播功能? A:解决方案: 使用WIZnet芯片的UDP组播功能有几点需要注意: 1,需要在打开Socket之前,先指定目标MAC地址为组播MAC地址,定义规则如下: 2,打开一个支持多播UDP的Socket,目标IP为组播地址; 3,然后就可以进行UDP组播传输。 注意:如果没有定时发送“维持UDP组播”的数据包 的话就会被清出组播组,可以定时执行打开步骤2的打开Socket的指令,因为打开和维持UDP组播的数据包是完全一样的。 Q13: 运行HTTP_Server程序在不同的浏览器下显示效果不同,有的动态效果显示不出来? R: 这个是HTML代码和浏览器的兼容性问题,因为HTML5的很多标签和CSS样式表在低版本或者不同的浏览器内核下的排版和兼容性都不同。 A: 在HTML开发的时候使用JavaScript可以判断浏览器的内核和版本,可以针对不同的浏览器开发不同的执行代码和CSS样式表,或者建议客户使用推荐用户使用chrome系列或者chromium内核的浏览器,因为其对HTML5/CSS3支持是比较完善的。 Q14: MAC地址定义有什么特殊要求? A:解决方案: MAC地址要求不严格的话可以自定义,因为只要在一个子网内没有重复的MAC地址就不会造成MAC地址冲突的问题,因为如果进行公网通讯,网关会通过NAT功能将网关的MAC和IP对数据包中的MAC和IP进行替换然后再和公网通讯,所以不会造成公网中的MAC冲突的问题。但是如果要求比较严格,则需要从IEEE基金会申请全球唯一的MAC地址,申请地址如下: https://standards.ieee.org/products-services/regauth/oui36/index.html 进入该页面后点击Log in or create an account(新用户需注册),登陆后即可购买。 Q15: WIZnet芯片PING不通其它设备。 A:根据ICMP协议,request包的大小为128byte,reply包比request包大8byte,为136byte。 客户可以分别定义两个Buffer[128]和Buffer[136]分别对应request包和reply包,也可以共用一个Buffer[136],但是不能发送接收使用同一个128byte的Buffer,否则会造成接收数据不全,无法解析。 Q16: 使用中断方式,回环测试时无法清除中断 R: W5500收到数据后会产生RECV中断,当回环测试时,正常清掉RECV中断后,由于采用的回环测试方式,W5500又将同一包数据发送了出去,所以又会产生SEND_OK中断。 A: 此时需要再次清SEND_OK中断,或者改用单向测试方式即可。 Q17: 为何使用STM32F103无法完全发挥W5500的性能 A: STM32F103的主频最大72MHz,但是SPI接口的最高频率限制为18MHz 而W5500的SPI时钟最高可达80MHz,所以以 STM32   驱动W5500的话,无法满足W5500对最高时钟的需求。 而如果使用STM40x处理器,SPI时钟使用42Mhz,使用DMA方式,可以达到回环测试17Mbps的速率(收+发),单独发送可以达到13Mbps的速率 Q18: 如何使用PHY-PHY电路? A: 经常有需要使用PHY-PHY电路的场景,比如使用WIZnet做内部数据通讯,比如需要使用板载的Switch电路等等,PHY-PHY电路的要点就是使用耦合电容隔离两端的PHY,并加入两个PHY各自的偏置电路。类似于如下的设计: Q19: 以太网如何级联? A: 在特殊的应用场景下,客户需要用网线将所有的节点按照这种方式“A-B-C-D-E”线状级联在一起。这种应用需要使用Switch芯片,比如IP175G等芯片,按如下图示链接: Q20: 无法通过“以太网物理层一致性测试”中的眼图测试 A: 眼图是表现网络信号是否稳定的测试,眼图混乱有可能导致同一批次的设备有的无法正常通信,造成原因是: 1,没有按照以太网的布局标准来设计硬件电路, 2,采用的可能是不合格的网络变压器器件。 下图为使用W5500和HRW5500RE的眼图测试结果。 Q21: 使用WIZnet芯片无法通过低温测试 R: 通不过低温测试通常表现为低温-40℃不启动,原因是电路上除了WIZnet…
Read More

WIZnet选型指南,解决90%的选型需求

Uncategorized, 应用, 新闻
在我们选择WIZnet的产品时,面对诸多的产品功能不知如何选择,这里详细介绍一下WIZnet产品主要参数功能以及一些选型方法,帮助工程师快速准确地选择产品。 [table id=201 /] 这五款芯片各有千秋,都具有很高的性价比,具体对比详情如下: WIZnet的产品有一个共同的特性,那就硬件TCP/IP协议栈。而它们之间的差异主要体现在接口类型、Socket数量方面,选择的依据主要根据用户产品所使用的单片机接口类型和成本这两个因素。 如果用户使用8位或16位单片机,那么也意味着系统在数据处理和通信速率方面没有太高的要求,我们一般的芯片都可以满足,比如W5500、W5100、W5100S、W6100都可以选择。要求速率高的推荐使用W5300。需要使用IPv6协议则推荐使用W6100。 W5500     支持高速标准4线SPI接口与主机进行通信,该SPI 速率理论上可以达到 80MHz。其内部还集成了以太网数据链路层(MAC)和10BaseT/100BaseTX 以太网物理层(PHY),支持自动协商(10/100-Based全双工/半双工)、掉电模式和网络唤醒功能。与传统软件协议栈不同,W5500内嵌的8个独立硬件 Socket 可以进行8路独立通信,该8路Socket的通信效率互不影响,可以通过 W5500 片上32K 字节的收/发缓存灵活定义各个Socket的大小。 W5300    支持8/16位数据总线接口与主机进行通信,且支持DMA(直接存储器访问)模式,极大提高了W5300的性能,再加上W5300片上128K的收/发缓存,使得W5300性能产生质的提升,最高吞吐率可达80Mbps。W5300内部集成了以太网数据链路层(MAC)和10Base T/100Base TX 以太网物理层(PHY),支持自动协商(10/100-Based全双工/半双工)、自动极性转换,并内嵌8个独立硬件Socket可以进行8路独立通信,该8路Socket的通信效率互不影响。W5300以其卓越的数据传输性能,正逐步成为高带宽需求方面的主力军。 W5100    支持直接并行总线、间接并行总线以及高速SPI接口3种方式与主机进行通信。其内部还集成了以太网数据链路层(MAC)和10Base T/100Base TX 以太网物理层(PHY),支持自动协商(10/100-Based全双工/半双工)。与传统软件协议栈不同,W5100内嵌的4个独立硬件Socket可以进行4路独立通信,该4路Socket的通信效率互不影响,可以通过W5100片上16K字节的收/发缓存灵活定义各个Socket的大小。 W5100S    是基于W5100改进的低成本网络接口芯片。W5100使用的任何固件及程序都可以直接在W5100S上使用,无需任何修改 W5100S 是一款多功能的单芯片网络接口芯片,内部集成全硬件的TCP/IP协议栈,以太网MAC和10Base-T/100Base-TX以太网控制器。主要应用于高集成、高稳定、高性能和低成本的嵌入式系统中。使用W5100S,用户MCU可以方便的处理IPv4,TCP,UDP,ICMP,IGMP,ARP,PPPoE等各种TCP/IP协议。W5100S分别拥有8KB的发送缓存和接收缓存,可以最大限度地减少MCU的开销。主机还可以同时使用W5100S的4个独立的硬件SOCKETs,并基于每个硬件SOCKET开发独立的互联网应用。 W5100S支持SPI接口和并行系统总线接口。它还提供低功耗/低热量设计,WOL(Wake On LAN),以太网PHY掉电模式等。 W6100    是WIZnet 2019年推出最新技术的网络接口芯片,内含IPv4/IPv6双内核协议栈。其中新增IPv6是其最大特点,同时在硬件引脚上与W5100S全兼容(Pin to Pin),软件上支持8个Socket,支持各种SOCKET-less命令,用于通过ARP,PINGv4和PINGv6进行IPv6自动配置,监控和管理网络。
Read More

基于STM32和W5500实现AirPlay音频播放

博客, 物聯網
※已刊登在“无线电”1月刊上  基于STM32和W5500实现AirPlay音频播放 作者:常席正,魏文龙   AirPlay是苹果公司推出的一套无线音视频解决方案,我们手里的iPhone、iPad甚至是Apple Watch等设备还有电脑上的iTunes都支持AirPlay。使用AirPlay可以方便的使移动设备的音频流,视频流可以投射到音箱和显示设备上,而无需蓝牙设备的配对过程。但是支持AirPlay功能的音响设备普遍都比较昂贵,而且家里的3.5毫米的插口的老音箱也没有利用起来,本着“喜新不厌旧,改造旧物发挥余热”的精神,我开始了新一轮的折腾。 我的想法是用嵌入式方案STM32+W5500的方式实现AirPlay协议,并使用I2S接口接PCM5102A音频模块来实现音频播放。于是马上上网查资料,发现成熟的方案还不太多,现有的方案都是在linux或者windows上运行的,精挑细选之后选择了https://github.com/juhovh/shAirPlay这个AirPlay开源项目作为参考,主要是该代码是用C语言实现移植到stm32比较方便。 在开始之前我们有必要先了解一下AirPlay, AirPlay是苹果公司收购airtunes后,在airtunes协议的基础上增加了视频,照片的传输,从而变为完整的AirPlay协议。AirPlay可以将iPhone 、iPad、iPod touch 等iOS 设备上的包括图片、音频、视频及镜像传输到支持AirPlay协议的设备中播放,实现随时随地的无线流媒体传输。在我们的这个项目中,我们只需要实现AirPlay协议中的音频流部分。AirPlay的实现过程中包含多个子协议,其中有的协议是完全标准的,有一部分协议苹果公司进行了一些修改,有的则是完全私有的。 Multicast DNS:用于发布服务,启动后,在iOS的控制中心菜单中就能看到支持AirPlay的设备列表; HTTP / RTSP / RTP:用于流媒体服务,传输音视频数据,进行播放控制等; NTP:网络时间协议,用于时间同步; FAirPlay DRM加密协议:用于进行数据加密,这个是完全私有的加密协议。 开始工作前我们需要进行一些前期准备,如下图: 图1 硬件框图及接线 iPhone用来播放音乐,并通过Airplay协议发送音频流。W5500EVB是WIZnet的W5500开发板,其中的W5500除了包含以太网的MAC和PHY外,还内置了硬件的TCP/IP协议栈,是目前比较常用的以太网方案。我们使用W5500EVB作为服务器接收并解码音频数据,开发板的操作可以参考http://www.w5500.com中的例程。PCM5102A音频模块可以将解码后的音频数据进行播放。经过分析后我们要实现AirPlay音频播放主要是实现以下三个方面: iPhone在网络中发现Airplay设备(W5500EVB)并建立连接; W5500EVB接收并解码音频数据; W5500EVB通过I2S接口将音频传送到PCM5102A音频模块; 接下来我们将分别实现这三个步骤: 1、发现Airplay设备并建立连接 AirPlay发现设备是基于mDNS协议(Multicast DNS)实现,iPhone与W5500EVB需要连入同一网络且W5500EVB要加入组播组224.0.0.251:5353才可以接收mDNS报文。W5500EVB收到iPhone发出的Querry查询报文后回复Response报文,报文的内容可以参考文档《Unofficial AirPlay Protocol Specification》(http://nto.github.io/AirPlay.html),下方为mDNS设备发现和设备注册代码: 1 uint8 mdns_query(uint8 s, uint8 * name,uint8* rname) 2 { 3     uint8 ip[4]; 4     uint16 len, port; 5     switch (getSn_SR(s)) { 6     case SOCK_CLOSED:/*打开SOCKET并加入组播组224.0.0.251*/ 7         setDIPR(s,DIP);/* 设置目标IP 224.0.0.251*/ 8         setDHAR(s,DHAR);/*设置目标MAC 01:00:5e:00:00:FB */ 9         setDPORT(s,DPORT);/*设置目标端口5353*/ 10         socket(s, Sn_MR_UDP, 5353,Sn_MR_MULTI);/*打开SOCKET并加入组播组*/ 11         break; 12     case SOCK_UDP: 13         if ((len = getSn_RX_RSR(s)) > 0) { 14             if (len > MAX_DNS_BUF_SIZE) { 15                 len = MAX_DNS_BUF_SIZE; 16             } 17             len = recvfrom(s, BUFPUB, len, ip, &port); 18             /*检查收到报文的flag确定报文是否为查询报文*/ 19             if ((BUFPUB[2]&0x80)==0) { 20                 len = mdns_makeresponse(0,name,rname,BUFPUB,MAX_DNS_BUF_SIZE); 21                 sendto(s, BUFPUB, len, DIP,DPORT); 22             } 23         } 24         break; 25…
Read More

轻松实现Lua脚本控制W5500

Uncategorized, 博客, 应用, 物聯網
※已刊登在“无线电”12月刊上轻松实现Lua脚本控制W5500 作者:孔东明,张博 1、引言 Lua是巴西里约热内卢天主教大学里的一个研究小组于1993年基于标准C开发的一个轻量级的嵌入式脚本语言,其设计目的是为了将传统嵌入式程序“编写→编译→链接→运行”的复杂过程简化为“编写→运行”两个环节,从而为嵌入应用程序提供灵活的扩展和定制功能。 Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。一个完整的Lua解释器不过200K,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。 2、项目背景 随着物联网的快速发展,传统的工控、电力、银行机、闸机甚至家电等设备也纷纷加入了连接互联网大军。工厂的车床需要把运行数据实时上传至PLC,水表、电表、燃气表实现了远程抄录,点验钞机可以实时将RMB的冠字号上传至银行数据库,停车场无人值守,家里的窗帘用某猫精灵很方便的进行语音控制…… 小编在一家做网络通信设备的公司上班,领导要求基于现有的串口转以太网模块开发出一款支持用户使用Lua语言进行二次开发的串口转以太网模块,项目工期1个月。小编刚刚毕业4个月,没有多少项目经验,只是在学校玩过ARM M3的开发板,C语言自我感觉勉强及格,以太网技术基本小白一枚,对如何实现用户使用Lua语言“二次开发”更是一窍不通。但是任务时间紧迫,再难也要搞定,要不然没有奖金就要勒紧裤腰带了。 接到项目当晚就去找度娘商讨对策。经过一番搜索,方才大致了解了什么是Lua,什么是脚本语言,为什么客户要二次开发。用户在使用串口转以太网模块时,由于应用场景的不同及嵌入式产品资源的限制,需要灵活的调用模块的各项功能去实现差异化应用,而传统的模块只能实现既定的功能,因此支持二次开发的产品应用范围将大为拓展。而用户二次开发输入的代码肯定是无法执行传统的“编写→编译→链接→运行”这整个过程,脚本语言将这个过程简化为“编写→运行”就可以完美的解决了这个问题,Lua便是一款最佳的嵌入式脚本语言。 原理理顺了,如何落实便成了当务之急,我需要先做一个Demo来模拟整个过程。我找来了之前开发串口转以太网模块用到的以太网开发板W5500EVB,如下图。W5500EVB是由ST的STM32F103RC+W5500网络芯片构成,STM32F103内部256K的Flash足以容纳最大200K的Lua驱动。W5500是一颗以太网接口芯片,它用全硬件逻辑门电路搭建了一整套全硬件TCP/IP协议栈,发送数据时单片机只需将用户数据通过SPI发送至W5500,W5500内部会自动完成数据TCP/IP封包,并发送至网口,接收数据时W5500内部自动完成解包,仅将MCU关心的用户数据提交。W5500内含8路完全独立的硬件Socket,这意味着W5500可以同时运行8个上层应用程序,而且传输速率互不影响,不会像软件协议栈那样线程增加,速度明显降下来。W5500内部还集成了MAC和PHY,符合了接入以太网的所有条件,对于刚刚接触以太网的攻城狮来说,是一款简单易上手的网络接口芯片。 图 1 W5500EVB 我想象中的Demo是这样的:用户通过Web网页向W5500EVB提交一段能让W5500EVB连接到TCP服务器的Lua脚本代码,W5500EVB解析出来这段代码后通过已经运行的Lua虚拟机中的Lua接口函数来解释用户代码要实现的功能,最后 W5500EVB按照用户代码中的参数连接到一个指定的TCP服务器实现以太网数据通信。这个过程可以参考W5500官网提供的HTTP Server和TCP Client的例程。 图 2 实施方案原理图 3、准备工作 (1)安装编译环境:Keil V5.11 (2)硬件:W5500EVB、Jlink调试器 (3)驱动:Lua最新驱动V5.3.2 4、宿主C部分 4.1 加载驱动 驱动包括STM32F103RC的单片机驱动、W5500以太网部分驱动以及Lua驱动。STM32F103RC驱动不必多说,W5500驱动和Lua驱动如下图所示,均可以在对应官网下载到。                                           图 3 W5500驱动                                                                                    图 4 Lua驱动-V5.3.2 4.2 初始化部分 初始化部分包括STM32初始化及W5500初始化,Lua在用的时候才需要初始化。 01 /******* STM32初始化********/ 02 Systick_Init(72); 03 RCC_Configuration(); 04 GPIO_Configuration(); 05 Timer_Configuration(); 06 NVIC_Configuration(); 07 USART1_Init(); 08 at24c16_init(); 09 10 /******* W5500初始化********/ 11 printf("W5500 Config....\r\n"); 12 Reset_W5500();                  //重启W5500 13…
Read More

RT-Thread SAL+W5500,带你走进全硬件TCP/IP协议栈世界

博客, 新闻
原文链接:HTTPS://mp.weixin.qq.com/s/we8GZS-P4_GmqUxL3egfGw场景= 25#wechat_redirect 随着嵌入式系统功能的多样化以及网络在各个领域中的广泛应用,具备网络功能的嵌入式设备拥有更高的使用价值和更强的通用性。我们在嵌入式开发中常用的网络接入方式为软件TCP / IP协议栈接入方式,如lwIP协议栈。今天,为大家介绍一种全新的网络接入方式,基于SAL的全硬件TCP / IP协议栈接入方式。 SAL 介绍 SAL,即套接字抽象层,位于网络硬件层于应用层之间,用于抽象,统一多种网络协议栈接口,并且应用层提供标准的BSD套接字APIs.SAL可以让RT-Thread系统目前SAL支持的网络接入方式主要有三种:软件TCP / IP协议栈(lwIP),自定义串口网络实现(ATSocket),以及下面带来的第三种接入方式,全硬件TCP / IP协议栈(W5500)。 W5500介绍 W5500是WIZnet 推出的高性能以太网接口芯片系列之一,内部实现了全硬件TCP/IP 协议栈+MAC+PHY,芯片有如下几个特点: 8 个独立的硬件 Socket,各路通信互不影响 32K bytes 片上缓冲用于处理收发数据 集成 802.3 以太网MAC 主机接口为 SPI 高速串行外设接口(最高 80 Mhz) 什么是全硬件TCP/IP 协议栈? 传统的单片机(MCU)实现网络功能,需要连接外设物理层以太网控制芯片(MAC+PHY),还要主控芯片中移植软件TCP/IP 协议代码实现通信及上层应用。 所谓全硬件TCP/IP 协议栈是将传统的软件协议TCP/IP 协议栈用硬件化的逻辑门电路来实现。芯片内部完成TCP、UDP、ICMP等多种应用层协议,以及IP 、ARP等网络层协议,并且实现了物理层以太网控制(MAC+PHY)、内存管理等功能,完成了一整套硬件化得以太网解决方案。 相比于lwIP 软件协议栈的资源占用(RAM50K+,ROM80K+),在MCU 上使用硬件协议栈芯片(例如:W5500)的资源占用(RAM1K,ROM20K)得到了很大程度的降低。 另一方面,硬件协议栈芯片将会降低MCU 对于庞大网络数据的负荷,使MCU 可以高效的处理其他业务逻辑。同时也避免了MCU 主程序受到网络攻击的危险,大大优化了MCU 的网络连接功能。 WIZnet软件包介绍 WIZnet软件包是RT-Thread 基于WIZnet 官方 ioLibrary_Driver 设备驱动代码库的移植实现,支持W5500 芯片。原官方代码库虽然实现了多种网络协议支持,并且提供自定义Socket 接口用于网络编程,但是其接口并不是标准BSD 接口,这样不利于兼容多种网络软件包,增加了网络开发的难度。 RT-Thread推出的WIZnet 软件包在原代码库功能的基础上,封装实现一套标准 BSD Socket APIs,并且对接RT-Thread SAL 套接字抽象层,完成SAL 对全硬件协议栈的支持。 WIZnet 软件包特点如下: 1、极简的设备接入方式 传统WIZnet 设备接入,需要实现 SPI 设备初始化、网络初始化、寄存器配置、中断处理等多个功能,才能正常连接网络。使用 WIZnet 软件包,只需要在 ENV 中正确配置 SPI 设备名称、复位引脚号和中断引脚号并下载软件包,即可快速初始化设备并接入网络。 2、提供标准网络编程接口 相比于原官方代码库,WIZnet 软件包提供标准 BSD Socket APIs,可以完美的兼容 RT-Thread 系统中多种网络软件包或者网络功能实现,如 MQTT、HTTP、NTP、MbedTLS、Iperf 等,极大的简化了开发者网络接入和网络协议移植的过程。 3、自定义网络接入参数设置 软件包提供动态和静态两种获取 IP 地址的方式,静态模式下可以在 ENV 中自定义配置设备 IP 地址、网关、子网掩码等网络参数。对于 MAC 地址,软件包提供设置 MAC 地址接口,用于设置设备唯一的 MAC 地址,防止网络冲突。 4、提供网络状态查询方式 软件包提供wiz_ifconfig 命令用于查询当前网络参数,提供 wiz_ping 命令用于查询网络连接状态。 WIZnet的软件包的推出,使得RT-主题SAL支持的更加全面,这也进一步提升了RT-线程系统在物联网领域对于不同网络软硬件的兼容性,简化了用户网络接入的流程。当前WIZnet的软件包已经完成对W5500的移植,其他热门WIZnet设备,RT-Thread将会根据用户反馈优先选择支持。 WIZnet的软件包获取 使用WIZnet软件包需要在RT-Thread的包管理中选中它,具体路径如下:RT-Thread在线包→物联网 - 物联网→WIZnet:WIZnet TCP / IP芯片SAL框架实现 可通过一下二维码查看更详细信息: 也可通过外部链接打开: https://github.com/RT-Thread-packages/wiznet/blob/master/README.md
Read More

W5500问题集锦

博客, 应用
        1、 如何确认W5500网络芯片物理连接是否正常? 使用W5500网络协议芯片,对其进行可靠的硬件复位(网络协议芯片的RESET或RST引脚)后可能出现下列现象: (1)  芯片的LINKLED引脚输出低电平,LINKLED指示灯会被点亮(未接,接错或灯坏除外). (2)  如果是通过网线直连电脑,电脑上本地连接显示本地连接已连接状态。如果是网线连到路由等设备,路由等相应指示灯提示连接成功。 如果出现上述现象,表明物理连接已经成功并且芯片工作,否则需要排查相关问题。   2、 如何检测W5500物理连接是否成功与芯片是否工作及相关线路是否正常有关系? (1)   因芯片焊反或关键位置虚焊,短路等问题导致芯片不能正常工作。 (2)   因芯片的供电,接地等不正常或连接芯片,导致芯片不能正常工作。 (3)   因芯片引脚外接的用于隔离数字电源与模拟电源的1uH电感损坏开路,导致不能工作。 (4)  因芯片的晶振不按要求连接,而导致芯片不能工作。使用有源振荡器的,线路连接错误,或者有源振荡器的电压不是1.8V,请参考原理图进行正确设计 。 (5)  因复位引脚连接错误,使得芯片不能完成可靠复位。 (6)  因线路中RXIP、RXIN、TXOP、TXON与变压器的连接错误,导致与电脑等无法建立连接。 (7)  因采用与线路不匹配的或坏的RJ45模块和变压器导致与电脑等无法连接。这里需要特别补充一下的是,W5500变压器连接上与W5100、W5200、W5300大不一样,如直接把他们的连接照搬过来可能不能工作,具体参考原理图。 (8)  因网线或电脑路由器等不正常而无法连接。 (9)  因某些MCU只需电压2.7V就可工作,MCU在电压还未上升到3V就对需要3V以上才能运行的网络协议芯片进行复位操作必然失败,最终导致不能连接。(可程序解决) (10) 如果是使用的W5300芯片,当不使用外部PHY时,TEST_MODE[3:0](19~22引脚),必须全部为低电平,可全接地,否则可能因没有PHY导致不能连接。   3、 W5500连接正常却PING不通,怎么办? W5500芯片是否可以ping通,不仅与物理连接等有关系,还和相关电路以及网关、子网掩码、MAC地址、IP地址配置有关系,可以从以下方面进行排除: (1)  W5500的EXRES1引脚(10脚)所接12.4K参考电阻,均接地且要求误差必须控制在1%以内。 (2)  RXIP、RXIN、TXOP、TXON接口,信号长度必须小于 25cm,越短越好,且尽量走等 长线,各差分信号相差不能超过2.5cm。RXIP,RXIN应尽量靠近,TXOP,TXON应尽量靠 近,有条件的应走平行线。 (3)  必须保证被操作的寄存器地址配置正确。 (4)  可以对寄存器进行读写操作,判断读写是否一样,采用SPI接口的可以以此判断SPI部分的程序以及电路有无问题。使用并行接口的,则可以判断程序以及地址线、数据线的连接有无问题。 (5)  MAC地址的第一个字节必须为偶数。 (6)  必须正确设置子网掩码,且电脑IP地址与网络芯片的IP地址必须设置在同一个子网。   4、 为什么W5500芯片可以PING通,但无法发送数据? W5500芯片可以ping通,说明相关电路以及网关、子网掩码、MAC地址、IP地址配置均正常, 如果不能建立连接发送接收数据,需要从从SOCKET配置,SOCKET状态,中断寄存器,发送接收程序,或是上位机软件的设置等进行排查 。 具体配置参考W5500数据手册   5、 W5500在配置时需要检查网关吗?为什么? 其实只要不访问外网,完全可以不做这个检测,如果要访问外网,必须经过网关,做这步就是为提前知道网关是否存在,是否正常工作。   6、 为什么检测网关时要将目的IP地址每位加‘1’? 在正确设置网关的情况下,去连接一个不在同一子网(外网)的目的IP,就可找到网关,而将目的IP每位加1,正好造就一个不在同一子网的目的IP,如果愿意你加2加3都可以。   7、 为什么检测网关要判断目的MAC地址首位不为0xff? 因为未找到网关以前,读出目的MAC地址所有位全为0xff, 至于为什么判断首位,因为找到的目的MAC地址首位应该是偶数,因此绝不可能是0xff(255)   8、 WIZnet网络芯片TCP模式下的客户端与服务器有什么异同? 不同点: 客户端起启动连接(CONNECT)的作用,主动连接必须要知道连接目标,因此要正确设置SOCKET的目的(服务器)IP和目的(服务器)端口号。 服务器则是侦听的作用(LISTEN),等待连接不需要设置目的IP 和目的端口号,客户端来连接时,服务器自然知道客户端的IP地址与端口号。   相同点: 客户端服务器SOCKET 分片长度最大均为1460字节,即每次发送最大为1460字节 客户端服务器均要先配置为TCP模式 客户端服务器连接成功均为SOCK_ESTABLISHED状态(Sn_SR 寄存器) 详细内容可查看各芯片的《数据手册》   9、 TCP模式下,通过路由器,对方拔掉网线后,再插上后不能建立通讯怎么办? WIZnet芯片可以在发送过数据后,空闲既未发送也未接收达的情况,到一定时间(3秒,5秒,10秒自定义)后,发送SEND_KEEP命令,如对方正常就保持连接,如果对方在一定时间内未回应,则发出超时中断,自动关闭SOCKET端口,就可以自动重新连接,这样就能连接上了。但此命令只能用于TCP模式,如果是UDP模式下如果也想查看对方状态就需要从程序想办法了。   10、    请问,官方例程为什么不提供中断模式控制W5500的数据收发呢 因为中断读了数据后,然后还是要去读寄存器,去判断是什么中断,有可能在判断的过程中又来了N 个中断,增加中断就增加了很多不确定因素。 中断必然有响应时间,当上次中断还没结束,又产生新的中断甚至连续产生多次新的中断时,或者中断标志未及时清除,必然不能响应所有中断,此时以中断标志位来判断是否该接收,必然丢失数据。   11、    同一块芯片,同时使用多个SOCKET工作,应该注意什么问题 WIZnet目前每款网络协议芯片都可以支持多个SOCKET同时工作,但每个SOCKET可以且必须以不同的端口号做为区分。   12、    多块网络协议芯片同时使用,端口号可以设置成一样吗? 多块网络协议芯片在同一个子网中使用,应具备唯一的MAC地址,唯一的IP地址,因为不在同一块网络芯片,IP地址、MAC地址不一样,因此可以设置成一样的端口号。   13、    W5500设备,在同一网段存在多台设备的情况,运行不正常 问题描述:单个设备在局域网中的时候能够正常Ping通,而且TCP连接也使用正常没有任何问题; 解答:首先检查程序中IP地址、MAC地址是否有冲突,如果地址都没有冲突,可检查程序中配置的问题。   14、    同一块网络芯片的多个SOCKET,可以同时设置成客户端去连接电脑服务器的一个端口吗,怎么实现? 当然可以,WIZnet每款网络协议芯片都可以支持多个SOCKET同时工作,只需将芯片内每个SOCKET设置成不同端口号,分别设置成客户端去连接服务器就行, 前提是服务器的上位机软件需支持多任务,否则不能成功。   15、    用dhcp模式,插在电脑上能捕捉到discover,一插到路由器上就捕捉不到了,更别提offer了,是为什么? 首先,需要检查discover的内容,最简单的就是,你把电脑设置成固定IP,再设置成DHCP,抓一下电脑的内容,然后再对比一下   16、    将w5500的RST引到电源上面 这样软件就不用配置RST了 可行吗? 这样是不可行的,复位必须有可靠操作,让芯片满足工作条件; RST那里只是保险,但绝大多数问题是其他原因造成的,如果没有反应,先看一下W5500回的信息,有没有正确的初始化,再去找其他问题的原因。  …
Read More

手把手教你如何实现自动固件更新-嵌入式篇

博客
※已刊登在“无线电”07月刊上手把手教你如何实现自动固件更新 —— 嵌入式篇 作者:常席正,魏文龙 我们在上期 “手把手教你如何实现自动固件更新——服务器篇”那篇文章中介绍了通过云服务器更新固件的方法,并着重介绍了服务器端的前期准备以及软件设计。这次小熊和大家分享下嵌入式端的软件设计。相对于服务器端的软件设计,嵌入式软件设计需要更为严谨,因为固件升级出错的后果会非常严重,因为这个功能一般使用在批量的设备上,而固件是控制系统的核心软件,因此固件更新出错的话,会造成设备大面积瘫痪。所以严重性不言而喻。 本期我们来介绍一下客户端的具体实现过程,如图1所示,根据我们的自动固件更新协议,在与更新服务器建立连接后,服务器会要求客户端进行一系列验证,嵌入式设备在通过验证后,更新服务器会告知此嵌入式设备的最新固件信息,嵌入式设备根据这些信息下载并更新固件 图1 自动固件更新协议 “下载并更新固件”几个字囊括了我们所要执行的所有步骤。我们将按照以下步骤分别介绍。 1.下载准备--对Flash进行分区 为了实现‘下载并更新固件’我们先要做一些准备工作,我们把MCU的Flash分为三个区分别为BOOT区,APP区和Backup区,如图2所示 图2 内存空间分配 了解了空间分配之后,我们再来看一下我们这个演示中各部分的主要功能: BOOT区: 清空APP区,为新APP写入做准备; 把暂存在Backup区的新版本程序拷贝到APP区; APP区 APP区是应用程序运行区域,实现正常的网络连接,并更新固件。 配置网络参数; 在线固件升级; 每次上电都会从Boot区引导,若判断上层APP区载入程序是否成功,成功则直接从Boot区跳转到APP区,正常运行主程序。 Backup区 从服务器接收并备份需要更新的新应用程序,也就是固件存储区域。 备注:由于备区的大小为112K,所以意味着APP的大小最大为112K ; 程序流程设计 我们完成了对闪存的分区规划后,就要设计我们程序的流程,图3是程序执行的流程图。 图3嵌入式设备固件更新流程图 每次启动嵌入式设备,均从首地址开始执行程序: (1)启动进入BOOT区,若BOOT检测APP区的不为空,则跳转到APP区的首地址执行主程序; (2) APP内的代码主要实现: 配置网络参数:配置IP地址,MAC地址,建立网络连接。 远程更新固件:客户端向服务器发送固件版本查询报文条件符合设定则进入步骤(3) (3)当APP将新版本的固件下载完成后,进入步骤(4) (4)跳转到BOOT区,执行更新操作; (5) BOOT将APP区擦除,并将新APP从备份区写入到APP区,写入完毕后擦除备份区的固件; (6)重启,重新执行程序。 我们将程序主要分为两个部分,分别为BOOT程序和APP程序.APP程序即是我们的固件下载程序对应流程图的(1)(2)(3)步,BOOT程序既是固件更新程序对应流程图的(4)(5)(6)步: APP 程序设计(固件验证与下载) APP代码程序初始化网络配置参数,实现嵌入式设备与服务器的正常连接,下载固件到备区,图4描述的为嵌入式设备与服务器的通信过程。 图4服务器-嵌入式设备通信过程示意图 固件服务器-嵌入式设备的通信过程大致分为三步: 连接:嵌入式设备分配socket并连接到服务器。 通信:连接建立后。服务器在接收到来自嵌入式设备的请求后发送应答。 关闭:请求/应答完成后关闭连接。 我们APP区的函数主要做的就是下载固件,在程序里我们是通过w5500_version()和w5500_update()两个函数来实现的,w5500_version()用来验证当前的版本号与服务器上的版本号是否相同,如果当前版本号小于服务器上的版本号就进行更新。 [sourcecode language="c"]void w5500_version(void) { uint8 recv_buffer[2048]; uint8 version[10]; switch (getSn_SR(W5500_UPDATE)) { case SOCK_ESTABLISHED: if (getSn_IR(W5500_UPDATE) & Sn_IR_CON) { setSn_IR(W5500_UPDATE, Sn_IR_CON); } send(W5500_UPDATE,(const uint8 *)postH,sizeof(postH));//发送验证 Delay_ms(5000); if ((len = getSn_RX_RSR(W5500_UPDATE)) > 0) { len = recv(W5500_UPDATE, (uint8*)recv_buffer, len); //接收数据 if (strstr((char*)recv_buffer,"\"error\"")) { //报文内包含error,就结束函数 printf("upload error\r\n"); return; } printf("%s\r\n",recv_buffer);//打印服务器响应报文 mid((char*)recv_buffer,"\"version\":",",",(char*)version);//可以获取路径 /*********读取版本号************/ if (strncmp(ver_num,version,7)<0) { update_flag=1; mid((char*)recv_buffer,"\"http://W5500.com/fw_update/upload/","\",",(char*)bin_name);//可以获取路径 snprintf(post_msg,sizeof(post_msg), "POST /fw_update/upload/%s HTTP/1.1\r\n"\ "Host:w5500.com\r\n"\ "Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*\r\n"\ "Pragma:no-cache\r\n"\ "Accept-Encoding: gzip,deflate\r\n"\ "Connection:keep-alive\r\n"\ "\r\n",bin_name); printf("The version is %s\r\n",ver_num); } else { printf("The version is %s\r\n",version); printf("The version is…
Read More

手把手教你如何实现自动固件更新-服务器篇

博客
※已刊登在“无线电”06月刊上手把手教你如何实现自动固件更新 - 服务器篇   作者:常席正,张博 常见的嵌入式设备的固件更新有两种方式:上位机工具更新和HTTP嵌入式网页更新但两种方式都无法批量更新,都需要用户手动操作,如果用户有大量模块需要更新固件,绝不可能像“把大象放进冰箱”那样三步就可以解决问题,而且很多厂商的固件因为保密的问题是不开放给客户的。即使所有问题都不是问题,而用户更新失败以及更新错误的固件,所造成设备变“砖”的风险也是设备开发者不得不考虑的。        下面给大家介绍一种嵌入式设备批量实现固件更新的方法----通过固件服务器自动更新。只需要有一台云服务器,一些HTML / PHP和数据库方面的知识,然后再在模块里植入HTTP客户端固件更新的相关代码。之后用户只需要将模块联网,固件更新就能自动完成。        本人思路如图1所示。 首先,模块需要给客户开放一个可选配置项,即是否允许模块自动进行固件更新操作。 然后,当模块自动进行固件更新被允许时,模块作为HTTP客户端通过HTTP POST的方式将验证信息(一般为模块的MAC地址)以JSON的格式发送至云服务器。 接着,服务器解析JSON以获取模块的MAC地址,跟数据库中预先保存的MAC地址列表进行对比验证。如果验证通过,服务器将通过HTTP POST回复关于最新固件版本的必要信息(包括固件版本号,下载路径,文件长度,文件校验HASH值)发给模块;如果验证通过,但服务器端出现异常,则服务器给模块报错;如果验证不通过,服务器告诉模块“该设备未注册”。 最后,模块通过解析服务器回复的JSON格式的报文,获取最新固件版本的信息,并与自身固件版本作比对,如果设备本身固件不是最新固件,则进一步完成下载最新固件并完成更新。 图1自动固件更新流程 通过以上流程描述可知,实现这套方案同时需要服务器端和嵌入式模块两部分的配合,这篇先给大家教一下服务器端需要做哪些工作。 网站服务器环境搭建和网站的建立 首先,需要拥有一个域名和一台云服务器。关于域名的解析,备案等大家可以自行了解。国内做云服务器的厂商众多,易迈云,阿里云,腾讯云等等,我们要实现的这个功能非常简单,对服务器开销不大,根据实际需要选一款即可。我用的是阿里云服务器Windows Sever 2008标准版SP2 32位中文版,配置是1核2G内存2Mbps带宽挂载40G的系统盘和40G的数据盘。 搭建服务器主要包括3个核心环境,即Web服务器软件(常用的有IIS服务器和Apache等),PHP和数据库(常用的有MySQL和SQL Server)。由于这3种核心的软件更新很快,版本众多,且相互之间有版本要求的限制,因此推荐使用建站集成软件包XAMPP.XAMPP集成了Apache的+ PHP + MySQL的,简单实用,配置灵活,非常利于快速实现一些简单的服务器功能.XAMPP软件界面如图2所示。 图2 XAMPP软件界面        XAMPP软件的安装很简单,需要提醒大家的是服务器需要提前安装最新VC运行库,否则会导致安装失败。安装好后如图2所示安装的Apache和MySQL的服务模块(绿色√),分别点击“开始“按钮启动Apache Web服务器和MySQL。 网络服务器搭建完毕,域名也完成了解析和备案,就可以通过浏览器访问到用户的默认网站。接下来要做的需要将自动固件更新服务器端的一整套代码,包括HTML和PHP文件替换原有的默认网页,服务器端环境和网站就搭建完毕了。下面进行详细说明。   关系数据库搭建 固件的所有关键信息都是通过数据库保存的,PHP文件只是用于对数据库进行必要操作脚本,因此完善,清晰的数据库内容和结构对于后续的PHP代码编写非常重要。接下来我们需要先完成数据库的搭建。 点击MySQL的模块同行的“管理”按钮,进入数据库。 如下表1所示,新建一个数据库“fw_update”,排序规则为utf8_general_ci。该数据库下新建3个数据表,分别是“fw_list”,“device_list”以及“DEVICE_TYPE”。 device_type:设备类型数据表,厂商的产品可以有多种型号(默认每种设备类型只有一种固件)。下设2个字段,包括一个自增长的主键uId和设备类型名称uName。 fw_list:固件清单数据表,记录厂商上传至服务器的每一个固件的详细信息,包括typeId(设备类型名称编号),uPath(固件大小),uHash(固件哈希校验值) ,哈希的作用是文件在传输前和传输后分别计算一个校验值,如果两个校验值相同,则说明文件传输没有发生错误),版本号(3分段,v1.v2.v3) 。其中,TYPEID字段需要设置为同DEVICE_TYPE中的的uId相关联。 device_list:设备列表,记录出厂模块的MAC地址和设备类型,typeId字段也需要设置为同device_type中的uId相关联。 表1数据库结构        该数据库的理解是:每一个设备对应唯一的一个MAC地址,也对应一种设备类型,而每一种设备类型对应有多个版本的同一类固件这样,关系数据库就建好了,目前还是一个空的数据库,后续需要管理员通过固件上传操作,将不同设备类型,不同版本的固件上传至服务器即可。   固件上传部分 固件上传网页如图3所示,管理员上传固件时需要选择设备类型,选择需要上传的固件以及填写固件版本号,然后点击“确定”,上传的固件信息将会交给服务器脚本PHP去处理。 图3固件上传界面 HTML代码如下: 01 < html > 02 <头> 03      < meta http-equiv = “Content-Type”content = “text / html ; charset = utf-8” /> 04      < title >远程自动固件更新系统</ title > 05 </ head > 06 <身体> 07 < BR > < BR > 08 < H1对齐= “中心” >远程自动固件更新系统</ H1 > < BR > 09 < H2对齐= “中心” >固件上传</ H2 > < BR > 10 < form method = “post”enctype = “multipart / form-data” > <! -用POST方式- >…
Read More
W5500检测温湿度上传到oneNET平台

W5500检测温湿度上传到oneNET平台

博客, 应用, 物聯網
前言 关于本文内容的一些名词解释 1、产品 产品是指用户手上的真实设备在OneNET上对应的虚拟名称,是用户在OneNET上最上层的云端资源。 2、产品ID 产品ID是指由OneNET后台为您的某一款真实产品分配的一个独立的ID号,如果您旗下的某一款产品有两款不同的系列(如 iPhone 7 / iPhone 7 Plus),那么建议创建两款产品来分别获得两个产品ID。 3、APIKey 用于对OneNET进行操作的鉴权以及权限控制,在使用OneNET Restful API时,HTTP请求消息的头域必须携带该APIKey字段,OneNET会依据APIKey字段判别该用户是否具有对应操作的权限。 APIKey的权限模型是通过设定对云端资源是否可以增加、查看、修改、删除等方式来描述的,最低的权限级别可细化到对某个数据流的访问权限。APIKey分为两种: ①产品APIKey: 在创建产品时,OneNET会为该产品生成一个默认的APIKey,这个APIKey是Masterkey,具有最大权限,能够对本产品下所有资源进行访问。 ②设备APIKey: 用户为某一产品下的某一台设备创建的Key称为设备APIKey,设备APIKey的作用权限只限于本设备的资源,而不能对其他设备进行访问操作。 4、设备 云端的“设备”是指在上面提到的“产品”下的实体,亦指用户的某一台真实设备在OneNET上对应的唯一的虚拟名称。 5、设备ID(Device ID,DID) 设备ID是指由OneNET后台为您的某一台真实设备分配的一个独立且唯一的ID号,一款产品下可以有多台设备,每一台独立的设备都有唯一的设备ID。 6、设备编号 用户在OneNET上创建设备时,如果设备接入协议选择HTTP,则需要填写“设备编号”。设备编号是每一台真实设备所拥有的唯一识别号,不需要OneNET后台分配,用户可以自定义设备编号,但必须保证每台设备之间的独立性和唯一性,建议用户在输入设备编号时采用原有产品线的序列号。 7、数据流(Datastream) 一个数据流可以理解为一类数据,如传感器之温度、位置之经纬度,空气之湿度等。用户可以自定义数据流名称,即数据流ID;一个设备可以添加多个数据流。 8、数据点(Datapoint) 即一个数据流中的一个具体的数据值。数据点采用“Key-Value”的方式存储。其中Key的组成包括设备ID、数据流ID、时间等信息,value部分可以为任何数据对象,如整数、字符串或者JSON数据类型。 一、实验目的:W5500通过DHT11采集环境温湿度并上传到OneNET平台,登录账号可查看到温湿度数据的变化图。 二、实验过程: 1、注册oneNET平台账号; (more…)
Read More