8266使用巴法云OTA

为了使用方便把OTA封装一下为以下类

#include "ESP8266HTTPUpdate.h"

class OTA
{
private:
    ESP8266HTTPUpdate httpUpdate;

    // using HTTPUpdateStartCB = std::function;
    void OnStartCB()
    {
        Serial.println("开始OTA升级");
    }
    // using HTTPUpdateEndCB = std::function;
    void OnEndCB()
    {
        Serial.println("结束OTA升级");
    }
    // using HTTPUpdateErrorCB = std::function;
    void OnErrorCB(int ec)
    {
        Serial.println("OTA升级错误:" + ec);
    }
    // using HTTPUpdateProgressCB = std::function;
    void OnProgressCB(int cur, int total)
    {
        Serial.println("OTA升级中:" + String(cur) + "/" + String(total));
    }

public:
    void updateBin()
    {
        if (CConfigMgr::getSingleton().OTAURL().isEmpty())
        {
            Serial.println("OTA url为空,无法升级");
            return;
        }
        Serial.println("ota升级,禁止切断电源");
        WiFiClient UpdateClient;
        httpUpdate.setLedPin(2);
        httpUpdate.rebootOnUpdate(true);
        httpUpdate.onStart(std::bind(&OTA::OnStartCB, this));
        httpUpdate.onEnd(std::bind(&OTA::OnEndCB, this));
        httpUpdate.onError(std::bind(&OTA::OnErrorCB, this, _1));
        httpUpdate.onProgress(std::bind(&OTA::OnProgressCB, this, _1, _2));

        HTTPUpdateResult ret = httpUpdate.update(UpdateClient, CConfigMgr::getSingleton().OTAURL());
        switch (ret)
        {
        case HTTP_UPDATE_FAILED: // 当升级失败
            Serial.println("升级失败.");
            break;
        case HTTP_UPDATE_NO_UPDATES: // 当无升级
            Serial.println("无升级.");
            break;
        case HTTP_UPDATE_OK: // 当升级成功
            Serial.println("升级成功.");
            break;
        }
    }
};

当接收到ota命令时直接

 OTA ota;
    ota.updateBin();

即可.

这里的CConfigMgr是一个单例类它保存了一些从eeprom读取的配置信息其中

CConfigMgr::getSingleton().OTAURL()返回OTA的URL.这个地址可以从巴法云的主题处获取 

 8266使用巴法云OTA_第1张图片点击 这里的OTA即可上传固件.上传以后8266使用巴法云OTA_第2张图片

这里就是需要的URL,这个URL是和当前主题绑定的,即这个主题的OTA url始终是这个.所以你可以写死在代码里,也可以像我一样保存是EEPROM. 

 

你可能感兴趣的:(iphone,ios)