D1mini(ESP8266)如何解"Connection failed"
How to solve "Connection failed" for D1mini(ESP8266)
我正在尝试使用 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 客户端,而不是像 WiFiClient
或 WiFiClientSecure
那样自己实施协议,它们只提供 TCP 和加密的 TCP 连接。你可以找到 examples of how to use ESP8266HTTPClient
in the ESP8266 Arduino core repository.
我正在尝试使用 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 客户端,而不是像 WiFiClient
或 WiFiClientSecure
那样自己实施协议,它们只提供 TCP 和加密的 TCP 连接。你可以找到 examples of how to use ESP8266HTTPClient
in the ESP8266 Arduino core repository.