ESP32连接Hive MQTT Broker异常:WebSocket接入时断开重连求助
ESP32连接Hive MQTT Broker后,通过Hive WebSocket客户端连接时自动断开重连的问题
我的代码可让ESP32成功连接到Hive MQTT Broker,但当我通过Hive WebSocket客户端网站建立连接时,ESP32会断开连接并执行重连操作——此时client.connected()会变为false,触发reconnect()函数。我不清楚该问题的原因,如需复现需在Hive MQTT网站创建集群并完善代码中的WiFi及云服务信息。
以下是我的代码:
#include <WiFiClientSecure.h> #include <esp_crt_bundle.h> #include <ssl_client.h> #include <Arduino.h> #include <WiFi.h> #include <PubSubClient.h> /****** root certificate *********/ static const char *root_ca PROGMEM = R"EOF( -----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc yoi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- )EOF"; /*** WiFi Connection Details ***/ const char* hotspotName = ""; const char* password = ""; /*** MQTT Broker Connection Details ***/ const char* mqttServer = ""; const char* brokerUser = ""; const char* brokerPassword = ""; WiFiClientSecure mqttClient; PubSubClient client(mqttClient); void setupWifi(){ delay(1000); Serial.print("\nConnecting to: "); Serial.println(hotspotName); WiFi.mode(WIFI_STA); WiFi.begin(hotspotName, password); while(WiFi.status() != WL_CONNECTED){ delay(100); Serial.print("-"); } Serial.print("\nConnected to: "); Serial.println(hotspotName); randomSeed(micros()); Serial.println("\nWiFi connected\nIP address: "); Serial.println(WiFi.localIP()); } void reconnect(){ while(!client.connected()){ Serial.print("\nConnecting to: "); Serial.println(mqttServer); String clientId = "ESP32Client-"; // Create a random client ID clientId += String(random(0xffff), HEX); Serial.print("Client ID: "); Serial.println(clientId); if(client.connect(clientId.c_str(), brokerUser, brokerPassword)){ Serial.print("\nConnected to: "); Serial.println(mqttServer); } else{ Serial.println("\nTrying to connect again"); delay(5000); } } } void setup() { // put your setup code here, to run once: Serial.begin(115200); delay(10000); setupWifi(); mqttClient.setCACert(root_ca); client.setServer(mqttServer, 8883); } void loop() { // put your main code here, to run repeatedly: if(!client.connected()){ reconnect(); } client.loop(); }
我期望建立连接后client.connected()能保持为true。
内容的提问来源于stack exchange,提问作者Jack Brady
相关产品推荐
相关产品推荐

