教你如何通过MCU配置S2E为TCP Server的工作模式

串口转以太网, 博客, 物聯網
在上一篇文章中讲了“如何通过MCU配置S2E为UDP模式”,相信小伙伴们已经了解了S2E的基本功能,在这一篇中,我们再接再厉,继续学习一下“如何通过MCU配置S2E为TCP Server的工作模式”,无论是配置UDP模式还是配置TCP模式,都是通过串口转以太网的方式实现的: 1、接线方式 2、例程说明 打开“通过MCU配置S2E为TCP Server例程”,主程序中第一部分TIM3_Init();是设定一个帧中断的时间定时器,这是因为该例程MCU的串口是通过帧中断来接收AT命令配置S2E后返回的数据的。 第二部分USARTX_Init();初始化MCU用到的串口,这里用USART1_Config();是printf功能,用于查看调试信息。USART2_Config();用于配置S2E,需要注意的是该串口的配置参数需要同S2E的串口配置参数一致,否则配置失败。 第三部分主循环中的TCP_Server_Mode();用于配置S2E为TCP Server模式。S2E的AT命令列表详见各个S2E型号的用户手册AT命令章节介绍。配置成功,串口打印“TCP Server Config Success!”,配置失败串口打印“TCP Server Config Fail!”。 /**************************************************** 函数名: TCP_Server_Mode 形参: 无 返回值: 无 函数功能: 通过串口发送AT命令配置S2E模块 ****************************************************/ volatile uint8_t SendFlag = 0; void TCP_Server_Mode(void) { uint8_t RecvFlag = 1; char * state; switch (SendFlag) { case 0: { Usart_Send(USART2, "AT\r\n"); //终端检测命令 while (RecvFlag) { if (RX2_Point & amp; FRAME_LEN) { //如果接收到数据 state = strstr((char * ) RecvBuff, "OK"); //判断回复的数据中是否有“OK” if (state != NULL) { //有 RX2_Point = 0; //接收缓冲区指针置零 RecvFlag = 0; //接收标致位置零 SendFlag = 1; //发送标志位置零 printf("Recv:%s\r\n", RecvBuff); memset(RecvBuff, 0, RECV_LEN); //接收缓存清零 } else { //无 SendFlag = 100; //配置失败 RecvFlag = 0; } } } } break; case 1: { Usart_Send(USART2, "AT+ECHO=0\r\n"); //开启(1)/关闭(0)回显命令 RecvFlag = 1; while (RecvFlag) { if (RX2_Point & amp; FRAME_LEN) { //如果接收到数据 state = strstr((char *…
Read More

教你如何通过MCU将S2E配置为UDP的工作模式

串口转以太网, 博客, 物聯網
W5500S2E-S1是一款工业级串口转以太网模块,支持TCP Server,TCP Client和UDP三种工作模式,串口波特率最高可达1.152Mbps,并提供配套的上位机配置软件,也可通过网页或AT命令等方式轻松配置。 W5500S2E-S1模块集成了全硬件TCP / IP协议栈以太网接口芯片W5500,网络通信更加快速,稳定,安全。用户只需根据手册中推荐的参考设计原理图,即可快速完成硬件电路的设计,降低开发难度,节省开发时间。 今天我们就实际的来了解一下W5500S2E-S1基于UDP工作模式的具体操作流程是什么样的,下面我们就来看看吧: 具体操作流程 (1),接线方式: (2)、例程说明: 打开“通过MCU配置S2E为UDP例程”,主程序中第一部分TIM3_Init();是设定一个帧中断的时间定时器,这是因为该例程MCU的串口是通过帧中断来接收AT命令配置S2E后返回的数据的。 第二部分USARTX_Init();初始化MCU用到的串口,这里用USART1_Config();是printf功能,用于查看调试信息。USART2_Config();用于配置S2E,需要注意的是该串口的配置参数需要同S2E的串口配置参数一致,否则配置失败。 第二部分USARTX_Init();初始化MCU用到的串口,这里用USART1_Config();是printf功能,用于查看调试信息。USART2_Config();用于配置S2E,需要注意的是该串口的配置参数需要同S2E的串口配置参数一致,否则配置失败。 /**************************************************** 函数名: UDP_Mode 形参: 无 返回值: 无 函数功能: 配置S2E为UDP模式 ****************************************************/ volatile uint8_t SendFlag = 0; void UDP_Mode(void) { uint8_t RecvFlag = 1; char *state; switch (SendFlag) { case 0: { Usart_Send(USART2, "AT\r\n"); //终端检测命令 while (RecvFlag) { if (RX2_Point & FRAME_LEN) //如果接收到数据 { state = strstr((char*) RecvBuff, "OK"); if (state != NULL) { RX2_Point = 0; //接收标志位置零 RecvFlag = 0; //状态标志位置零 SendFlag = 1; printf("Recv:%s\r\n", RecvBuff); memset(RecvBuff, 0, RECV_LEN); } else { SendFlag = 100; RecvFlag = 0; } } } } break; case 1: { Usart_Send(USART2, "AT+ECHO=0\r\n"); //开启(1)/关闭(0)回显命令 RecvFlag = 1; while (RecvFlag) { if (RX2_Point & FRAME_LEN) //如果接收到数据 { state = strstr((char*) RecvBuff, "OK"); if (state != NULL) { RX2_Point = 0; RecvFlag = 0; SendFlag…
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通过MQTT连接阿里云平台

博客
1、简介 1.1 开发环境与连接平台 本文主要介绍W5500如何通过MQTT协议将设备连接到阿里云IoT,并通过MQTT协议实现通信。MQTT协议是基于TCP的协议,所以我们只需要在单片机端实现TCP客户端代码之后就很容易移植MQTT了, +W5500实现TCP客户端的代码我们以前已经实现过,程序下载:[wpdm_package template='link-template-default-wdc' id='16045'] 软件环境:Windows 硬件环境:STM32F103+W5500 开发工具:Keil uVision5 调试工具:Wireshark、串口调试助手 连接平台:阿里云-华东2节点(https://www.aliyun.com) 1.2 MQTT简介: MQTT官网地址:(http://mqtt.org/) 1.2.1 MQTT协议特点 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。 MQTT协议当前版本为,2014年发布的MQTT v3.1.1。除标准版外,还有一个简化版MQTT-SN,该协议主要针对嵌入式设备,这些设备一般工作于百TCP/IP网络,如:ZigBee。 MQTT协议运行在TCP/IP或其他网络协议,提供有序、无损、双向连接。其特点包括: 使用的发布/订阅消息模式,它提供了一对多消息分发,以实现与应用程序的解耦。 对负载内容屏蔽的消息传输机制。 对传输消息有三种服务质量(QoS): 最多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层TCP/IP网络。即:<=1 至多一次,这一级别会确保消息到达,但消息可能会重复。即:>=1 只有一次,确保消息只有一次到达。即:=1。在一些要求比较严格的计费系统中,可以使用此级别 数据传输和协议交换的最小化(协议头部只有2字节),以减少网络流量 通知机制,异常中断时通知传输双方 MQTT协议原理及实现方式 实现MQTT协议需要:客户端和服务器端 MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。 MQTT传输的消息分为:主题(Topic)和消息的内容(payload)两部分 Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload) payload,可以理解为消息的内容,是指订阅者具体要使用的内容 连接 阿里云连接步骤: 以aliyun账号直接进入IoT控制台,如果还没有开通阿里云物联网套件服务,则 申请开通 接入引导 (1)、创建产品 (2)、添加设备 (3)、获取设备的Topic 创建产品 初步进入控制台后,需要创建产品。点击创建产品。产品相当于某一类设备的集合,用户可以根据产品管理其设备等。 产品名称:对产品命名,例如可以填写产品型号。产品名称在账号内保持唯一。 productKey:阿里云IoT为产品颁发的全局唯一标识符 添加设备 创建完产品之后,可以为该产品添加设备。进入产品管理页面下的设备管理,点击添加设备。 说明:用户可以自定义设备名称(即deviceName),这个名称即可作为设备唯一标识符,用户可以基于该设备名称与IoT Hub进行通信,需要指出的是,用户需要保证deviceName产品内唯一。 设备证书:添加设备之后,物联网套件为设备颁发的唯一标识符,设备证书用于设备认证以及设备通信,详细的请参考设备接入文档。 deviceName:用户自定义设备唯一标识符,用于设备认证以及设备通信,用户保证产品维度内唯一。 deviceSecret:物联网套件为设备颁发的设备秘钥,用于认证加密,与deviceName或者deviceId成对出现。 获取设备的Topic 添加设备之后,可以获取设备的Topic。点击Topic列表 说明:创建产品之后,物联网套件都会为产品默认定义三个Topic类。那么,在添加设备之后,每个设备都会默认有三个Topic,即图中所示。如果想要增加、修改、删除Topic,请到消息通信重新定义Topic类。 设备可以基于Topic列表中的Topic进行Pub/Sub通信,例如列表中有/1000118502/test9/update,且设备拥有的权限是发布,这就意味着设备可以往这个Topic发布消息;同样,列表中/1000118502/test9/get,权限是订阅,这就意味着设备可以从这个Topic订阅消息。 设备接入 获得productKey、设备证书以及设备的Topic这些参数,就可以基于aliyun IoT device SDK for C将设备连接上IoT Hub并进行通信,具体请参考《MQTT配置》部分 MQTT移植步骤: MQTT代码源码下载地址:(http://www.eclipse.org/paho/) MQTT的移植非常简单,将C/C++ MQTT Embedded clients的代码添加到工程中,然后我们只需要再次封装4个函数即可: int transport_sendPacketBuffer(unsigned char* buf, int buflen); 通过网络以TCP的方式发送数据; int transport_getdata(unsigned char* buf, int count); TCP方式从服务器端读取数据,该函数目前属于阻塞函数; int transport_open(void); 打开一个网络接口,其实就是和服务器建立一个TCP连接; int transport_close(void); 关闭网络接口。 如果已经移植好了socket方式的TCP客户端的程序,那么这几个函数的封装也是非常简单的,程序代码如下所示: /** * @brief  通过TCP方式发送数据到TCP服务器 * @param  buf数据首地址 * @param  buflen数据长度 * @retval 小于0表示发送失败 */ /*订阅消息*/ int Subscribe_sendPacketBuffer(unsigned char* buf, int buflen) { return send(SOCK_TCPS,buf,buflen); } /*发布消息*/ int Published_sendPacketBuffer(unsigned char* buf, int buflen) { return send(SOCK_TCPC,buf,buflen); }…
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

DSP+W5500移植教程

博客
        以DSPF28335与W5500基于SPI通信为例:  一、特性 1、W5500特性   支持硬件 TCP/IP 协议:TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE   支持 8 个独立端口(Socket)同时通讯   支持掉电模式   支持网络唤醒   支持高速串行外设接口(SPI 模式 0,3)   内部 32K 字节收发缓存   内嵌 10BaseT/100BaseTX 以太网物理层(PHY)   支持自动协商(10/100-Based 全双工/半双工)   不支持 IP 分片   3V 工作电压,I/O 信号口 5V 耐压   LED 状态显示(全双工/半双工,网络连接,网络速度,活动状态)   LQFP48 无铅封装(7x7mm,间距5mm)   嵌入式服务器 2、DSPF28335特性   基于TMS320F28335浮点DSP控制器   高性能的静态CMOS技术,指令周期为6.67ns,主频达150MHz   6通道的DMA控制器   8个外部中断   增强型外设模块:18个PWM输出,包含6个高分辨率脉宽调制模块(HRPWM)、6个事件捕获输入、2通道的正交调制模块(QEP)   3个32位的定时器,定时器0和定时器1用作一般的定时器,定时器0   接到PIE模块,定时器1接到中断INTI3、定时器2用于DSP/BIOS的片上实时系统,连接到中断INT14,如果系统不使用DSP/bios,定时器2可用于一般定时器   串行外设2通道CAN模块、3通道SCI模块、2个McBSP(多通道缓冲串行接口)模块、1个SPI模块、1个I2C主从兼容的串行总线接口模块   12位的A/D转换器具有16个转换通道、2个采样保持器、内外部参考电压、转换速度为80ns,同时支持多通道转换   88个可编程的复用GPIO引脚   TI主推高性能TMS320C28x系列DSP控制器,主频高达150MHz   具备I2C、SPI、eCAN、ePWM等总线接口,适用于各种控制类工业设备   体积小、性能强、便携性高,同时适用于多种手持设备   符合高低温、振动要求,满足工业环境应用 3、引脚分配图:   DSPF28335引脚分配图:   W5500引脚分配图:   4、环境:   软件环境:Windows xp/Windows 7/Windows 8/Windows 10   硬件环境:DSPF28335 、 W5500   开发工具:Code Composer studio 6.0.0 、 USR-TCP232-Test(调试工具) 二、步骤 1、连接DSPF28335与W5500(选择引脚)   首先确认W5500与DSPF28335开发板上分别需要连接的引脚 (1)W5500:引脚描述 (2)DSPF28335引脚描述: 选择好两块开发板上的引脚后,对两块开发板进行连接: 序号型号 W5500 DSPF28335 连接方式 1 MISO 54 从输入主输出 2 MOSI 55 从输出主输入…
Read More
工业物联网协议:Modbus

工业物联网协议:Modbus

博客
物联网应用大部分来自于在工业领域的需求。 正如预期的那样,这些应用通常遵循的工业标准协议。典型的例子有 Modbus、EtherCAT、和以太网。其中,Modbus 是在嵌入式市场中最受欢迎的项目之一。开放的硬件平台 Arduino,也有备 Modbus 库。这意味着有大量的需求,并很多人都在使用它。当然,MODBUS 的规格并不需要大量的资源,这使得它更加吸引人。 Arduino 我上面提到Modbus 协议可以使用 Arduino 的基础上。 由于 Arduino 是一个开源的硬件平台,任何人都可以轻松地使用它。 通常情况下,工业设备可得来不易,但开放的平台,如 Arduino 解决了这样的可使用性的问题。 特别是,存在一些用户在使用Arduino的用的Modbus标题项目可视化网络仪表建设策略。 您可以如下图所示用 Arduino 和 Modbus,把你的仪表数据放在网络上。 与此类似,使用 Arduino 可以很容易与行业中的标准设备进行通信。 有人会说,“你可以用 Arduino 制造工业产品吗?” 然而,也有将使用 Arduino 作为是产品! 有一个叫产品 Lono  - 它可以在工业和住宅环境中使用。它也可以在以太网环境中使用。 以太网产品,特别是可以使用 Modbus 协议。如果你想使用的 Modbus 与这个产品,只需从 Arduino 的 IDE 上传 Modbus sketch。 有了 Arduino,可以为开发者和用户提供方便。 如果你想看到的Modbus更多的例子与Arduino的使用,请参见下面的链接。 Modbus TCP 的 2 个例子  Arduino 与安卓通过 Modbus 通信 RTU Miniuno 家庭自动化 其他设备 你可在网上搜索到许多 WIZnet 产品并非用在开放式硬件。 WIZnet 产品本来并不支持 Modbus 协议。 然而,在使用以太网芯片的情况下,由于硬件 TCP / IP 技术,只需要使用很少功夫就能够实现一个协议,如 Modbus。 这就是为什么 WIZnet 产品广泛应用在工业中使用的原因。 例如此产品,使用 W7100A 的 el/O Ethernet 。 eI/O 拥有一系列以太网数字 I/O 以满足嵌入式OEM应用。对于需要嵌入式以太网 I/O 解决方案的商业和工业计算应用,eI/O OEM 模块提供系统设计者提供了一个简洁,低成本的监视和控制的另类选择用于各种应用,包括过程控制,设施管理,安全性和广播自动化。 eI/O 模块使用行业标准的 Modbus TCP 协议或者 SeaMAX 软件进行通信。该软件套件支持 eI/O 系列产品,旨在与该 SeaMAX API 的第三方应用程序工作。SeaMAX 软件驱动程序和实用工具使安装,简单在微软 Windows 上操作使用。 如果您想了解使用其他 WIZnet 的产品,请参考下面的链接。 WizFi250 工业用WizFi250监控系统 W5500 Modbus/TCP 通信 使用 DE0-Nano、NIOS-2 和 WIZ550io [embed]https://youtu.be/iuy2-zllveA[/embed]
Read More
WIZnet芯片在智能家居市场的应用

WIZnet芯片在智能家居市场的应用

博客, 物聯網
2014年是智能家居和可穿戴设备集中发力的一年。传统家电厂商、互联网企业和智能终端企业都虎视眈眈的盯着这个巨大的蛋糕,初创企业也借助各种众筹平台将自己的新奇创意转换为实际产品并推进市场,各种智能家居设备和智能穿戴设备层出不穷。预测2015年这种趋势还将继续,而且还会涌现一些新的趋势,比如:新型传感器技术和网络技术会进一步融合,必将迸发出新的火花;更多的智能设备网络平台会出现,产品应用会打破APP的壁垒,用户数据直接融合到智能设备网络平台内;智能产品会有“同质化》》差异化》》整合》》扩展”的趋势,并脱离当前只是一部分人尝鲜的阶段,而更贴合具体的应用,并越来越易用;传统的家电厂商会加入这个市场,并将更多的传统门类的白色家电带入“互联互通”网络家电新时代等。 由于人们对于个人信息的保密要求和数据传输的私密性要求越来越高,而且智能设备的开发的前提本就应该是数据安全,所以数据传输加密应该是非常重要的一环。而且由于无线技术“无边界”的特点,在数据加密传输上有先天的不足,以太网技术虽然“有线”但也是不可替代的,成熟而且简单,因此“以太网”和“数据加密”也应是智能家居系统中不可或缺的一个组成部分。比如很多智能穿戴设备是基于BLE技术开发的,但是由于BLE无法直接同IP网络通信,所以只能直接和手机通讯而无法上传数据到网络平台,所以BLE+以太网网关的方式不失是一种很好的选择。 WIZnet的产品是以硬件以太网芯片为核心的一系列产品,将以太网通信协议以硬件TCP/IP的方式来实现,降低了MCU处理协议栈的负担,从而降低了对MCU的要求。相较于其他的以太网实现方案,WIZnet系列芯片对MCU的要求很低,而且可以很方便的实现上层应用层协议。WIZnet在网络安全方面有自己独特的优势,Simple but Powerful是其产品的最大特点。 智能家居不是任何单一技术的智能家居,也不是任何一家厂商的智能家居,只有越来越多的厂商加入进来,形成新的智能设备网络平台的步骤才能越走越快,大家更愿意看到“传统家电厂商+互联网企业+智能终端企业”集中发力,促使这个市场走向成熟。 原文链接:http://www.elecfans.com/tongxin/tongxinxinpian/2015/1013/385991.html
Read More
充电桩通过WiFi实现付费和管理方案

充电桩通过WiFi实现付费和管理方案

博客, 能源
随着电动车产业的快速发展,需要与之配套的充电桩产业也趋于批量化、标准化。从全国范围内来看,北京、上海、广州、深圳等一线城市对电动车的推广力度非常大,因此对于充电桩这一基础设施建设的投入也排在前列。从长远国家战略层面来看,在不久的将来,电动车产业必将跟传统能源汽车产业平起平坐。 根据实际应用场所的不同,充电桩的充电及付费管理系统的方案各异。应用最多的场所是在充电站内充电,其实现方案是每台充电桩内嵌以太网芯片,例如W5500、W5100等,然后通过以太网接入局域网管理中心,用户通过RFID刷卡的方式进行付费等操作。 目前,行业内出现了一种通过WiFi来进行付费和管理的方案。这种方案的应用场所主要是在高速以及充电站建设不便的区域。其大概实现方式如下图a所示。  图a 充电桩WiFi付费和管理系统 充电桩安装在距离公路约300m左右的距离,通过地埋将电缆插座引到公路边上,充电桩内安装WIZnet的C2W模块CAN转WiFi的C2W模块,车内也装有带C2W模块的设备。车内的设备搜索到并接入充电桩的AP热点,登陆后进行付费和充电操作。这种方案的改进型可以考虑将车内的WiFi设备用用户的手机代替,通过登陆APP软件来实现更多的功能应用。 总之,随着电动车产业的大跨步发展,充电桩相关方案也会迅速充斥市场,但人性化、便捷、安全、稳定始终是产品发展的主流,大家也都在关注这一市场的需求,我们拭目以待吧!
Read More