我在 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.se
tinsecure(); // 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();
}
}
}