一直要不断的向前进步啊。之前有一段时间学习了ESP8266模块,当时也是一顿折腾,捣鼓了好几天,虽然实现了简单的通信,但是脑子里还是一片浆糊,对它的原理还是不太理解。最近凑着寒假有时间,又重舒旧情再来一遍,现在把整个过程的经验分享给大家,希望能够帮助到你们。
本篇博客借鉴了两位大佬的经验:
1.https://blog.csdn.net/qq_38410730/article/details/86538288
2.https://blog.csdn.net/qq_41821562/article/details/85339678?utm_source=app
整个过程我想分3篇博客说明:
①ESP8266简单测试,让你体验测试成功的快感。
②STA模式 <电脑——路由器——模块>,也就是以路由器为中介实现电脑和模块之间的通信。
③通过ESP8266实现电脑与单片机的通信(代码实现)。
ESP8266三种工作模式
我们知道ESP8266 模块支持 STA/AP/STA+AP 三种工作模式:
STA模式:通过连接路由器进行模块和电脑(手机)之间的通信。
AP模式: ESP8266为热点,实现电脑(手机)与模块之间的直接通信。
STA+AP模式:即两种模式同时存在。
进一步的说
STA模式 <电脑——路由器——模块>
也就是路由器为中介实现电脑和模块之间的通信。
STA模式下,模块也可以作为TCP服务器(Server)、TCP客户端(Client)、UDP三种模式。
透传模式
透传就是指不需要关心wifi协议是如何实现的。所需要做的就是A通过串口发数据,B通过串口收数据,整个过程中A串口和B串口就像是用导线直接连接起来了一样。则对于开发人员来看,就是完全透明的。
更简单地理解就是:
如果不开启透传模式,我们怎么发送数据呢?在每次发送数据前都必须先发送指令
AT+CIPSEND=(我们要发送的数据)
那么透传模式如何设置那?
下面我们测试模块在STA模式下的透传设置
1)设置WIFI模式:
AT+CWMODE=1 //设置为STA模式
响应:OK
2)重启生效
AT+RST
响应:OK
3)连接路由器
AT+CWJAP=”E201”,”1234567890” //连接对象路由器的名称和密码(不要连接手机热点,我也不知道为什么,但是连接手机热点连接不上。)如果这一步失败,尝试连接其他路由器。
响应:OK
4)AT+CIPMUX=0 //设置单路连接模式
响应:OK
注:下面的操作是以电脑作为服务器,即通过串口调试助手发送数据,电脑通过网络调试助手接收数据。(关闭防火墙,一定要关闭防火墙)电脑和模块连接的是同一个路由器。
5)在电脑上使用一个网络调试助手,创建一个server,(本地IP即你电脑的IP地址)
注:这里笔者有几点说明一下
网络调试助手怎么用那?又有什么功能那?
①你可以不加任何外设,只是仅仅打开两个网络调试助手,一个选择TCP Serve,另一个选择TCP Client, 那IP地址和端口号又怎么设置那?接着往下看
②IP地址:当你的电脑连接上WIFI,便会自动分配一个IP地址,这个不可认为更改。
③端口号:端口号可自行定义,什么意思那?
就比如说我遇到的情况,我打开一个网络调试助手,设置为TCP Server,端口号默认为8080,但是当我连接的时候没有反应,连接不上。后来在网上一顿查才知道,当你创建的Server连接不上的时候,是因为你现在的端口号被占用了,因为端口号可以自行定义,所以你可以设置个别的啊。话说过来,怎么知道哪些端口号被占用了那?
打开cmd命令提示符,输入netstat –ano,就可以看到8080端口已被占用
所以我就设置一个8082端口,连接成功。
接下来我两个网络调试助手都设置端口为8082,连接成功,在Client窗口中发送消息,Server便可以接收到相应的消息。如下图:
当然也可以互相发送信息,如果你勾选了十六进制显示,它显示的便是转换后的十六数。
6)模块连接到server
AT+CIPSTART=”TCP”,”192.168.1.115”,8080 //输入你自己的IP和端口号
响应:CONNECT
OK
如果此时显示错误的话,原因有以下两点
①没有关闭电脑防火墙。
②模块和电脑连接的不是同一Wifi。
③如果还是显示错误的话,尝试连接别的路由器(小白当初上面①②选项都没有问题但是就是连接不上,偶然一次机会在亲戚家,模块和电脑连接了另一个wifi,没想到连接成功)。
所以:如果还是连接不成功,不要灰心,慢慢找原因,你一定可以。
7)开启透传模式
AT+CIPMODE=1
响应:OK
8)开始透传
AT+CIPSEND
响应:OK
>
现在就可以相互发送数据了。
9)退出透传
+++(注意此时取消勾选“发送新行”选项)
发送完之后,没有任何显示,此时再次勾选“发送新行”选项,发送AT,则返回OK。
上面是只是用AT指令对模块就行测试,并没有用到任何代码,接下来实现模块与单片机连接,实现单片机给服务器发送数据。
下一篇博客可能需要一段时间,因为我现在遇到一些问题,代码下载到单片机之后,因为我将单片机的TX引脚飞了出来,一个接ESP8266的RX,一个接USB转TTL的RX,这样串口就可以显示单片机发送的数据,可是打开串口之后,一直显示在连接路由器,一直重复这个命令,连接不上路由器。现在也不知道为什么。
如果有哪位大佬知道我的问题出现在哪里,希望指正。
代码连接:
https://pan.baidu.com/s/13r-W_wGHOc8TKX9_YDokCA
单片机通过ESP8266将数据发送到本地服务器.