两个ESP8266一个作为服务器一个作为客户端实现互相通讯

时间:2024-04-10 09:19:02

            关于模块的信息我在这里简单介绍一下我用模块如图:
两个ESP8266一个作为服务器一个作为客户端实现互相通讯
        在使用前要确保电压为3.3V   接线为3v3- 3.3V电源  RX和TX分别接USB转串口线的TX和RX,即要交叉着接。最后还有一个EN引脚接到3.3V置高。 串口初始波特率为115200(可修改)。最后上电连接电脑串口终端如下图

两个ESP8266一个作为服务器一个作为客户端实现互相通讯

       串口设置如上图,看到乱码不要慌,属正常现象,这里重点说一下一定要把(发送新行)勾上,不然指令不起作用。如果其他串口软件没有这个选项,那么在每个指令后面都要按一下回车键,如果是使用单片机发指令则要跟上"\r\n"。最终上电后出现ready,可以直接输入测试指令AT,返回OK字样表示模块正常。

好了接下来开始正文:

服务器端部分:

 

  • 第一条指令是选择 WIFI 的应用模式:AT+CWMODE=3           

两个ESP8266一个作为服务器一个作为客户端实现互相通讯
       在这里说明下在我看来AP(Wireless Access Point的简称,中文名称:无线接入点)模式可以理解为(被连接)模式,Station可以理解为(去连接)模式。这里可选择模式2也可选择模式3。
指令执行完后应返回OK代表响应成功

两个ESP8266一个作为服务器一个作为客户端实现互相通讯

 

 

  • 接着是重启模块指令:AT+RST

两个ESP8266一个作为服务器一个作为客户端实现互相通讯

     重启后有乱码属正常现象,之后出现ready表示重启生效完毕

  • 启动多连接指令:AT+CIPMUX=1


两个ESP8266一个作为服务器一个作为客户端实现互相通讯
同样返回OK

 

 

  • 最后是建立服务器server指令: AT+CIPSERVER=1,8089

     1代表开启,0代表关闭,8089为设置的端口号,如果直接写1,那么服务器的默认端口就设置为333端口。


以上就是服务器端的配置,只需要4个指令即可完成。
 

这里提一下如何修改无线名字(SSID)和密码,指令介绍如下图所示

两个ESP8266一个作为服务器一个作为客户端实现互相通讯

这是我用的指令: AT+CWSAP="ONE-ETA","a1234567",11,3 至于为什么通道号填11,我也没去了解,看网上的说法是1-13都可行。最后设置好后电脑应该看到此wifi了两个ESP8266一个作为服务器一个作为客户端实现互相通讯

具体更多指令信息可以参考这个PDF 链接: https://pan.baidu.com/s/141pbmFAZ8N_AiXDpxsG_Hw 密码: j578 里面还有一些工具及模块的资料可供参考。

 

 

客户端部分:

 

这里我用另一块8266供上电然后连上串口作为客户端。

 

两个ESP8266一个作为服务器一个作为客户端实现互相通讯

左边是服务器端,右边就是我们要配置的客户端:

  • 首先还是配置wifi模式:AT+CWMODE=1
    这里我们配置成模式1,就是说现在是"去连接"模式。
     
  • 然后还是重启生效:AT+RST

 

 

  • 连接无线指令:AT+CWJAP="ONE-ETA","a1234567"

 

在这里电脑先要连上名为"ONE-ETA"的无线,然后用这个命令才能连接成功哦。

 

成功后,可以输入查询指令:AT+CIFSR查看本设备的IP地址 如图:

 

两个ESP8266一个作为服务器一个作为客户端实现互相通讯

从图中我们我们可以看到左边(服务器)的IP地址是192.168.4.1 右边分配给客户端的IP地址是192.168.4.2都在同一网段下。然后就可以通过服务器的IP地址连接上去,如下:

  • 设备连接服务器指令:AT+CIPSTART="TCP","192.168.4.1",8089
    两个ESP8266一个作为服务器一个作为客户端实现互相通讯

 

第一个参数TCP代表连接使用的协议是TCP协议,还有一个可选择协议是UDP协议,有兴趣的朋友可以自己去了解使用下。

第二个参数是我们刚才查询到的服务器那端的IP地址,最后一个参数是我们之前配置服务器的时候设置的端口号。

