ESP8266-WIFI模块开发学习
ESP8266 模块简介
ESP8266 系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫 ESP8266EX 的超低功耗的 UART-WiFi 芯片的模组,可以方便地进行二次开发,接入云端服务,实现手机 3/4G 全球随时随地的控制,加速产品原型设计。模块核心处理器 ESP8266 在较小尺寸封装中集成了业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-FiMAC/BB/RF/PA/LNA,板载天线。支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP协议栈。用户可以使用该模块为现有的设备添加联网功能,也可以构建独立的网络控制器。
ESP8266 是高性能无线 SOC,以最低成本提供最大实用性,为 WiFi 功能嵌入其他系统提供无限可能,特点:
802.11 b/g/n
内置 Tensilica L106 超低功耗 32 位微型 MCU,主频支持 80 MHz 和 160 MHz,支持 RTOS
内置 10 bit 高精度 ADC
内置 TCP/IP 协议栈
内置 TR 开关、balun、LNA、功率放大器和匹配网络
内置 PLL、稳压器和电源管理组件,802.11b 模式下+20 dBm 的输出功率
A-MPDU 、 A-MSDU 的聚合和 0.4 s 的保护间隔
WiFi @ 2.4 GHz,支持 WPA/WPA2 安全模式
支持 AT 远程升级及云端 OTA 升级
支持 STA/AP/STA+AP 工作模式
支持 Smart Config 功能(包括 Android 和 iOS 设备)
HSPI 、UART、I2C、I2S、IR Remote Control、PWM、GPIO
深度睡眠保持电流为 10 uA,关断电流小于 5 uA
2 ms 之内唤醒、连接并传递数据包
待机状态消耗功率小于 1.0 mW (DTIM3)
工作温度范围:-20℃- 85℃
ESP8266 模块使用说明
模块硬件连接
ESP8266 本身就是一个 mcu,所以它可以有两种用途:
1.当成一个普通的 wifi 模块,用官方集成的 AT 指令集进行开发,即 ESP8266 为一个串口 wifi 模块,主控 MCU通过串口方式发 AT 指令到 ESP8266,设置该模块的功能和通信;
2.当成一个集成了 wifi 功能的 mcu,用安信可或其他平台提供的 sdk 进行深度开发,编译后烧写进 ESP8266 芯片中。
在后续的开发学习中,我们主要是采用第一种用途,本文也主要基于此进行分享,另一种在将来的深度开发中才会涉及到。
连接方面不再做过多赘述,此处强调一点,针对ATK-ESP8266,请注意第六脚(IO_O)用于默认模式是高电平,也就是悬空,但用于固件烧写模式下,请与GND连接。另外固件烧写具体步骤请参考安可信提供的说明书。
模块软件调试
将 usb 转 ttl 模块插入电脑 USB 槽中,电脑上打开串口调试助手 XCOM V2.0,模块默认是 AT 指令状态,模块波特率: 115200(8 位数据位, 1 位停止位),设置如下:
串口打开后,通过串口发送AT 指令到 ESP8266 模块后,返回 ok 表示通信成功,此处注意要选择正确的COM号,波特率设置正确(默认情况下是115200),务必勾选发送新行。如下图所示:
ESP8266 模块默认波特率是 115200,但是这个波特率有点大,实际使用中修改为 9600 或者 4800 通讯效果会好很多。为了使通讯效果提升,我们需要在发送框中输入 AT+CIOBAUD=9600,按发送按钮,在黑色框中出现 AT+CIOBAUD=9600 OK,则已经将模块通信的波特率设置为 9600 了,然后关闭串口,重新设置图 5 中波特率为 9600,其他参数不变。重启模块即可生效。然而实际上在修改波特率的过程中, 这一步骤可能会返回AT+CIOBAUD=9600 ERROR,原因是因为ATK-ESP8266的出厂固件程序不支持波特率修改,需要自行参考安可信固件烧写说明书进行固件的升级。如下图所示:
AT+CWMODE= X 指令用于设置工作模式指令,
X 为 1 时:STA 模式,ESP8266 模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。
X 为 2 时:AP 模式,ESP8266 模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制。
X 为 3 时:STA+AP 模式,两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。
AT+RST 为重启指令,设置工作模式后重启模块才能生效。发送完这条指令后再发送其它指令可能会显示串口无效,需要退出串口调试助手再重新进入。如下图所示:
AT+CWSAP= <\ssid> ,<\pwd>,<\ch>,<\ecn>指令为设置 AP 模式下的参数,即设置热点的名字、密码、通道、加密方式参数。例如 AT+CWSAP=”VIKEBT”,”147258369”,2,0 指令。如下图所示:
模块常见示例应用
TCP Client 透传模式 (STA 模式)
Client 和 Server 之间能自由传输数据,不会受到格式的约束。
注:ATK_ESP8266 模块仅在 TCP Client 和 UDP, 支持透传模式,在TCP Server模式下不支持透传。
1)设置 WIFI 模式
AT+CWMODE=1 //设置为 STA 模式
响应:OK
2)重启生效
AT+RST
响应:OK
3) 连接路由器
AT+CWJAP=”ASCII”,”ASCII534856” //连接外部路由器的 ssid 和 password
响应:OK
或 3) 连接手机热点
AT+CWJAP=”PARKING”,”147258369” //连接手机的 ssid 和 password
响应:OK
4) PC 与 ESP8266 连接同⼀个路由,在 PC 上使⽤网络调试助手,创建⼀个 TCP 服务器 ,如下图所示:
在此处,我遇到了问题,首先第一个问题是接口8080被占用,然后按百度提供的方法发现是Multisim后台运行占用了8080端口,然后此时没有解决不能连接的问题,仍然会出现下图所示的报错,最后仔细检查后发现是本地IP地址有误,改正后就能很快连接上了。
或 4) 手机端打开网络调试助手,开启8080端口
5) 模块作为 TCP client 连接 TCP server
AT+CIPSTART=”TCP”,”192.168.1.105”,8080
响应:CONNECT
OK
或 5) 模块作为 TCP client 连接手机端 TCP server
AT+CIPSTART=”TCP”,”10.125.141.55”,8080
响应:CONNECT
OK
6) 开启透传模式
AT+CIPMODE=1
响应:OK
7) 开始透传
AT+CIPSEND
响应:OK
现在就可以相互发数据了
8) 退出透传模式
在透传模式中,若识别到单独的一包数据“ +++”,则退出透传模式,主要此时不要勾选发送新行,否则会退出失败。
9) 断开TCP连接
AT+CIPSEND
响应:OK
注意: 如果客户需要模块上电自动连接到某个 IP 并进入透传模式,这个时候客户需要在模块连接到路 wifi 热点之后,发送AT+SAVETRANSLINK=1,”192.168.1.xxx”,8086,”TCP”,设置模块为上电自动连接到 TCP Server: 192.168.1.xxx, 8086,并进入透传模式。 取消上电透传发送AT+SAVETRANSLINK=1。
多连接 server (STA 模式)
目前 ATK_ESP8266 模块作为 server,需建立多连接,即可以连接多个 client。
以下为 ATK_ESP8266 作为 STA 模式建立 TCP SERVER 的设置。
1)设置 WIFI 模式
AT+CWMODE=1 //设置为 STA 模式
响应:OK
[
2)重启生效
AT+RST
响应:OK
[
3) 连接路由器
AT+CWJAP=”ASCII”,”ASCII534856” //连接外部路由器的 ssid 和 password
响应:OK
[
4) 启动多链接
AT+CIPMUX=1
响应:OK
5) 建立 server
AT+CIPSERVER=1,8080 //设置端口号为 8080
注意: ESP8266 作为 TCP server 有超时机制,如果连接建立后,一段时间内无数据来往, ESP8266 TCP server 会将 TCP client 踢掉。请在 PC 网络工具连上 ESP8266 后建立一个 2s 的循环数据发送,用于保持连接。
6) 获取模块 IP 地址
AT+CIFSR
响应:OK
IP //IP 地址
MAC //MAC 地址
7)电脑或者手机连接到 server,电脑或手机作为 client。请记住所有设备都是在同一局域网下,即都连接在ASCII上,如下图所示:
对于网络调试助手如NetAssist等连接不上服务器且左下角显示“1035未知错误”的问题,如下图所示,
本人困惑许久,参考了网上的多种解决方法,最后发现是虚拟机中的网络连接影响到了网络调试助手无法正常使用,原因在与虚拟机的网络与电脑的以太网或WIFI网络不是同一个网络,所以网络调试助手无法辨别到底是那个本地IP需要与服务器连接,所以就会左下角显示“ 1035 未知错误”,而虚拟机中的网络适配器设置改不改成非桥接模式不影响网络调试助手报错,我们需要把红色方框中的两个网络禁用,即把跟虚拟机(VMware)相连的两个网络禁用,选中这两个网络右击后再点击禁用,然后,我们再重新打开网络调试助手,输入好服务器IP地址和端口号后,点击连接,发现可以成功连接了。
8)模块向指定通道发送数据
AT+CIPSEND=id,size //id:client 通道号, size:要发送的数据长度
响应:OK
9)接收数据
+IPD,id,size: //id:收到数据的 client 通道号, size:接收到的数据长度
服务器模式 (AP模式)
ATK_ESP8266 模块开启AP模式,然后开启一个热点,其他设备通过tcp连接上这个网络后,就变成了一个独立的无线通信系统。
1)设置 WIFI 模式
AT+CWMODE=2 //设置为 AP 模式
响应:OK
2)重启生效
AT+RST
响应:OK
3) 配置热点
AT+CWSAP=”VIKEBT”,”147258369”,1,3 //设置热点的名字、密码、通道、加密方式
响应:OK
4) 启动多链接
AT+CIPMUX=1
响应:OK
5) 建立 server
AT+CIPSERVER=1,8080 //设置端口号为 8080
响应:OK
6) 获取本地 IP 地址
AT+CIFSR
响应:+CIFSR:APIP,
配置完之后可以连接了,这里我使用的是笔记本和手机连接模块发射出的热点。
打开网络调试助手,采用客户端模式,连接到刚刚配置好wifi的ip和端口号,即可通信。
通信时服务器是不能直接发送数据给客户端的,需要发送at指令,来说明要发送给谁,发多长数据。如图,0表示发送到电脑,1表示发送到手机。
当然如果这种方式不符合你的要求的话,你可以将模块配置成为透传模式。但是别忘记了ESP8266只能当做客户端去连接服务器,才能实现透传,所以这就是AP模式的特点。
参考资料
https://blog.csdn.net/qq_36347513/article/details/115863228?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
https://blog.csdn.net/qq_37603131/article/details/103919186
https://blog.csdn.net/whalefall/article/details/80909889
https://www.cnblogs.com/little-kwy/p/12161464.html
ATK-ESP8266 WiFi用户手册_V1.01