如何解决WiFiEsp.h库使用问题 基于Arduino Mega2560+ESP01获取JSON报错排查
问题解答
问题1:站点是否支持通过上述方式获取JSON数据
该站点支持获取对应JSON数据,但你当前使用的HTTP明文请求方式不符合站点要求,调整为HTTPS请求即可正常获取数据。
问题2:301跳转及超时错误原因与解决方法
错误原因
- 301 Moved Permanently由站点强制HTTPS跳转规则触发:你当前使用80端口发起HTTP明文请求,站点所有HTTP请求都会被永久跳转到HTTPS 443端口的对应地址,因此返回301响应。
- 超时错误是因为你的代码没有处理301跳转逻辑,收到301响应后仍持续等待服务器返回更多数据,而服务器返回跳转响应后就直接断开了连接,等待无响应后触发了WiFiEsp库的超时机制。
解决步骤
- 更换支持SSL的客户端类:将原
WiFiEspClient替换为WiFiEspClientSecure(需确保你使用的WiFiEsp库版本支持SSL客户端,若不支持可更新官方最新版WiFiEsp库) - 修改连接端口:将原
client.connect(server, 80)修改为client.connect(server, 443),使用HTTPS的443端口建立连接 - 新增跳过证书校验配置:嵌入式设备通常无内置根证书,需跳过SSL证书校验避免握手失败
- (可选)若你的ESP01模块AT固件版本过低不支持SSL请求,需先将ESP01的AT固件升级至乐鑫官方1.7及以上版本,确保支持SSL握手能力
核心代码修改示例
#include "WiFiEsp.h" // 新增SSL客户端头文件 #include "WiFiEspClientSecure.h" char ssid[] = "***"; // your network SSID (name) char pass[] = "#"; // your network password int status = WL_IDLE_STATUS; // the Wifi radio's statusb char server[] = "apiv2.corona-live.com"; // 替换为SSL客户端 WiFiEspClientSecure client; void setup() { // 原有初始化、WiFi连接代码不变 // ... Serial.println(); Serial.println("Starting connection to server..."); // 跳过SSL证书校验 client.setInsecure(); // 改为连接443端口 if (client.connect(server, 443)) { Serial.println("Connected to server"); // HTTP请求头内容不变 client.println("GET /stats.json?timestamp=1634891368873 HTTP/1.1"); client.println("Host: apiv2.corona-live.com"); client.println("Connection: close"); client.println(); } } // loop、printWifiStatus函数代码无需修改 // ...
内容的提问来源于stack exchange,提问作者kde
相关产品推荐
相关产品推荐

