基于ESP8266的Mesh网络系统设计与实现

2017-12-02 00:25万深展念平
软件导刊 2017年11期
关键词:互联网

万深展 念平

摘要:随着物联网的发展,设计具有低成本、低功耗、易扩展的无线传感网络越来越迫切,基于Linux Web服务器的高集成Mesh无线传感网络系统应运而生。对基于IEEE802.11协议的低功耗WiFi芯片—ESP8266作为Mesh网络节点进行了研究。基于Mesh网络的无线传感系统分为三层,底层是传感器网络层,负责收集传感数据;中间层是Mesh无线网络层,利用Mesh网络强健的稳定性传输数据;高层是服务器层,主要对整个网络数据进行处理和存储。平台集成了Linux Web服务器、数据库和PHP运行环境,使用无线WiFi网络提供各种互联网接入技术。经测试,该系统具有结构简单、组网快捷、数据传输可靠性高等优点。

关键词关键词:无线传感;Mesh网络;ESP8266;Web服务器;互联网

DOIDOI:10.11907/rjdk.172441

中图分类号:TP319

文献标识码:A文章编号文章编号:16727800(2017)011008103

0引言

物联网是一个流行的网络原型,为嵌入式提供了广泛的应用。随着物联网的发展,无线传感网络得到迅速发展。WMN是近年发展起来的先进网络结构,具有低成本、高传输速度、大运用范围、维护方便等特点,成为未来通信发展的新方向[1]。搭配不同传感网络的Mesh无线网络系统拥有极广泛的工业应用,能提供稳定的内部通信网络及数据控制。Linux作为开源操作系统,强大的嵌入式Linux Web服务器拥有开发成本低、功耗低、高性能和高可靠性等优势[2]。

无线传感网络的数据通信主要通过WiFi在网络节点中进行,每个节点由ESP8266无线模块构成。而Arduino嵌入式系统作为网络通信的主要服务器,通过WiFi无线通信设备节点协议为各节点分配流量和提供数据传输,定期收集数据发送到MySQL数据库。服务器可以分析和显示接收到的数据并采取相应措施。Arduino还提供一个以太网接口,接入互联网服务器工作,用户能通过浏览器远程观察传感器数据和控制整个无线传感器网络。

1系統设计

无线Mesh网络,也称为无线网状网络,是一种新型的分布式无线宽带接入技术。无线Mesh路由器和终端设备组成了无线网格多跳网络[3]。无线网状网络的目标是让任意一个节点不仅能接受信号,还能发送信号,无线Mesh接入点既能实现数据转发,又能作为桥接器连接其它有限网状网络。无线网状网络的多跳连接将成为解决“最后一英里”瓶颈问题的关键技术[4]。

目前大多数无线传感网络都是基于红外射频和ZigBee,而基于WiFi无线网的传感网络费用昂贵。基于RF的红外射频传感网络容易受到干扰,只适用于小范围的传感网络使用。而ZigBee技术衰减快,抗干扰性差,兼容性低,无法实现大面积部署[5]。

本文系统基于IEEE802.11n无线协议,能够提供比ZigBee更高的数据传输速度。整个无线传感网络系统分为3层,结构如图1所示。

图1无线传感系统层次结构

本文采用低成本和高效节能的ESP8266开发无线传感器网络WiFi模块。ESP8266模块通过配置,能够提供高性能、高集成性的WiFi数据传输。断电逻辑算法和先进的电源管理程式提供了一种高效节能的WiFi无线传感器网络。ESP8266在深度睡眠模式时,RTC时钟仍处于运行状态,能耗极低,仅需不到1mA的电量就可保持连接到接入点[6]。

Mesh网络层拥有自适应、自动修复功能,当传输链路中某条路径发生拥堵或断开时,能自动选择其它路径进行传输或在ESP8266内短暂存储,避免了无线传感器网络传输过程中的带宽拥挤问题,有效解决了无线传感器网络的延迟效应。

