程序员开发实例大全宝库

网站首页 > 编程文章 正文

Arduino-httpupdate-OTA-esp8266升级探险记

zazugpt 2024-08-31 05:15:39 编程文章 18 ℃ 0 评论

该准备的自行准备(烧录器,ESP01S,Arduino IDE最新版,升级前bin文件,升级后bin文件)

久爱物联网 - 专注 专心 专业

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
 
#ifndef APSSID
#define APSSID "JIUAI"  //换成您自己的SSID
#define APPSK  "jiuai.ltd"//换成您的密码
#endif
 
ESP8266WiFiMulti WiFiMulti; //多组WIFI模式不是本文重点
 
//初始化开始
void setup() {
   Serial.begin(115200);
  // Serial.setDebugOutput(true); 
  Serial.println();
  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();//清缓存
    delay(1000);
  }
 //设置网络连接模式 WIFI_AP /WIFI_STA /WIFI_AP_STA
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP(APSSID, APPSK);//账号密码
  //其他代码 如果连接不成功,可以引用smartconfig来启动配网
}
//初始化OTA升级用到的几个函数
void update_started() {
  Serial.println("CALLBACK:  HTTP update process started");
}
 
void update_finished() {
  Serial.println("CALLBACK:  HTTP update process finished");
}
 
void update_progress(int cur, int total) {
  Serial.printf("CALLBACK:  HTTP update process at %d of %d bytes...\n", cur, total);
}
 
void update_error(int err) {
  Serial.printf("CALLBACK:  HTTP update fatal error code %d\n", err);
}
 
//循环体
void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) 
  {
     WiFiClient client;//wifi连接实例
    ESPhttpUpdate.setLedPin(LED_BUILTIN, LOW);//指示灯作为信号反馈可以不要可改,01S默认2
    //我接的有继电器,升级过程会出现 反复断合 嗒嗒嗒....
    // Add optional callback notifiers
    ESPhttpUpdate.onStart(update_started);
    ESPhttpUpdate.onEnd(update_finished);
    ESPhttpUpdate.onProgress(update_progress);
    ESPhttpUpdate.onError(update_error);
 
    //两种联网方式(修改为您自己的地址,如体验本实例请联我)
    t_httpUpdate_return ret = ESPhttpUpdate.update(client, "http://你的域名或IP/路径名称/文件名.bin");//此固件仅供测试,每1秒输出个序号
    // Or:
    //t_httpUpdate_return ret = ESPhttpUpdate.update(client, "www.x5zj.com", 81, "/路径/文件名.bin");
   //升级过程中状态变化
    switch (ret) {
      case HTTP_UPDATE_FAILED:
        Serial.printf("HTTP_UPDATE_FAILD Error (%d): %s\n", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
        break; 
      case HTTP_UPDATE_NO_UPDATES:
        Serial.println("HTTP_UPDATE_NO_UPDATES");
        break; 
      case HTTP_UPDATE_OK:
        Serial.println("HTTP_UPDATE_OK");
        break;
    }
  }
}

之所以撰写本文,目的因为默认官方示例,无法烧录成功升级固件。故写此文予以分享


flash size:默认配置是 FS:512KB,OTA~246KB 调整为 上图 OTA:052KB (1MB里最大的空间这个),目的扩大OTA空间(写最简单的bin是260kb)

另外默认擦除方式Only Sketch (仅代码区)因为自己用到的有 EEPROM 可能占据一部分空间,故调整下如上图 All Flash Contents。

另外一个 固件FW:默认值改为了 2.2.1+199(我看到是2.2.1的最高版本故选此了)

将待升级的文件上传到指定服务器位置(要自己配置哦)hellow.bin (每1s仅打印出一句话)




更多参数参考官方文档。

本文是作者,经过多次失败后实践得来,如需了解更多,请关注我和jiuaiiot

已完成的模块功能 (ESP8266 12F,01S 系列通用)

1)一键配网,掉电保存;远程无线升级OTA(免去升级烦恼节省升级维护成本)

2)指令可自定义(各种内置指令规范标准)

3)mqtt协议通讯(现流行的物联网协议),可以自定义为您的服务器,也可以作者提供

4)h5(v信)调用,可以集成到任何平台,不用反复发布APP了,可随时修改调用客户端

5)这种指令组合(立即开,立即关,延时开,延时关;互斥操作:先关后开;点动操作:开后自动延时关;全开-可延时也可以不延时,全关-可延时也可以不延时;可预设延时时长秒)

6)本测试固件httpUpdate-hellow.bin 升级后固件 hellow.bin 请关注哦

7)可量产,学习交流,可现实场景用(很多网上买的模块 固件无法修改有的不提供任何说明,无法应用于现实,本主提供的可以直接用于生产应用中)

8)温湿度即时同步回显(每x秒 可定义,12F已集成)后续提供曲线图

9)自动模式-手动模式切换;前者通过温湿度或时间策略控制,后者通过人工远程操作。

10)可以定制各种特殊操作(可关注了解,可全部通过指令下发,串口也可以发送指令交互等等)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表