ESP8266串口Wifi模块的基本用法

ESP8266这个东西真心好用,很便宜,12元一块,就能让嵌入式系统访问互联网了。而且看了它的文档,它不仅可以使用AT指令来交互,还能使用它的SDK来编程。也就是说,你可以直接用它的SDK来编写自己的整个系统,然后生成一个固件,烧写进ESP8266。这样,你的系统生来就有了网络能力,而且还不需要买单片机了。不过它的SDK比较复杂,以后慢慢学。今天先来记录简单的AT操作,以方便以后使用。

在介绍之前,先附上ESP8266较新的AT指令集文档,写的都挺清楚的。AT-Espressif AT 指令集_AIThinkerMod_v021.pdf。本文的目的就是教你怎么使用,以消除最初的恐惧感。

首先按照《ESP8266串口Wifi模块固件烧写与激活》的记录,把ESP8266的固件烧写进去。假设你已经会用sscom42.exe或者其他的串口软件,并且已经打开了对应的串口。

刚刚上电时,ESP8266会先输出一段乱码,最后跟着“ready”字样,这说明已经就绪了:

ESP8266串口Wifi模块的基本用法 39 - 斯塔克电子

当然,你可能会疑惑,我怎么知道一开始的波特率是多少?这个确实是个问题。通常是115200,如果实在不确定,可以穷举呀!大不了波特率从110、300、600、1200、2400一直试到115200、128000、256000,然后每次换一个波特率,就插拔一下ESP8266的电源,让他冷启动。只要最后能够输出“ready”字样,就说明就是这个波特率了。

====================阶段一:AT命令示例=====================

===================示例一:重启======================

向ESP8266输入

AT+RST

,记得勾选“发送新行”,因为AT指令需要以换行结尾:

ESP8266串口Wifi模块的基本用法 40 - 斯塔克电子

所有的输入都会被ESP8266输出以回显,然后就是命令的执行结果,最后附上独立一行的“OK”,或者“ERROR”或者某个很明显的结束标志。

输入“AT+RST”之后,ESP8266输出“OK”,接下来就是重启过程,这个过程和冷启动一样,先输出乱码,然后输出“ready”。

===================示例二:设置串口参数================

输入

AT+UART=19200,8,1,0,0

就可以把串口设置为“波特率19200,8位数据位,1位停止位,无校验位,无流控”。

ESP8266串口Wifi模块的基本用法 41 - 斯塔克电子

==================示例三:设置WIFI模式==============

ESP8266有三种模式可以选择,1为Station模式,也就是加入某个无线网络,2为AP模式,也就是自身成为一个无线网络提供者,让其他设备加入,3为AP+Station模式,这种模式下,ESP8266一方面作为一个设备加入某个无线网络,另一方面自己又创建一个无线网络供其他设备接入。

输入

AT+CWMODE=3

ESP8266串口Wifi模块的基本用法 42 - 斯塔克电子

========================示例三:创建无线网络===================

输入

AT+CWSAP="zjs_esp8266","123456789",5,4

上面的命令,创建了一个SSID为“zjs_esp8266”、密码为“123456789”的无线网络,该无线网络使用的信道是5,用的加密方式是4(WPA/WPA2)。

ESP8266串口Wifi模块的基本用法 43 - 斯塔克电子

之后,就可以在电脑或者手机上搜索到这个无线网络啦:

ESP8266串口Wifi模块的基本用法 44 - 斯塔克电子

========================示例四:加入无线网络=====================

输入

AT+CWJAP="zjs313","123456789"

加入网络的命令是不是很简单?这么一条命令就是告诉ESP8266,快去加入“zjs313”这个网络,密码是“123456789”(密码当然是假的啦^_^)。

这个命令比较慢,要耐心等待。如果无法加入网络(比如不存在这个网络,或者密码错误,或者其他原因),ESP8266会输出“FAIL”字样,如图:

