乐鑫技术交流
直播中

张华

7年用户 1394经验值
私信 关注
[问答]

将Firebase与HTTPS客户端连接为什么会失败?

我在 Arduino IDE 中设置了一个草图,以便在我的 ESP8266-12F 模块(AZ Delivery D1 mini NodeMCU)
ESP8266 板版本 2.7.4
FirebaseArduino 版本 0.3(从 2018 年开始?有更新的吗?我没能找到?)连同 ArduinoJson 5.13.1
或 FirebaseESP8266 版本 3.0.2
对于 Firebase 访问,我尝试了 FirebaseArduino 和 FirebaseESP8266,两者都存在基本相同的问题:
在 setup() 中,我打开一个 WiFi 连接,然后在 loop() 中,我访问 Firebase 以检索长度为 10 的字符串列表,这些字符串中大约有 160 个,但这些字符串的数量和键事先未知。到目前为止,一切都很顺利。我什至可以遍历 String[] 并显示所有检索到的 Firebase 键。
但是,一旦我使用打开 HTTPS 客户端连接
代码:全选WiFiClientSecure client;
client.setinsecure();    // to avoid fingerprint stuff
if(!client.connect()) {
  Serial.println("connection failed");
} else {
  ... // do stuff like client.print("GET ......")
}

我将看到“连接失败”(对于 FirebaseArduino)或者我将获得软 WDT 重置(对于 FirebaseESP8266)。
打开与之前没有 Firebase 访问权限的 URL 的 HTTPS 客户端连接工作一致。
我想做什么:对于从 Firebase 检索到的每 10 个字符的字符串,我想连接到与该字符串相关的 HTTPS 服务器,并检索一些我想存储在 Firebase 中与该字符串相关的路径的信息。
顺便说一句,我还在我的 ESP8266
基本代码部分连接了一个 SSD1306 OLED 显示器:
代码:全选#include

#include
#include

#include


#include
#include
#include

#include

#define FIREBASE_HOST "xxxxxxxxxxxxxxxxxxxxxxx"
#define FIREBASE_AUTH "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"

#define OLED_ADDRESS                0x3C //you may need to change this, this is the OLED I2C address.  

SSD1306 display(OLED_ADDRESS, D2, D1);

ESP8266WiFiMulti WiFiMulti;

FirebaseData firebaseData;
...

void setup() {
  ...
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("aaaaaaaaaaaa", "bbbbbbbbbbbbbbbbbbbb");

  while(WiFiMulti.run() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  ...
}

void loop() {
  WiFiClientSecure client;
  client.setInsecure();

  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
  Firebase.reconnectWiFi(true);
  firebaseData.setBSSLBufferSize(3072, 512);
  firebaseData.setResponseSize(3072);
  
  if(Firebase.get(firebaseData, "/my/path")){
    Serial.print("Read object of type ");
    Serial.println(firebaseData.dataType());

    FirebaseJson& json = firebaseData.jsonObject();
    size_t len = json.iteratorBegin();
    String key, value = "";
    int type = 0;
    String buffer[len];
    for (size_t i = 0; i < len; i++)
    {
        json.iteratorGet(i, type, key, value);
        buffer = key;
    }
    json.iteratorEnd();
    delay(500);

    // check single IDs
    for(size_t i = 0; i < len; i++) {

      String url = "/" + buffer;

      if (!client.connect(host, httpsPort)) {  // the problems happen here
        Serial.println("connection failed");
      } else {
        ...
      }
      client.stop();
    }
   
  }
}

更多回帖

发帖
×
20
完善资料,
赚取积分