天天看點

blinker 第三方庫_blinker 庫開發注意事項

Arduino支援

回調函數

使用回調函數是為了更友善梳理程式邏輯,但回調函數中若有阻塞類型的代碼(如: while delay 或 Serial讀寫等)将可能影響裝置的正常通信及工作。

==使用者在開發過程中務必避免在回調中執行阻塞類型的代碼, 請使用标志位等方法在回調外對标志位進行查詢檢測執行控制。==

ESP8266&ESP32

EEPROM

以下EEPROM位址在 blinker 庫中已占用, 使用者開發時務必避開以下位址。

位址

用途

0-1279

自動化控制資料

1280-1535

專屬裝置資料

1536-2431

定時器配置資料

2432-2435

ESP AT子產品序列槽配置資料

2436-2447

OTA配置資料

Ticker

ESP-Arduino SDK 中官方提供了硬體定時器的庫Ticker。

使用者開發時若需要使用到Ticker, 務必避免在Ticker中斷回調中執行IO阻塞性代碼。

請使用标志位等方法在回調外對标志位進行查詢檢測執行控制, 以避免看門狗複位。

官方文檔提醒 : It is currently not recommended to do blocking IO operations (network, serial, file) from Ticker callback functions. Instead, set a flag inside the ticker callback and check for that flag inside the loop function.

WiFiClientSecure

blinker 庫中使用了:

ESP8266 的 BearSSL::WiFiClientSecure 和 WiFiClient

ESP32 的 WiFiClientSecure 和 WiFiClient

注: ESP8266 package 已使用 BearSSL::WiFiClientSecure。

原有的 axTSL 的 WiFiClientSecure 将廢棄且不能和 BearSSL 同時使用, 可能導緻連接配接失敗及堆棧溢出。

對應的對象名為

BearSSL::WiFiClientSecure   client_mqtt;// ESP8266

WiFiClientSecure            client_s;// ESP32

WiFiClient                  client;// ESP32 & ESP8266

使用者使用中若要使用到以上 庫/類 時, 建議 extern 對應對象并 stop

如需要使用到 ESP8266 的 WiFiClientSecure:

void secureConnect()

{

extern BearSSL::WiFiClientSecure client_mqtt;

BearSSL::WiFiClientSecure client;

client_mqtt.stop();

client.connect(host, httpsPort);

}

如需要使用到 ESP8266 的 HTTPS:

void secureConnect()

{

extern BearSSL::WiFiClientSecure client_mqtt;

client_mqtt.stop();

std::unique_ptr<:wificlientsecure>client_s(new BearSSL::WiFiClientSecure);

// client_s->setFingerprint(fingerprint);

client_s->setInsecure();

HTTPClient https;

https.begin(*client_s, url);

https.addHeader(conType, application);

uint8_t httpCode = https.POST(msg);

String payload = https.getString();

https.end();

}