gpt4 book ai didi

arduino - ESP8266 + WiFiManager + pubsubclient

转载 作者:行者123 更新时间:2023-12-01 11:28:51 25 4
gpt4 key购买 nike

我正在使用 ESP8266,并希望使用 MQTT 来控制它,MQTT 服务器是我的 Synology DS415+。我希望 ESP 位于安装后无法使用串行访问它的地方,因此我需要能够使用 WiFi 配置它的 Wifi-Credentials 和 MQTT-Server IP、端口和凭据。

因此我决定 WiFiManager-Library 和 PubSubClient-Library 可以为我做这件事。问题是:我无法使用 WiFiManager 使 PubSubClient 工作,因为我还没有找到如何告诉 PubSubClient 使用正确的“客户端”。

以下示例适用于我的 ESP,但它不允许动态配置 ESP Wifi:https://github.com/knolleary/pubsubclient/blob/master/examples/mqtt_esp8266/mqtt_esp8266.ino

我想出了以下内容:
http://pastebin.com/t5evEy1i

然而,这不起作用,它通过串行的输出如下:

mounting FS...
mounted file system
reading config file
opened config file
{"mqtt_server":"192.168.1.250","mqtt_port":"9001","switch_token":"BackupSwitch"}
parsed json
*WM: Adding parameter
*WM: server
*WM: Adding parameter
*WM: port
*WM: Adding parameter
*WM: blynk
*WM:
*WM: AutoConnect
*WM: Reading SSID
*WM: SSID:
*WM: XXX
*WM: Reading Password
*WM: Password: XXX
*WM: Connecting as wifi client...
*WM: Connection result:
*WM: 3
*WM: IP Address:
*WM: 192.168.1.74
connected...yeey :)
local ip
192.168.1.74
Attempting MQTT connection...192.168.1.250:9001
failed, rc=-2 try again in 5 seconds
Attempting MQTT connection...192.168.1.250:9001
failed, rc=-2 try again in 5 seconds

我很确定问题在于第 17 和 18 行中 PubSubClient 的定义:
WiFiClient espClient;
PubSubClient client(espClient);

但我不知道如何从 WiFiManager 中提取客户端以将其提供给 PubSubClient-Library。

我需要的是如何获取一个与 WiFiClient 或 EthernetClient 创建的对象相同的对象,WiFiManager 可能创建的对象,并且我可以将其作为参数提供给 PubSubClient 客户端(espClient);

有谁知道如何实现这一目标?提前致谢。

最佳答案

您不需要从 WiFiManager 中提取任何东西,因为它使用的是 WiFiClient。您需要做的就是:

#include <ESP8266WiFi.h>
#include <WiFiManager.h>
#include <PubSubClient.h>

WiFiClient espClient;
PubSubClient client(espClient);

void mqttCallback(char* topic, byte* payload, unsigned int length) {
// message received
}

void mqttReconnect() {
// reconnect code from PubSubClient example
}

void setup() {
WiFiManager wifiManager;
wifiManager.setTimeout(180);

if(!wifiManager.autoConnect("AutoConnectAP")) {
Serial.println("failed to connect and hit timeout");
delay(3000);
ESP.reset();
delay(5000);
}

Serial.println("connected...yeey :)");

client.setServer(mqtt_server, 1883);
client.setCallback(mqttCallback);
}

void loop() {
if (!client.connected()) {
mqttReconnect();
}
client.loop();
yield();
}

关于arduino - ESP8266 + WiFiManager + pubsubclient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35049248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com