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

本文介绍ESP8266模块的WiFi通信配置流程,包括服务器端和客户端的设置方法,以及如何通过AT指令实现设备间的数据传输。特别强调了透传模式的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

        在使用前要确保电压为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:

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

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

 

 

 

 

 

 

 

 

### 使用 ESP8266 实现一对多通信 #### 1. 基本原理 ESP8266 可以通过 Wi-Fi 或串口等方式实现一对多通信。Wi-Fi 方式的典型场景是一个主设备作为接入点 (Access Point, AP),多个从设备连接到该 AP 并与其交换数据[^1]。另一种方式是利用 UART 进行串口广播,但这通常适用于短距离物理连接的情况。 #### 2. Wi-Fi AP 模式下的一对多通信 在 Wi-Fi AP 模式下,ESP8266 主节点创建一个无线网络,其他从节点加入此网络并建立 TCP/UDP 链接来传输数据。以下是具体方法: - **AP 设置**: 主设备设置为软 AP 模式。 - **客户端连接**: 多个从设备可以通过扫描可用 SSID 手动或自动连接至主设备的热点。 - **TCP Server**: 主设备启动一个监听端口用于接收来自各个从设备的数据请求;而每个从设备作为一个客户端服务器发送消息。 ##### 示例代码:主设备(AP) ```cpp #include <ESP8266WiFi.h> const char* ssid = "MyESP_AP"; // 自定义SSID名称 const int port = 80; // 定义服务端口号 void setup() { Serial.begin(115200); WiFi.mode(WIFI_AP); // 启用仅AP模式 WiFi.softAP(ssid); IPAddress myIP = WiFi.softAPIP(); Serial.println(myIP); server.begin(); // 初始化WebServer对象 } void loop() { WiFiClient client = server.available(); // 接收新客户机 while(!client){ delay(100); } String req = client.readStringUntil('\r'); // 获取HTTP GET 请求中的参数部分 } ``` ##### 示例代码:从设备(STA) ```cpp #include <ESP8266WiFi.h> #define SERVER_IP "192.168.x.xxx" WiFiClient client; void setup(){ Serial.begin(115200); WiFi.begin("MyESP_AP", ""); // 加入指定的WIFI网络 while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nConnected to wifi"); } void loop(){ if(client.connect(SERVER_IP, 80)){ client.println("GET / HTTP/1.1"); client.println("Host: example.com"); client.println("Connection: close\r\n"); while(client.connected()){ if(client.available()) { String line = client.readStringUntil('\r'); Serial.println(line); } } client.stop(); } delay(10000); } ``` 以上代码展示了如何构建简单的 Wi-Fi AP 和 STA 结构下的双向通讯模型[^2]。 #### 3. 注意事项 - 确保所有参与通信的模块都运行在同一频率范围内。 - 考虑信号强度以及干扰因素可能影响实际应用效果。 - 如果需要更复杂的协议栈或者更高的吞吐量,则应考虑采用更高性能硬件平台替代纯软件解决方案。 #### 4. 总结 综上所述,使用 ESP8266 实现一对多通信主要依赖于其强大的联网能力,在不同应用场景中有多种灵活的选择方案可供采纳。无论是基于传统有线还是现代无线技术路径都可以满足特定需求[^1][^2]。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值