无线模块的AT指令UDP透传设计

  作者:黄玉金 杨越 薛伟 张天成 时间:2017-12-26来源:电子产品世界

编者按:ESP8266是一款国产的性能稳定、价格低廉的串口与WiFi桥接器,本文对单片机与ESP8266的接口模型和用AT指令配置ESP8266的UDP透传通信进行了分析与研究,提出了该模式下单片机程序设计的一种简化结构和操作步骤,应用在多路温控RTU设计中运行稳定。

作者 / 黄玉金1,2 杨越1,2 薛伟1,2 张天成3

  1.中国地质大学(武汉)自动化学院(湖北 武汉 430074)

  2.复杂系统先进控制与智能自动化湖北省重点实验室(湖北 武汉 430074)

  3.武汉朗德电气有限公司(湖北 武汉 430223)

  *基金项目:国家自然科学基金(编号:61503350)

  黄玉金(1978-),硕士,讲师,研究方向:无损检测技术和智能仪器设计。

摘要:ESP8266是一款国产的性能稳定、价格低廉的串口与WiFi桥接器,本文对单片机与ESP8266的接口模型和用AT指令配置ESP8266的UDP透传通信进行了分析与研究,提出了该模式下单片机程序设计的一种简化结构和操作步骤,应用在多路温控RTU设计中运行稳定。

引言

  ESP8266是上海乐鑫公司设计的高度集成的 WiFi SoC,它具有低功耗、紧凑设计和高稳定性的特点。ESP8266拥有完整的且自成体系的 WiFi 网络功能,既能够独立应用(集成了32位处理器,带片上SRAM),也可以用作串口-WiFi桥接模块,配合其他主机 MCU运行。

  在独立应用时,集成的处理器通过GPIO可以和外部传感器或模块进行接口,乐鑫提供了专门软件开发方案,其一下游模块生产商安信可(AI-Thinker)提供了Windows下的GUI方式的IDE实现SDK编程[1]。这种方法需要用户对ESP8266及其编程有相当的理解,一般需要较长的学习和开发周期。

  当ESP8266用作桥接模块配合单片机(如8051兼容单片机、ARM Cortex M0、M3等)使用时,可以采用UART串口、I2C或SPI与主控单片机接口,但是用得最多的还是串口。借由一套便捷的AT指令[2],单片机可以通过工作于station模式的ESP8266模块快速、稳定地连上WiFi,也可以生成WiFi AP,供其他设备连接,甚至还可以工作于AP和station共存的模式。

  ESP8266目前在智能灯泡、插座、开关等智能电器中有广泛应用,在工业、科研设备的联网方案中也被大量采用[3]。笔者在一个多路温控记录项目中就使用这个模块设计了RTU,该RTU在室外环境中也工作稳定。

  本文主要介绍采用AT指令的UDP透传通信的编程模型设计。采用UDP透传,用户的主控单片机可以用类似有线UART的方式实现WiFi传输,可以显著地降低开发难度,节约开发时间。

1 ESP8266的AT指令集

  根据数据手册[2],ESP8266的AT指令包含4个类型,用于实现基础功能、WiFi相关和TCP/IP相关的功能的操作。

  在设置指令中,根据设置参数的时间有效性又分为当前参数设置和永久参数设置。当前参数设置在下一次复位或被更改前有效,永久设置在设置被更改之前均有效。乐鑫为模块公司提供了AT指令模式的源代码和SDK,模块公司往往会对这些指令进行删减和调整(增加私有AT指令),以适应更小的FLASH或简化应用。本文采用安信可(AI Thinker)公司修改后的指令集手册[4]进行了测试。

  ESP8266的数据通信既支持UDP方式,也支持TCP(或SSL)方式。一般认为TCP协议面向连接,提供的服务更加可靠,但是在单片机中处理TCP通信控制错误会比较麻烦,笔者在设计温控RTU时就采用了数据报方式的UDP透传通信。本文对ESP8266的UDP AT指令实现通信透传时的编程设计进行了介绍和总结。

2 ESP8266的UDP透传的分析

