Internet+EducationSolutions物联网网关服务设计中智讯(武汉)科技有限公司EducationSolutions目录ContentsInternet+物联网网关服务框架ZigBee网关服务设计物联网网关应用设计嵌入式网关Boa服务物联网M2M服务设计08:01/3物联网智能网关网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。物联网智能网关是一个中央数据转换单元,基于传统嵌入式技术,运行复杂的嵌入式操作系统,实现传感无线网数据与电信网/互联网之间的数据交互。智能网关采用嵌入式高性能ARM处理器,运行Linux操作系统,实现网络的数据M2M交互。08:01/4物联网网关服务框架节点一节点二节点三协调器串口Wi-FiLinux设备驱动串口收发数据服务物联网网关测试程序ZigBee地址转换服务ZigBee数据解析服务以太网3GBoa服务及应用TCP数据路由服务物联网应用程序网关EducationSolutions目录ContentsInternet+物联网网关服务框架ZigBee网关服务设计物联网网关应用设计嵌入式网关Boa服务物联网M2M服务设计08:01/6ZigBee数据接入服务物联网智能网关集成ZigBee协调器,通过串口通信(波特率:38400,数据位:8bit,奇偶校验:无,停止位:1)Uart-test.cUart.cuart_open串口初始化循环读取串口数据串口写入数据处理接收到的串口数据处理用户的命令响应uart_writeuart_readproc_uartproc_userUtils.c字符串转16进制str2hex08:01/7ZigBee数据接入服务物联网智能网关集成ZigBee协调器,通过串口通信(波特率:38400,数据位:8bit,奇偶校验:无,停止位:1)#打开串口设备#defineZXBEE_UART/dev/ttyAM3gDevFd=uart_open(ZXBEE_UART);if(gDevFd0){perror(ZXBEE_UART);exit(1);}#初始化串口设备structtermiosopt;tcgetattr(fd,&opt);tcsetattr(fd,TCSANOW,&opt);opt.c_cflag&=~CSIZE;opt.c_cflag|=CS8;//设置数据位为8opt.c_cflag&=~PARENB;//清除校验位opt.c_iflag&=~INPCK;//禁止奇偶校验opt.c_cflag&=~CSTOPB;//停止位为1opt.c_lflag&=~(ICANON|ECHO|ECHOE|ISIG);//设置终端编辑功能opt.c_oflag&=~OPOST;//~(ONLCR|OCRNL);//设置终端输出方式opt.c_iflag&=~(ICRNL|IXON);//设置终端输入方式cfsetspeed(&opt,B38400);//设置波特率为38400tcsetattr(fd,TCSANOW,&opt);//不等数据传输完毕就立即改变属性08:01/8ZigBee数据接入服务/***************************************************************************名称:proc_user()*功能:检查是否有用户输入指令,如果有则读取,并处理**************************************************************************/voidproc_user(intfd){ret=read(fd,&buf[offset],BUFSIZE-offset);……intr=str2hex(buf,hex,128);printf(uart);for(i=0;ir;i++){printf(%02X,hex[i]);}printf(\n);*/uart_write(gDevFd,hex,r);……}/***********************************************************************************名称:proc_uart()*功能:检查串口是否有数据需要读取,如果有则读取,并处理*********************************************************************************/voidproc_uart(intfd){ret=uart_read(fd,&buf[offset],BUFSIZE-offset);……printf(uart);for(i=offset;ioffset+ret;i++){printf(%02X,buf[i]);}printf(\n);……}08:01/9ZigBee数据接入服务/**********************************************************************名称:uart_write()*功能:向串口发送数据********************************************************************/voiduart_write(char*dat,intlen){if(fd0){fd=uart_fd;}returnwrite(fd,dat,len);}/***************************************************************************名称:uart_read()*功能:检查串口是否有数据需要读取,如果有则读取,并处理**************************************************************************/intuart_read(intfd,char*buf,intlen){inti,ret;if(fd0){fd=uart_fd;}ret=read(fd,&buf[0],len);if(ret0){perror(readuart);return-1;}returnret;}08:01/10ZigBee数据接入测试网关通过串口与协调器通信示例:接收到数据:串口监听到数据:uartFE0A6980D00900007B41303D307D40数据解析:地址D009的节点发送来数据,{A0=0}发送数据:命令格式:FE0B2900D00900007B41303D3F7D8C数据解析:查询D009节点的A0数据,{A0=?}运行网关服务程序时,需要关闭android智云服务配置工具内的zigbee服务(智云服务配置工具-菜单:无线接入设置-关闭ZigBee服务)08:01/11实验操作视频08:01/12ZigBee数据包解析服务网关作为上位机与协调器通过串口通信,需要对ZigBee通信数据包进行封包解包处理,并对用户数据APP_DATA进行提取Utils.c地址转字符串字符串转地址数据校验mac2strstr2maccalc_fcsProtol-test.cUart.cuart_open串口初始化循环读取串口数据处理接收到的串口数据处理用户的命令响应uart_readproc_uartproc_userProtol.c从串口接收数据并解包处理传感器数据包decode_packagecp_data对用户数据包封包mk_net_data串口写入数据uart_write字符串转16进制str2hex08:01/13ZigBee数据包解析服务08:01/14ZigBee数据包解析服务08:01/15ZigBee数据包解析服务测试网关通过串口与协调器通信,通过解析服务获取传感器的数据信息示例:查询数据:发送查询命令:D009,0000,7B41303D3F7D#{A0=?}返回结果:protolD009,0000,7B41303D307D#{A0=0}08:01/16实验操作视频08:01/17ZigBee地址转换服务ZigBee是通过动态短地址通信,每次重建网络地址会变,一般可以通过设备唯一的长地址进行转换通信Addr-test.cUart.cuart_open串口初始化循环读取串口数据处理接收到的串口数据处理用户的命令响应uart_readproc_uartproc_userProtol.c从串口接收数据并解包处理传感器数据包decode_packagecp_data串口写入数据uart_writeZigBee.c分析数据包命令on_net_data长地址查询短地址响应on_response_na短地址查询长地址响应on_response_mac处理传感器数据响应on_zigbee_data长地址查询短地址封包mk_request_na短地址查询长地址封包mk_request_mac对用户数据包封包mk_net_data打印结果打印结果08:01/18ZigBee地址转换服务08:01/19ZigBee地址转换服务08:01/20ZigBee地址转换测试ZigBee地址测试程序,通过串口终端实现与传感器设备的交互示例:节点一(温湿度、电机):长地址,00:12:4B:00:07:DF:9E:B3;短地址:0x642E根据长地址查询短地址:命令格式为需要查询节点的长地址:00:12:4B:00:07:DF:9E:B3返回结果:zigbee:00:12:4B:00:07:DF:9E:B3---642E根据短地址查询长地址:命令格式为需要查询节点的长地址:642E返回结果:zigbee:642E---00:12:4B:00:07:DF:9E:B308:01/21实验操作视频EducationSolutions目录ContentsInternet+物联网网关服务框架ZigBee网关服务设计物联网网关应用设计嵌入式网关Boa服务物联网M2M服务设计08:01/23ZigBee网络综合应用ZigBee综合测试程序基于Linux串口可以完成对传感器数据的采集和控制zigbee-test.cUart.cuart_open串口初始化循环读取串口数据处理接收到的串口数据处理用户的命令响应uart_readproc_uartproc_userProtol.c从串口接收数据并解包处理传感器数据包decode_packagecp_data串口写入数据uart_writeZigBee.c分析数据包命令on_net_data长地址查询短地址响应on_response_na短地址查询长地址响应on_response_mac处理传感器数据响应on_zigbee_data向指定mac地址发数据zigbee_send_data对用户数据包封包mk_net_data查询到短地址Cache-addr.c地址缓存长地址查询短地址短地址查询长地址cache_addrcache_mac2nacache_na2mac长地址查询短地址封包mk_request_na查询不到短地址查询到短地址继续发送未完成数据返回处理好的传感器数据on_recv_data08:01/24ZigBee网络综合应用08:01/25ZigBee网络综合应用08:01/26ZigBee网络综合应用ZigBee网络综合测试程序,通过串口终端实现与传感器设备的交互示例:节点一(温湿度、电机):00:12:4B:00:05:52:78:40查询温湿度数据:发送查询命令:00:12:4B:00:05:52:78:40,