u过本人还是在校菜鸟一只,最近跟着学长做东西,第一次使用WIFI模块与stm32进行通信,半天过去了,终于对ESP8266有了一定的理解,在此篇博客中,我只介绍如何使用(步骤以及注意事项),尽量不涉及太多的理论知识(况且我这个小白也不懂啊)。博客会不断补充,小编也不想凑博客数量,一切务实为准,不对之处,还请朋友们指出,共同进步。

ESP8266一共有三种角色/工作模式,分别是:1.Station (客户端模式)2.AP (接入点模式)3.Station+AP (两种模式共存)

客户端模式就是作为设备(client)连接区域网内路由,接入点模式即是作为路由(sever),允许其他设备连接ESP8266.第三种即是同时扮演两种角色。与蓝牙模块相似,esp8266也需要进行AT指令设置。下面进行具体操作:

第一步,连接CH340转TTL模块和ESP8266(esp8266和esp8266-01s接线方式完全一样,功能也基本相同。)

     

STM32 ESP8266连接MQTT esp8266和stm32连接_esp8266

CH340-TTL----------ESP8266
TX -----------URXD(注意不要接反了)
RX ---------- UTXD(注意不要接反了)
3v3 ----------CH_PD
3v3-----------VCC(不要5V供电)
GND---------GND,连接线路之后,打开串口调试助手,设置波特率为115200,然后发送“AT”(这里的串口助手发送AT,需要追加回车换行,即Enter键,然后点击发送,模块才能返回OK的字样,后边的所有的AT指令也是如此),ESP8266就能返回"OK"的字样了,表示接线无误,通信正常。

一、透传模式即是STA模式:ESP8266模块要和电脑(服务端)在同一个局域网中。对路由器不需要任何其他的配置,只需要知道WIFI名称和密码;也不需要有外网;首先解释一下,当设备加入路由器的时候,路由器会给不同设备分配一个不同的IP地址,对电脑来说也就是电脑里查看的IPv4的那个IP。  通过电脑可以查看ip地址,也可以通过路由器查看ip地址。 有些设备不能自己查看,就可以通过路由器查看了。通过电脑开一个服务器,这个端口号可以自己修改,但是ip地址要使用在局域网中的那个ip。

具体步骤

+RST,回归出厂设置。

2.是让esp8266模块连接WIFI。备注:想要连接的WIFI账号最好是英文或者数字的,如果存在汉字,很容易连接失败。

查看当前ES8266模块可以连接的WIFI,语句:AT+CWLAP,然后发送即可。我的效果是:(第一个WIFI账号就出现了乱码)

STM32 ESP8266连接MQTT esp8266和stm32连接_STM32 ESP8266连接MQTT_02

3.连接WIFI语句:AT+CWJAP="ssid","password" // 传入路由的ssid 和 password,(ssid尽量为非中文)。输入这句,就可以连接上指定WIFI了。

查询设备的IP,AT+CIFSR,返回即使设备的IP地址。(暂时不说怎么用)

4.在 PC 上使用网络调试助手,创建一个服务器。协议类型为  TCP Server.还有本地IP地址是固定的,它取决于电脑所连接的WIFI账号IP。按照固定格式输出

STM32 ESP8266连接MQTT esp8266和stm32连接_IP_03

注意,如果出现了返回“ERROR CLOSED”的字样,由两种原因造成:(1)没有关闭电脑防火墙,解决办法就是关闭防火墙。(2)电脑端和ESP8266连接的不是同一个WIFI,解决办法是,连接到同一个WIFI下。(小编在这里鼓捣了一下午才弄明白解决这两个问题)

5.开启透传模式:AT+CIPMODE=1,响应OK。

6.开始透传:AT+CIPSEND,然后在发送的任何数据都会在另一端接收到,这里是指:串口助手和网络调试助手之间。

说的接地气一点,透传模式就类似两个蓝牙配对,相互可以收发数据,而且一段发生么,另一端接受什么,对于发送信息的内容没有限制。

二、单连接模式(Client)

与上一个模式区别在于:发送数据的长度可以自定义,并且只能单发单接受。

发送数据AT+CIPSEND=4 // 发送四个字节,字节数可按需任定>DGFY // 输入要发送的四个字节内容,无需回车。

响应:SEND OK

注意,若发送的字节数目超过了指令设定的长度n,则会响应busy,并发

送数据的前 n 个字节,完成后响应SEND OK。

暂时就写到这里,项目实战时再做进一步解析。

---------------------------------------------------------------------------------------------------------------第一次补充