2.1 UDP、IP和端口

  UDP(User Datagram Protocol,用户数据包协议),是一个简单的面向数据报的传输层协议。在TCP/IP模型中,UDP为网络层以上和应用层以下提供了一个简单的接口。

  UDP通信被认为是不可靠的通信,这里的不可靠主要指两个方面:报文是否送达不可靠,报文送达的顺序不可靠。前者是因为协议的设计没有要求对发送的数据进行确认,后者是因为数据报可能经由不同的路由而导致到达目标的时间延迟不一致引起的。对于报文是否送达虽然在通信层没有进行实现,但是用户(程序设计人员)可以在应用层面实现反馈确认;而针对报文顺序问题,考虑到ESP8266更多的是用于低通信载荷的场所,多数情况一个数据报就可以传递当前的全部数据,一般也不会造成困扰。

  ESP8266提供WiFi方式连接以太网,WiFi在OSI网络互联模型的通信层、数据层和有线的以太网有一些不同,但是对使用UDP或是TCP的应用者而言并没有区别,只是Internet通信的一种具体形式,不会影响到ESP8266模块的使用者。

  在使用ESP8266进行无线通信的开发时,还有2个基本概念需要理解:IP地址和端口号。在UART通信中,线缆的两端分别连接不同的设备,属于1对1的通信,两个设备不需要身份设置就可以相互区别;而通过网络进行信息传输时,因为网络上有很多不同的设备,就必须对设备进行标记区别。Internet网络中,这个身份设置就是IP地址。无论是TCP还是UDP,在通信中都会涉及到目标IP地址和源IP地址,用于对不同设备进行标记。

  端口则是编程的电子工程师需要理解的另一个重要概念。端口和IP(用于标志设备)一起使用,用于标志同一个设备中不同的功能或者关注的不同的通信数据。

2.2 ESP8266的工作模式

  ESP8266可以工作于3种模式:station模式、AP模式以及station和AP共存模式。工作于AP模式的ESP8266提供与路由器类似的功能,但是最多只能连接4个station,本文不做分析。在使用ESP8266 AT指令方式的进行数据交换的场所,主要有下面2种形式:

  1)主控板通过TTL UART连接 ESP8266模块,通过UART发送AT指令控制ESP8266连接路由器(AP)工作于station模式(图1a)。这种模式下,ESP8266和主控板之间相当于无线网卡和PC之间的关系;

  2)主控板通过TTL UART连接 ESP8266模块,通过UART发送AT指令控制ESP8266AP模块工作于AP+station模式,模块生成一个AP,同时本身也作为station收发数据(图1b)。这种模式下模块可以与连接到该模块所生成的AP的其他模块或者设备通信,可用于构建小型局域网(最多连接4个设备),但是更多的场景还是用于AIR-KISS等无线方式对该模块进行配置[5]。因为这种方式在应用中可能存在多个连接,需要动态传递控制信息,不能进行透传,也不在本文讨论之列。

2.3 ESP8266使用注意事项

  ESP8266工作于AT指令操作模式时,为了减少MCU解码的时间和简化内部协议栈的设计,对AT指令的设计和使用有一些额外的要求,在开发中注意到这些要求,会显著提高开发效率:

  1) 模块的默认波特率(出厂设置)是115200bps;

  2)AT指令必须大写,而且以回车换行符"rn"结尾;

  3)长度和时间间隔成帧机制。ESP8266 判断UART传来的数据时间间隔, 若时间间隔大于20ms,则认为一帧结束;否则,一直接收数据到上限值2KB,认为一帧结束。ESP8266模块判断UART来的数据一帧结束后,通过WIFI接口将数据转发出去。成帧时间间隔为20ms,一帧上限值为2KB。

