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

            关于模块的信息我在这里简单的介绍一下:

        在使用前要确保电压为3.3V   接线为3v3- 3.3V电源  RX和TX分别接USB转串口线的TX和RX,即要交叉着接。最后还有一个EN引脚接到3.3V置高。 串口初始波特率为115200(可修改)。最后上电连接电脑串口终端如下图

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

好了接下来开始正文:

服务器端部分:

 

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


       在这里说明下在我看来AP(Wireless Access Point的简称,中文名称:无线接入点)模式可以理解为(被连接)模式,Station可以理解为(去连接)模式。这里可选择模式2也可选择模式3。
指令执行完后应返回OK代表响应成功

 

 

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

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

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



同样返回OK

 

 

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

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


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

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

这是我用的指令: AT+CWSAP="ONE-ETA","a1234567",11,3 至于为什么通道号填11,我也没去了解,看网上的说法是1-13都可行。最后设置好后电脑应该看到此wifi了

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

 

 

客户端部分:

 

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

 

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

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

 

 

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

 

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

 

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

 

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

  • 设备连接服务器指令:AT+CIPSTART="TCP","192.168.4.1",8089

 

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

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

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

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

 

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

 

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

  • 发送指令:AT+CIPSEND=4   


参数4表示要发送的字节数,在发送指令成功后串口将会显示'>'符号,代表可以输入信息了。

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

 



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

 

 

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



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

 

 

 

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

 

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


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

 

 

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

 

 

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

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

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

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

        4.客户端断开连接,然后再次连接的时候,会出现id编号增加的现象(即这里的0会依次增加为1,2,3,4)曾试过

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

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


 

ps:

有些朋友可能会用这块软件来做客户端,但我死活用这个软件连不上不知道什么原因。

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

 

 

 

 

 

 

 

 

  • 46
    点赞
  • 298
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
两个ESP8266之间可以通过串口通信或者Wi-Fi通信进行互相通讯。下面是两种通信方式的介绍: 1. 通过串口通信 a. 硬件连接:将两个ESP8266的TX引脚分别连接到对方的RX引脚,将两个ESP8266的RX引脚分别连接到对方的TX引脚。 b. 程序设计:在每个ESP8266上编写程序,通过串口发送接收数据。例如,一个ESP8266发送数据的代码如下: ```python import machine import time uart = machine.UART(0, 115200) # 初始化串口 uart.write('Hello, ESP8266!') # 发送数据 time.sleep(1) # 等待1秒钟 ``` 另一个ESP8266接收数据的代码如下: ```python import machine import time uart = machine.UART(0, 115200) # 初始化串口 while True: if uart.any(): data = uart.read() # 读取数据 print(data) # 输出数据 time.sleep(0.1) # 等待0.1秒钟 ``` 2. 通过Wi-Fi通信 a. 硬件连接:将两个ESP8266分别连接到同一个Wi-Fi网络中。 b. 程序设计:在每个ESP8266上编写程序,通过Wi-Fi发送接收数据。例如,一个ESP8266发送数据的代码如下: ```python import socket import time addr = ('192.168.1.100', 8080) # 接收方的IP地址和端口号 s = socket.socket() # 创建socket对象 s.connect(addr) # 连接到接收方 s.send('Hello, ESP8266!') # 发送数据 s.close() # 关闭socket time.sleep(1) # 等待1秒钟 ``` 另一个ESP8266接收数据的代码如下: ```python import socket import time addr = ('', 8080) # 本地IP地址和端口号 s = socket.socket() # 创建socket对象 s.bind(addr) # 绑定到本地IP地址和端口号 s.listen(1) # 监听连接 conn, addr = s.accept() # 接受连接 while True: data = conn.recv(1024) # 接收数据 if not data: break print(data) # 输出数据 conn.close() # 关闭连接 s.close() # 关闭socket ```
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值