通过ESP8266连接WIFI,启动TCP,接受TCP客户端指令
- **记录**
- `2025年9月8日11:20:37`
- `2025年9月9日08:45:34`
- `2025年9月11日21:40:22`
- **代码**
记录
2025年9月8日11:20:37
【测试情况】
代码可以跑到正确连接WIFI,也能获得IP,但是启动TCP服务失败了。
【当前问题】
- 启动TCP服务必现失败
- 为什么后期连AT都测试不了?
【怀疑待测】
- 怀疑当前ESP有问题,又买一个新的来做对比
2025年9月9日08:45:34
【我的发现】
- 接入3.3V的ESP8266 RST引脚,插入拔下会触发重启,但是重启有几率成功和失败,失败时会一直打印乱码。
- 如果要启动TCP服务,需要设置AT+CIPMUX=1
【测试情况】
- 插入拔下接入3.3V的ESP8266 RST引脚,触发重启,同时重启ARDUINO
- 等一段时间后,重启TCP服务有几率成功
【当前问题】
- 在ESP8266断电再上电情况下,看资料说临时设置会消失,但是为什么我断电上电后,还会打印WIFI CONNECTED?
- ESP8266重启所需要花费的时间是多久?
- 为什么启动TCP服务是有几率成功?这个和什么有关系?
- ESP8266重启后为什么有时候一直打印乱码?
【怀疑测试】
- 怀疑是RST使用不当,尝试使用代码重启,arudino在串口发送命令控制ESP8266的重启。
接线图
ESP-01 Arduino/Uno
EN ─────────── D4(GPIO输出)
RST ─────────── D5(GPIO输出)
GND ─────────── GND(共地)
TX ─────────── D3(软件串口RX)
RX ─────────── D2(软件串口TX)
代码
#include <SoftwareSerial.h>
SoftwareSerial espSerial(2, 3); // D2=RX, D3=TX(连接ESP-01的TX/RX)#define ESP_EN 4 // EN引脚接D4
#define ESP_RST 5 // RST引脚接D5void setup() {Serial.begin(115200);espSerial.begin(115200);// 初始化EN和RST引脚为输出,默认高电平(模块正常工作)pinMode(ESP_EN, OUTPUT);pinMode(ESP_RST, OUTPUT);digitalWrite(ESP_EN, HIGH);digitalWrite(ESP_RST, HIGH);Serial.println("模块初始化完成");
}void loop() {// 示例1:按下串口输入'R'触发复位if (Serial.available() && Serial.read() == 'R') {Serial.println("触发模块复位...");digitalWrite(ESP_RST, LOW); // RST拉低复位delay(100);digitalWrite(ESP_RST, HIGH);delay(1000); // 等待重启}// 示例2:按下串口输入'S'触发休眠(关闭模块)if (Serial.available() && Serial.read() == 'S') {Serial.println("模块进入休眠...");digitalWrite(ESP_EN, LOW); // EN拉低关闭模块}// 串口透传逻辑(省略,参考之前的软件串口代码)
}
- 设置esp8266的命令使用永久命令
2025年9月11日21:40:22
【我的发现】
- ESP-01S到货,经过测试确实比01稳定得多,01S虽然价格多几块,这里推荐01S,稳定而且还不用自己在EN和RST上加上拉电阻。
- 根据自己的场景需要,可以永久设置ESP8266的某些参数,比如模式和wifi密码等参数,这样在重启或者断点esp8266后,就直接设置临时参数就可以了,比如需要启动TCP服务的场景中,可以参考如下设置永久和临时参数:
先后设置永久参数:AT+CWMODE_DEF、AT+CWJAP_DEF
然后临时设置参数:AT+CIPMUX、AT+CIPSERVER
这样,即使断点或者重启了ESP8266,也可以自动连接WIFI,等连接后只需要临时设定连接模式和启动TCP。
【测试情况】
3. 测试了01S,在接线上,EN和RST直接接的公共3.3V
4. 与01S不通,在使用了透传代码后,可以直接看到ESP8266打印的信息,并且最后一行字是ready,才表示启动成功。
5. 又同样方法测试了01,无反应,估计是坏了。
6. 手动测试了AT指令都成功
7. 使用之前的代码执行AT指令失败,经过研究,最后修改sendCommand函数后成功了。
8. 在ES01上测试了上次的重启ESP的代码,感觉
没什么用,也有可能没有测对,下次再测。
【等待测试】
9. 发送命令到ESP8266中的函数需要优化,因为在执行获取IP的时候,只能读取到MAC地址,读取不了IP
10. 使用JAVA连接TCP服务器发送命令后,获取ESP8266的返回打印。
待测代码 https://gitee.com/likexiang/like-code/blob/master/Arduino/ESP-TCP.ino
代码
通过ESP8266连接WIFI,启动TCP,接受TCP客户端指令的代码:
https://gitee.com/likexiang/like-code/blob/master/Arduino/ESP-TCP.ino