服务器层使用基于Arduino的嵌入式Web Linux服务器,开源的Linux系统可为整个无线传感网络系统提供强有力的技术支持。ESP8266作为整个Mesh网络的节点,在节点与节点、用户与节点以及节点与服务器中传输数据,用户可通过ESP8266对节点进行控制。系统如果需要多点采集或者内网传输,客户端可直接由笔记本计算机构建,即利用Web窗口来控制节点的传输、切换等工作。

客户端能进行远程Web页面控制。例如DS1820温度传感器收集到的数据,需要通过LED显示,组件能够在客户端演示收集到的数据,具体实现方法是:末端通过温度传感器在偏远地区收集数据,与传感器相连的Arduino模块作为一个小型电脑,持续不断地对传感器进行监控和暂存采集到的数据,并且发送到SQL数据库中,从而组成一个轻量化的小型传感系统。

2系统实现

2.1嵌入式Web服务器实现

嵌入式Web服务器技术是目前比较流行的物联网工程技术,常见的Web服务器有Httpd、Boa以及Thttpd等[7]。考虑到服务器需要支持CGI程序以及对数据进行身份验证,本系统选用功能强大的嵌入式Web服务器Apache,数据库则使用MySQL。

首先,下载Web服务器Apache源代码。然后根据无线Mesh AP配置管理平台,对源码的配置文件进行修改。最后,对修改过的Apache服务器源代码进行编译,烧录进Linux操作系统内核。

在Apache服务器移植过程中,要对配置文件httpd.conf进行正确修改。通过修改httpd.conf配置文件完成Apache服务器的配置后,还要对限制上传文件内存的宏进行修改。默认上传文件大小不得超过1MB,根据实际需要修改为200MB比较合适。修改命令如下:

#define SINGLE_POST_LIMIT_DEFAULT 200*1024*1024/*1MB*/

修改完后对服务器源码进行编译和下载调试。在终端中设置嵌入式开发板的IP地址,在浏览器中输入IP地址就能打开Apache服务器指定好的无线Mesh AP管理平台首页。通过浏览器远程登录嵌入式Web服务器即可对系统进行监控和管理。endprint

嵌入式开发板为Arduino uno嵌入式模块,是一个微小、高效的微型嵌入式电脑主板。信用卡大小的微型电脑主板拥有着近乎完美的兼容性,能够与许多平台和设备完美结合[8]。本系统Arduino嵌入式模块主要作为服务器基站,通过WiFi与作为通信节点的ESP8266连接,使用802.11无线协议。

2.2AODV路由协议移植

实际传输过程中存在连续损失和离散损失两种情况。恒定常量的数据丢失无疑对鲁棒性有较大影响。AODV的Mesh无线网络框架的WiFi算法可以避免传输过程中连续的数据丢失。AODV是一个纯粹的按需路由协议,不在路径内的节点不保存路由信息,也不参与路由表交换[9]。如果其中一个节点未能与服务器进行数据通信,则发送失败的数据将会发送给相邻节点,由相邻节点发送此数据到服务器。在WiFi框架的实施算法中,通道数据是打包在一起一并发送到基站的[10]。

协议软件的移植过程:先将AODVUU路由协议在PC机Linux系统上进行编译,调试通过后再使用交叉编译器将其编译为可在ARM开发板下运行的可执行文件。在配置内核时必须选Network packet filtering中的Netfilter相关选项,否则AODV无法运行。配置完内核后,重新进行内核编译。AODVUU最终经过交叉编譯后将生成内核模块文件kaodv.ko和用户空间可执行文件aodvd。再将重新编译生成的内核下载到开发板,并将AODVUU交叉编译后的两个文件放进ARM开发板的文件系统中,加载kaodv.ko,执行aodvd文件。

2.3ESP8266 Mesh网络组网与实现

