微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决 D1miniESP8266的“连接失败”

如何解决如何解决 D1miniESP8266的“连接失败”

我正在尝试使用 D1 mini 从网站获取一些数据。我在 Thingspeak ThingHttp 上创建了一个 API 密钥。但是,客户端没有正确连接。我从串行监视器收到“连接失败”。

这是我的代码。我认为它们与 this 几乎相同。

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
WiFiClientSecure client;

#define HOST "api.thingspeak.com"
void setup()
{
const char *ssid = "my_wifi";
const char *password = "qwertyui";
const char *API = "W0B96PD71W3Z245Q";
Serial.begin(115200);

WiFi.mode(WIFI_STA);
delay(100);
WiFi.begin(ssid,password);
while (WiFi.status() != WL_CONNECTED)
{
    Serial.print(".");
    delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
IPAddress ip=WiFi.localIP();
Serial.println(ip);
delay(5000);
Serial.println("finish setup");
}
void loop()
{
delay(5000);
if (!client.connect(HOST,80))
{
    Serial.println(F("Connection Failed"));
    return;
}
Serial.println("***");
}

这是我从串行监视器得到的。

WiFi connected
IP address: 
192.168.0.53
finish setup
Connection Failed
Connection Failed

很明显,它确实正确连接到我的 wifi,但无法连接到服务器。

有谁知道如何解决这个问题?或者我应该在 D1mini 上设置什么关键步骤? (我使用的是 VSCode 而不是 Arduino IDE)

解决方法

您使用了错误的端口号。

端口 80 用于未加密的 HTTP。

端口 443 用于 HTTPS。

您使用的是 WiFiClientSecure,因此大概您打算使用 HTTPS。 HTTPS 在端口 443 上运行,而不是端口 80。您需要更改代码以使用 443,或者您需要使用 WiFiClient 才能使用端口 80(但请确保您使用的 API尝试连接到允许通过纯 HTTP 访问 - 大多数不会)。

我强烈建议您使用现有的 HTTP 客户端,而不是自己实现协议,因为您需要使用 WiFiClientWiFiClientSecure,它们只提供 TCP 和加密的 TCP 连接。你可以找到examples of how to use ESP8266HTTPClient in the ESP8266 Arduino core repository

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。