连接成功后如上图所示两边都有响应。

再次补充下如果长时间没有进行通讯,那么一段时间后(可设置,具体参考指令说明)将会断开通讯如下图。这时候需要重新输入连接指令AT+CIPSTART="TCP","192.168.4.1",8089。

两个ESP8266一个作为服务器一个作为客户端实现互相通讯

 

到此两端的配置全部完成,可以进行接下来的互相通讯实验了。

 

客户端发送消息给服务器:

  • 发送指令:AT+CIPSEND=4   

两个ESP8266一个作为服务器一个作为客户端实现互相通讯
参数4表示要发送的字节数,在发送指令成功后串口将会显示'>'符号,代表可以输入信息了。
两个ESP8266一个作为服务器一个作为客户端实现互相通讯
     例如我发送的是123456那么由于我设置的传输大小为4字节那么多余的两字节(5和6)将会被截断。左边服务器收到了+IPD,0,4:1234,+IPD代表接收,0代表编号0,4代表收到4字节大小的数据,而冒号后边的就是我们接收到的信息了。至于为什么是编号0,可以通过指令:AT+CIPSTATUS来查看连接详情。如下图,第一个参数就是上面的接收编号0,第二个参数代表连接协议为TCP,第三个参数是连接设备的IP地址,第四个参数是客户端的端口,第五个就是服务器端口。

 

两个ESP8266一个作为服务器一个作为客户端实现互相通讯

但是每次输入前都要先发送命令AT+CIPSEND有点麻烦,所以我们可以开启透传模式,具体如下:

 

 

  • AT+CIPMODE=1    //开启透传模式
  • AT+CIPSEND         //开始透传

两个ESP8266一个作为服务器一个作为客户端实现互相通讯

        效果如图,最后串口终端会一直显示‘>’我们就可以直接输入消息,而不用输入指令和指定传输大小了。是不是很方便很多。
如果要结束透传的话需要发送+++,如下图,需要注意的是将重新发送新行给取消。但是透传模式只支持单连接模式,即服务器在开启多连接模式下是一对多的,就不能使用透传模式了。
两个ESP8266一个作为服务器一个作为客户端实现互相通讯

 

 

 

服务器发送消息给客户端:

 

  • 发送指令:AT+CIPSEND=0,4

两个ESP8266一个作为服务器一个作为客户端实现互相通讯
       第一个参数是要发送的编号,这边为什么是0是通过指令AT+CIPSTATUS来获取的,上面也有说,这里就不再废话了。第二个参数就是要发送的字节数。这里同样是发送"123456"但是因为设置4字节,所以也被截止了。

 

 

补充说明:以上这是我两天调ESP8266的总结加上网上的一些教程,如有不对之处,欢迎指出。通过以上的说明已经可以实现两个ESP8266互相通讯了,但我进一步的用来实现两个STM32互相通讯。其实不只是两个互相通信,只要连服务器下的客户端都可以通讯,即服务器可以与多个客户端通讯,这样的话就相当于组了一个局域网,在这个局域网内都是可以通讯的。

 

 

        经过这几天的调试发现有以下问题:

        1.esp8266在供电不足的情况,会出现反复重启的现象。

        2.如果双向同时通讯(服务器端发送客户端的同时,客户端也发送给服务器),将会出现客户端强制重启的现象,但服务器那端却正常,这点很郁闷。

        3.发热有点严重,估摸着温度能有50-60了,但基本使用正常。

        4.客户端断开连接,然后再次连接的时候,会出现id编号增加的现象两个ESP8266一个作为服务器一个作为客户端实现互相通讯(即这里的0会依次增加为1,2,3,4)曾试过

AT+CIPSTART=0,"TCP","192.168.4.1",8089

这个指令强制设置连接id号为0,但依然不行,应该是服务器端那边还占用着这个id号没有释放,客户端再次连接这个id号就会出现问题。


 

ps:

有些朋友可能会用这块软件来做客户端,但我死活用这个软件连不上不知道什么原因。
两个ESP8266一个作为服务器一个作为客户端实现互相通讯

所以我改用了另一款软件,亲测可行。

两个ESP8266一个作为服务器一个作为客户端实现互相通讯