由于Esp8266有相应的SDK开发文档以及Mesh组网的API接口,因此大大简化了开发步骤,直接调用相应的API接口即可:①通过wifi_get_macaddr获取模块的MAC地址,其参数为if_index,返回值为true或者false,表示获取mac地址失败或者成功;②配置用户数据包(buf)的内容;③初始化目标的mac地址(若mac地址为零则视为向所有网络中的设备广播数据包);④通过调用espconn_Mesh_create_packet函数创建一个数据包(由指针header指向这个数据包),其参数为dst_add、src_addr,表示接收到的mac地址和发送的目标地址。其中header的信息包括dst_addrv、src_addr、option_list、packet Body等内容;⑤通过调用espconn_Mesh_set_usr_data函数,将用户数据包中的内容添加进将要发送的数据包中,参数有head、_data、data_len等,分别表示包发送的地址、用户缓存区一级数据长度。返回值为ture或者false,设置成功或者失败;⑥通过调用espconn_Mesh_sent函数发送数据(数据发送完后需要用户手动释放这个数据包的内存)。部分代码如下:

os_memset(buf,0,sizeof(buf));

os_sprintf(buf,”%s”,”{\”bacast\”:\””);

os_sprintf(buf+os_strlen(buf),MACSTR,MAC25TR(src));

os_menset(dst,0,sizeof(dst));//获取MAC地址

header=(struct Mesh_header_format*)eapconn_Mesh_create_packet(

dst,src,false,true,m_proto_json,os_strlen(buf),false,0,False,0,false,00);//创建一个数据包

if(!espconn_Mesh_set_usr_data(header,buf,os_strlen(buf)))

{

MESH_DEMO_PRINT(“bcast set user data fail\\n”);

MESH_DEMO_FREE(header);

return;

}//设置用户数据

If(eapconn_Mesh_sent(&g_ser_conn,(uint8_t*)header,header>len))

{

MESH_DEMO_PRINT(“bcast Mesh is busy\\n”);

espconn_Mesh_connect(&g_ser_conn);

MESH_DEMO_FREE(header);

return;

}//发送数据包

3结语

本文系统介绍了基于WiFi的Mesh无线传感网络设计与实现,使用了基于Linux的arduino开发板和基于ESP8266无线模块的Mesh无线网络系统。该系统适用于实时无线传感器监测和远程控制传感器网络,解决了无线局域网和基于射频的传感器网络延迟、高成本以及技术门槛高等问题。基于WiFi的Mesh网络不能解决无线传感系统带来的所有问题,但能够避免任何类型的故障节点和服务器间的数据通信中断以及流量拥堵等问题。

参考文献参考文献:

[1]肖同松.无线传感网络综述[J].中国科技信息,2008(23):105106.

[2]李晓阳.WiFi技术及其应用与发展[J].信息技术,2012(2):196198.

[3]杨峰.无线Mesh网络综述[J].数据通信,2009(1):1517

[4]孙其博.物联网:概念、架构与关键技术研究综述[J].北京邮电大学学报,2010(3):39.

[5]ZENGHUA ZHAO,XUANXUAN WU, XIN ZHANG, et al. ZigBee vs. WiFi: understanding issues and measuring performances of their coexistence performance computing & communications conference,2014:1-8

[6]曹振民.基于ESP8266的无线控制电路设计[J].工业控制计算机,2017(1):4952.

[7]JEREMY BENTHAM.嵌入式系统Web服务器:TCP/IP[M].陈向群,译.北京:机械工业出版社,2003.

[8]MCROBERTS M.Arduino从基础到实践[M].杨继志,译.北京:电子工业出版社,2013.

[9]KIN KLEUNG.无线Mesh网络架构与协议[M]. 第1版.易燕,译.北京:机械工业出版社, 2009.

[10]斯托林思.无线通信与网络[M]. 第1版.何军,译.北京:清华大学出版社,2005.

责任编辑(责任编辑:杜能钢)endprint

猜你喜欢
互联网
浅谈大数据在出版业的应用
浅析互联网时代维基百科的生产模式
“互联网+”环境之下的著作权保护
“互联网+”对传统图书出版的影响和推动作用
从“数据新闻”看当前互联网新闻信息传播生态
互联网背景下大学生创新创业训练项目的实施