天天看点

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();

}