今天做一下补充,通过TCP协议,esp8266将数据传输至指定网站服务器。

由于以前都是做单片机通过esp8266发送数据给电脑端口查看一些数据,如今,我们来聊聊更为实用一点的知识。

基本的硬件配置都不用变,但是有几个关系是需要一定弄清楚的。

first.------------------------设备的IP地址,即是ESP8266的IP地址(具体还没有用过这个数据)

second--------------------网络调试助手的IP地址以及端口号(它的IP地址取决于电脑所连接的路由的地址,端口号可以自己设置)

third-----------------------配置esp8266的AT+CIPSTART="TCP","******",*****。配置它的作用在于,让该模块与该IP地址建立连接,发送信息。****如果将这里的IP地址改成某个网站服务器的地址,那么即可将数据上传到该网站,用于更多的作用****

同时,这种建立连接的方式可以通过“http”,“tcp”等多种方式,建立通信的方式不同,自然也就需要软件端不同的程序框架来配合咯。

说到底,应该如何上手操作呢?

先说串口助手AT指令的配置。--------------只需要将AT+CIPSTART="TCP","******",****。语句中的IP地址改为网站的IP地址,同时,也要匹配端口号。

举例:加入已知IP号,39.96.179.213、端口号为80(软件端可以自行设定),则语句即为AT+CIPSTART="TCP","39.96.179.213",80(然后串口助手发送)

然后再说新知识---“数据发送语句”,切记注意标点符号。加入已知网站地址http://jc.itwany.com/data.php

STM32 ESP8266连接MQTT esp8266和stm32连接_数据_04

注意网站信息与格式的对应。

STM32 ESP8266连接MQTT esp8266和stm32连接_数据_05

这个道理是通用的,哪怕是其他的网站地址,按照格式修改即可。

我发送的数据是1111,但是和前面的“消息头”中间存在一行空白,这里的回车换行是为了什么,小编也不清楚,总之是大佬这么指点的。按照上面格式发送,软件端就能够接收到相应消息咯。成功发送一条消息之后,一般都会有返回信息(这个根据个人喜好设定),内容当然就是自由添加了。

实现效果:访问某个指定的后台服务器,发送数据,并且数据按照一定格式返回。

小弟愚钝,大牛不喜勿喷。以后有空再进行添加,没有时间去搜集相关佐证资料了,若有不对之处,请大家指正,共同学习,共同进步。

---------------------------------------------------------------------------------------------------------------第二次补充(很简短,重点知识在下一个博客)

上一次咱们说道哪儿了?直接记录新知识吧。

上一次写的esp8266发送数据到指定网站方式,哎,禁不起实践的检验。不是说这种方式不行,而是说这方式在真正的工程中用到的很少,太耗费时间(编写相关代码的时候)

接受一个项目,需要实现数据从单片机----------》后台服务器;开始继续沿用老办法,一想到在stm32里

给esp8266编写基本的AT指令时,前边都要加上那么一大串无用的数据,由于标点符号等等,非常容易犯错,需要多一些时间去实现信息配对(项目里要求不能使用屏幕或者串口助手SO,压力山大)

说说实际的解决办法吧。。。。我去找了一个软件大佬,偷学了两手。

实际上,在硬件部分,我已经设定了AT+CIPSTART="TCP","39.96.179.213",80(然后串口助手发送)//里边设定了发送信息统一遵循TCP协议,就像你发送数字6,但是在实际的发送过程中,esp8266内部就帮你加上了消息头,开发者只需要负责“发送数据”,而无需关心数据的实际格式。

为了检验数据的收发无误,我在后台服务器里如此设置。只要接收到数据,后台服务器就会返回“Swoole:+原数据”

如果硬件发送“success”,软件端返回的数据就是“Swoole+success”。

STM32 ESP8266连接MQTT esp8266和stm32连接_esp8266_06

在硬件端口,我发送“123456”

STM32 ESP8266连接MQTT esp8266和stm32连接_esp8266_07

 

返回的数据就是标准的。

至于后台服务器如何实现的?就是用了一些框架搭建的,并非自己最初鼓捣的“原生”程序。具体软件知识,我放在下一个博客在记录吧。太困了。

对了,有一点我后来才明白,所谓“透传”,就是你只管传输就行了,就想透明的管道,你发什么,这边原样呈现你发送的数据,不过,你需要匹配好两端的程序---------->TCP协议,软件端就对应TCP协议进行解码信息。

--------------------------------------------------------------------------------------------------------第三次补充(项目实战经验)

 

我曾许下十年,只为最美的遇见。