ESP8266串口Wifi模块的基本用法 45 - 斯塔克电子

因为密码是错误的。当输入正确的密码后,就能成功加入网络,此时输出是“OK”:

ESP8266串口Wifi模块的基本用法 46 - 斯塔克电子

====================示例五:查看MAC地址==================

之前的命令都是设置一些参数,现在再来介绍一些查看参数的命令。

每个ESP8266都有两个MAC地址,一个是用作Station的,一个是用作AP的。

如果要查看Station的MAC地址,输入

AT+CIPSTAMAC?

ESP8266串口Wifi模块的基本用法 47 - 斯塔克电子

如果要查看AP的MAC地址,输入:

AT+CIPAPMAC?

ESP8266串口Wifi模块的基本用法 48 - 斯塔克电子

更多的命令看看AT-Espressif AT 指令集_AIThinkerMod_v021.pdf就行。

=======================阶段二:数据传输====================

这里着重讲一下数据传输部分。首先需要明确这么几个事实:

1、ESP8266可以使用TCP连接或者UDP连接;

2、ESP8266有单连接与多连接两种方式,单连接方式下,ESP8266只能创建一个TCP连接或者创建一个UDP监听端口;多连接方式下,ESP8266能创建最多4个TCP连接或者创建4个UDP监听端口;

3、TCP的操作分两种:

(1)先开启TCP监听服务,等待连接;这种方式只能使用多连接模式。

(2)直接创建TCP连接,主动与对端建立连接;这种方式可以多连接也可以单连接。多连接模式下,必须指定连接的编号(0-3);

4、UDP端口在创建时必须指定本地端口,创建后本地端口不可再变。当有UDP数据报发送到该端口,ESP8266将通过串口输出数据报内容。多连接模式下,创建UDP端口必须制定端口编号(0-3);

5、在创建UDP端口时,需要指定远程目标的变更规则,分为三种:

(1)创建时就指定对端的IP与端口,并且始终以该地址作为UDP数据包的目的地(中途不会改变);

(2)创建时指定对端的IP与端口,当收到第一个UDP数据包后,把发送的目的地改为该数据报的源地址,以后不再变更(只变更一次);

(3)创建时指定对端的IP与端口,每当收到一个UDP数据报,就把发送的目的地改为该数据报的源地址(不断变更)。

6、当ESP8266同时作为AP与Station时(也就是脚踏两只“网络”时),路由功能会出错。或者干脆说,ESP8266内部根本就没有做路由判断。比如,ESP8266自己创建的网络的SSID是“zjs_esp8266”,IP地址是192.168.4.1,而它又以Station身份加入了“zjs313”网络,IP地址是192.168.1.112。此时,当ESP8266向192.168.1.114(笔记本)发送UDP包时,192.168.1.114是收不到的,因为ESP8266直接把这个数据包放到了192.168.4.0这个网段上了。也就是说,ESP8266发送的数据包,优先送到自己创建的网络上,如果自己没有创建网络,就送到自己连接的网络上。

===============示例一:主动建立TCP连接=============

首先保证电脑和ESP8266都已经连入了同一个无线局域网。我的电脑获得的IP是192.168.1.102。

在电脑上开启NetAssist.exe,并且在9000端口开启TCP Server,如图:

ESP8266串口Wifi模块的基本用法 49 - 斯塔克电子

记得点击“连接”以开启端口。

用sscom42.exe向ESP8266输入如下命令:

AT+RST
AT+CWMODE=1
AT+CWJAP="zjs313","123456789"
AT+CIPSTART="TCP","192.168.1.102",9000

之所以通过AT+CWMODE=1来把ESP8266设置为Station模式,是为了避免之前第6点中说到的路有错误问题。而AT+CIPSTART=”TCP”,”192.168.1.102″,9000则是命令ESP8266与192.168.1.102:9000建立TCP连接。结果如下:

