本帖最后由 三水 于 2018-12-27 11:43 编辑
[md]# 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阻塞性代码。
请使用标志位等方法在回调外对标志位进行查询检测执行控制, 以避免看门狗复位。
[官方文档提醒](https://github.com/esp8266/Arduino/blob/master/doc/libraries.rst#ticker) : 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:
```arduino
void secureConnect()
{
extern BearSSL::WiFiClientSecure client_mqtt;
BearSSL::WiFiClientSecure client;
client_mqtt.stop();
client.connect(host, httpsPort);
}
```
如需要使用到 ESP8266 的 HTTPS:
```arduino
void secureConnect()
{
extern BearSSL::WiFiClientSecure client_mqtt;
client_mqtt.stop();
std::unique_ptr<BearSSL::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();
}
```[/md] |