2.4 AT指令透传设计

  MCU通过串口和ESP8266连接,发送控制信息或者数据到串口,ESP8266也将控制命令的执行情况和收到的数据从串口返回。要进行透传需要发送一系列的配置指令,模块执行命令或者传递数据的时间也通常不可忽略,而且有些指令会执行失败,对程序结构的设计带来巨大挑战。

  表1对进行透传通信配置过程中可能会用到的指令的执行时间进行了统计。测试时将ESP8266恢复至出厂设置,近距离( <3米)连接了一个TPLINK WR845N的家用无线路由器。从表1可以看到,执行简单的查询模块IP的指令耗时10ms,从给ESP8266发出连接路由器指令到反馈连接成功耗时5.2s。在计算机上通过串口测试ESP8266时,人工交互式执行系列指令很方便,如果某指令未能成功执行,用户可以根据需要动态获取模块状态,调整指令输出成功配置模块正常工作,但在单片机的程序设计中如果有些指令的执行时间太长,或者某条指令执行失败,相应的程序的运行逻辑就变得很复杂。

  在对ESP8266的指令表进行研究之后,发现在对ESP8266进行透传配置后,有一条指令在保存其透传设置后可以使得模块上电之后自动连接路由器并绑定预定的远程和本地的IP和端口,再次进入透传状态。在利用这个特性之后,主控板检测到ESP8266未能正常工作时,只需复位重启模块即可。对ESP8266模块的配置可以使用PC端软件交互操作,不用在单片机上额外配置,可以显著的降低编程难度。

  要将ESP8266模块配置为上电自动进入透传模式,一般先在PC上进行测试。在将模块与USB串口桥接器(如CP2102或CH340)的TX和RX交叉连接后,保证ESP8266模块有充足的3.3V的电源供应,然后按照下面的流程进行测试和配置:

  1.测试模块是否正确连接,即发送测试指令观察是否有反馈;

  a)注意模块的通信波特率需设置正确。一般通过给模块断电并重新上电观察是否接收到模块上电时从串口输出的状态信息(是否正确显示)来判断波特率和电路是否正确连接。

  b)发送AT测试指令观察是否有反馈。有的时候模块被配置后上电自动进入透传模式,从而导致AT测试没有反应,此时可尝试发送"+++"退出透传。注意退出透传指令必须单独发出,即发送"+++"时不能同时跟随发送"rn"或其他的字符,必须发送单独成帧的"+++"。

  2.发送 AT+MODE=1 配置模块工作于透传模式;

  3.发送 AT+CWJAP="ap","pw" 配置模块连接指定的路由器AP;其中ap、pw分别指预期连接的AP的名称和密码;

  4.发送 AT+CIPMUX=0 配置模块工作于单连接状态;

  5.发送 AT+CIPSTA="192.168.x.y" 配置模块使用指定的IP;其中 "192.168.x.y" 表示预期的IP;

  6.发送 AT+SAVETRANSLINK=1,"192.168.1.8",51081,"UDP",51080 配置模块透传远端IP "192.168.1.8" 和端口51081,自身在51080端口监听;

  7.发送 AT+RST 或者断电再加电复位模块进入透传模式(图1a)。

  经过上述配置,当ESP8266进入透传状态之后,主控板通过TX发送的数据自动发送到远端IP绑定的端口,远端设备发送到本地IP和端口的数据也自动从RX传入(图1a)。

3 结论

  本文用上述方法在设计的野外运行的多通道温控系统RTU上实现了WiFi无线传输,运行稳定可靠。后又专门设计了相应的软件实现了ESP8266 UDP透传的图形化的一键配置,可显著节约ESP8266 WiFi无线设计的开发时间。

  参考文献:

  [1]曹振民,陈年生,马强,等.基于ESP8266的无线控制电路设计[J].工业控制计算机,2017,(01):68-69.

  [2] Espressif Systems (Shanghai) Pte., Ltd., ESP8266 AT Instruction Set, Ver2.1.0, 2017.

  [3]范兴隆.ESP8266在智能家居监控系统中的应用[J].单片机与嵌入式系统应用,2016,(09):52-56.

  [4]深圳市安信可科技有限公司,Espressif AT指令集(安信可修改版),Ver0.21,2015.

  [5]罗光玮.无线网络环境手机快速配置智能硬件方法研究[D].华中科技大学,2015.

  本文来源于《电子产品世界》2018年第1期第34页,欢迎您写论文时引用,并注明出处。

关键词: ESP8266 AT指令 透传 编程 WiFi 201801

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章


用户评论

请文明上网,做现代文明人
验证码:
查看电脑版