ESP8266串口Wifi模块的基本用法 50 - 斯塔克电子

“CONNECT”字样说明已经建立了连接。

在NetAssist.exe中发送一段文本“hello,esp8266!”:

ESP8266串口Wifi模块的基本用法 51 - 斯塔克电子

sscom42.exe中立即出现“+IPD,14:hello,esp8266!”字样:

ESP8266串口Wifi模块的基本用法 52 - 斯塔克电子

说明数据从笔记本的网卡发出,经过路由器转发给ESP8266,ESP8266又通过串口输出数据。也可以试试让ESP8266从串口读取数据,然后通过网络发送给笔记本。在sscom42.exe中输入

AT+CIPSEND=6

这个命令表面接下来要发送一个6字节长的数据。命令输入后,会出现“>”符号,提示你输入数据:

ESP8266串口Wifi模块的基本用法 53 - 斯塔克电子

然后输入“hello”,回车,会发现NetAssist.exe收到了数据:

ESP8266串口Wifi模块的基本用法 54 - 斯塔克电子

如果是多连接,那么建立连接时,需要指定连接号:

AT+RST
AT+CWMODE=1
AT+CWJAP="zjs313","123456789"
AT+CIPMUX=1
AT+CIPSTART=0,"TCP","192.168.1.102",9000

而发送数据时,则如同这样:

AT+CIPSEND=0,5
hello

这指定了使用0号连接发送。

====================示例二:监听TCP连接=================

AT+RST
AT+CIPMUX=1
AT+CIPSERVER=1,4000

开启TCP服务器之前,必须先设置为多连接模式才行,也就是“AT+CIPMUX=1”。现在已经在4000端口监听TCP连接请求了。

然后看一下ESP8266分到的IP地址是啥:

AT+CIFSR

ESP8266串口Wifi模块的基本用法 55 - 斯塔克电子

原来是192.168.1.109。

然后打开NetAssist.exe,配置为TCP Client,服务器IP地址为192.168.1.109,端口为4000,点击连接:

ESP8266串口Wifi模块的基本用法 56 - 斯塔克电子

刚刚点下“连接”,就看到sscom42.exe中传来了”0,CONNECT”字样,这个意思是说建立了0号连接。连接号从0开始递增,最高为3。

接下来的收发数据与之前的单连接略有不同,那就是每次发数据都需要指定连接号,比如

AT+CIPSEND=0,5
hello

这指定了使用0号连接发送。

================示例三:建立UDP通信===================

AT+RST
AT+CIPSTART="UDP","192.168.1.102",4000,9000,0

这命令意思是说,建立UDP,对端地址是192.168.1.102:4000,本地端口时9000,对端地址不再改变。

之后,在NetAssist.exe中,建立UDP,端口4000,IP为192.168.1.102(笔记本自己的IP),然后连接,连接之后,把目标主机和目标端口改为192.168.1.109和9000,如图:

ESP8266串口Wifi模块的基本用法 57 - 斯塔克电子

之后点击“发送”,会发现sscom42.exe中输出了“http://www.cmsoft.cn QQ:10865600”

UDP的发送、多连接模式下的UDP,都可以类比于之前的示例。

============================关于UDP广播=====================

这里强调一点,UDP模式下,是可以收发广播包的。只需要NetAssist.exe中把目标主机设置为255.255.255.255即可。而ESP8266发送广播包的话,只需要在创建UDP时,目标主机填“255.255.255.255”即可,类似于:

AT+RST
AT+CIPSTART="UDP","255.255.255.255",4000,9000,0

这样,ESP8266所有发的包都将广播。

如果希望ESP8266接受广播包,但是以定向发送的数据包作为回应的话,可以这样:

AT+RST
AT+CIPSTART="UDP","255.255.255.255",4000,9000,2

最后一个参数2意味着,数据包的目的地址为最后一次收到的数据包的源地址。可以参考上文或者文档。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索