0

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

这是我的代码。我想他们和这个差不多。

#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)

4

1 回答 1

1

您使用了错误的端口号。

端口 80 用于未加密的 HTTP。

端口 443 用于 HTTPS。

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

我强烈建议您使用现有的 HTTP 客户端,而不是像您需要的那样自己实现协议WiFiClientor WiFiClientSecure,它只提供 TCP 和加密的 TCP 连接。您可以在 ESP8266 Arduino 核心存储库中找到如何使用ESP8266HTTPClient的示例。

于 2021-07-26T05:27:40.073 回答