Коректный синтаксис для setCACert ESP8266

Я пытаюсь использовать сертификат с ESP8266, идентичный код отлично работает на ESP32, но для ESP8266 я получаю ошибки.

Я установил сертификат следующим образом

const char *ROOT_CERT PROGMEM = R"EOF(= "-----BEGIN CERTIFICATE-----
MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
...
-----END CERTIFICATE--------)EOF"; 

Для ESP32, который я использую

wifiClient.setCACert(ROOT_CERT)

Это работает нормально, но на 8266 я получаю.

no matching function for call to 'BearSSL::WiFiClientSecure::setCACert(const char*&)'

Я провел некоторое исследование, и есть некоторые предположения, что требуется длина, поэтому я также попробовал это

 wifiClient.setCACert(ROOT_CERT,sizeof(ROOT_CERT)-1);

Но это приводит к следующей ошибке.

invalid conversion from 'const char*' to 'const uint8_t* {aka const unsigned char*}' [-fpermissive]

Я использую библиотеку плат 2.7.4 8266, так как слышал, что у 3.X есть аналогичные проблемы.

Я пробовал V 3.X, но получаю следующее

class BearSSL::WiFiClientSecure' has no member named 'setCACert'

, 👍1


1 ответ


1

Я не мог использовать setCACert с 8266. Вам нужно сделать это по-другому, и мне пришлось поискать в Интернете.
Но, наконец, я заставил свой тест телеграммы работать с esp32 на 8266, вот что я сделал и надеюсь, что вы сможете это адаптировать

вам нужно:

#include <ESP8266WiFi.h>

после ваших определений добавьте:

X509List cert(TELEGRAM_CERTIFICATE_ROOT);
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtokenValue,client);

в настройках мне пришлось добавить ОБЕ эти строки (сначала я не думал, что мне нужна 1-я строка, но, видимо, вам это нужно):

configTime(0, 0, "pool.ntp.org");   // получить время UTC через NTP
client.setTrustAnchors(&cert);      // Добавляем корневой сертификат для api.telegram.org

это преобразовало мой код ESP32 из ESP32 в 8266

,

PS- замените WiFi.h на ESP8266WiFi.h, @Jim Barat