本文以esp8266作为STA,以手机WIFI作为AP,电脑端用网络调试助手与esp8266共同连接至手机WIFI并建立TCP连接,操作步骤与我在另一篇博文提到的一致。

下面分别以“esp8266作为TCP客户端”和“esp8266作为TCP服务器”两种情况进行实验示范:

准备工具
USB转TTL、
esp8266模块、
串口调试助手、
网络调试助手、

一、esp8266作为TCP客户端

1、设置工作模式&连接热点

通过串口发送AT指令来设置esp8266的工作模式,并连接手机WIFI热点。

这里我们设置为STA模式。(电脑端也记得连上手机热点)(网线建议拔掉)

RT_thread 使用esp8266做服务端 esp8266作为tcp服务器_esp8266

2、建立TCP连接

这里我们让esp8266作为TCP客户端,电脑端的网络调试助手作为TCP服务器。

于是,我们要先打开网络调试助手并建立一个TCP服务器。其中,端口号自行设置,(ip地址的话,软件会自动根据电脑的WIFI情况帮你填好,无法人为更改)

RT_thread 使用esp8266做服务端 esp8266作为tcp服务器_服务器_02


紧接着,我们将esp8266连接至网络调试助手建立的服务器上,即建立TCP连接。模块返回连接成功,同时可以看见网络调试助手上显示客户端上线。(注意ip和端口号填写正确,否则无法正确连接)

RT_thread 使用esp8266做服务端 esp8266作为tcp服务器_服务器_03

3、进入透传模式&开始透传

TCP连接建立之后,就可以进入透传模式,进行数据传输了。

指令发送完成后,当模块返回>,说明透传开始,接下来由串口助手发送出的数据将不再被认为是AT指令,而会被当作是纯数据,并通过TCP传送到网络助手上。

RT_thread 使用esp8266做服务端 esp8266作为tcp服务器_TCP_04


我们通过串口向网络调试助手发送“This is a message!”数据,可以看到网络助手原封不动的收到了数据。由于是透传模式,此时如果我们发送“AT”,会被当做是数据发送给网络助手,而并不是指令。

所以,可以看到,网络助手收到“AT”这个数据,而串口调试助手中,并没有反馈OK,也没有将我们发送的“This is a message!”和“AT”显示出来,再次表明当前是透传模式。

(同时要注意,从本文开始至此,我们的串口调试助手发送数据时都是勾选“发送新行”的)

RT_thread 使用esp8266做服务端 esp8266作为tcp服务器_TCP通信_05

4、退出透传

当数据发送完了,不想再发送数据了,则通过发送+++退出透传模式。此时,请注意,先取消勾选“发送新行”,再发送+++

RT_thread 使用esp8266做服务端 esp8266作为tcp服务器_服务器_06

发送+++后,可以看见串口助手和网络助手均无任何反馈,如上图。紧接着,我们再次勾选“发送新行”,并通过串口发送AT,可以看到模块返回OK,说明模块退出透传模式,AT被当成了指令而不是数据。如下图:

RT_thread 使用esp8266做服务端 esp8266作为tcp服务器_TCP_07


于是,模块成功退出透传模式。至此,我们就完成了TCP通信的简单实验。

.
.
.

二、esp8266作为TCP服务器

下面我们来讲解esp8266作为TCP服务器的情况,相关步骤与上面“esp8266作为TCP客户端”时相似,有细微差别。

1、设置工作模式&连接热点

与上面提到的相同,这里略过不讲。

二、建立TCP连接

这里我们让esp8266作为TCP服务器,电脑端的网络调试助手作为TCP客户端。
所以,这一次网络调试助手要建立一个TCP客户端,以便稍后连接至esp8266建立的TCP服务器。

那么,网络调试助手的客户端参数(ip地址和端口号)怎么设置呢?该设置成多少呢?为了解决这个问题,我们先不忙着操作我们的网络助手,先操作esp8266。

通过AT指令,我们设置8266为多连接模式(因为我们要让其作为服务器,服务器需满足供多个设备连接的要求,所以是多连接),同时,我们配置8266的端口号(自行定义)。而8266建立的TCP服务器的ip地址,我们通过AT+CIPSTA_CUR?指令查得,返回数据的第一个ip则为我们要的。

RT_thread 使用esp8266做服务端 esp8266作为tcp服务器_esp8266_08

TCP服务器建立好之后,接下来我们就用网络助手作为客户端连接,客户端的参数为8266设置的端口号和其ip。连接成功后,模块返回CONNECT。

RT_thread 使用esp8266做服务端 esp8266作为tcp服务器_TCP通信_09

3、透传

8266作为服务器时,不能开启透传模式(并不等于不能透传),我们需要通过AT+CIPSEND=<>,<>指令完成数据的传输,其第一个参数为ID号,即要发送数据给连接此服务器的第几个客户端(注意到CONNECT前的0了吗?),第二个参数为数据长度。注意,编号是从0开始的。

RT_thread 使用esp8266做服务端 esp8266作为tcp服务器_客户端_10


大概就是这样。

P.S. 类似的,其实在上一个模式,当esp8266作为客户端时,也可以使用AT+CIPSEND=<>指令实现透传(注意此时只有一个参数,即数据长度),由于不用选择客户端,所以只有一个参数。

以上就是本实验的基本内容,再进一步的,与外网建立TCP连接,也是相似的步骤,就不再赘述。