ESP8266 OTA之浏览器更新

简介: ESP8266的浏览器更新的过程是这样的用ESP8266先建立一个Web服务器然后提供一个更新界面(ESP8266HTTPUpdateServer)通过Arduino将源文件编译为*.

ESP8266的浏览器更新的过程是这样的

  1. 用ESP8266先建立一个Web服务器然后提供一个更新界面(ESP8266HTTPUpdateServer)
  2. 通过Arduino将源文件编译为*.bin的二进制文件
  3. 通过mDNS功能在浏览器中访问ESP8266的服务器页面(如:http://esp8266.local/update)
  4. 通过Web界面将本地编译好的*.bin二进制固件文件上传到ESP8266中
  5. 上传完成编译文件后ESP8266将固件写入Sketch中

先刷入以下代码

/**
/*
  To upload through terminal you can use: curl -F "image=@firmware.bin" esp8266-webupdate.local/update
*/

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPUpdateServer.h>

const char* host = "esp8266-webupdate";
const char* ssid = "........";
const char* password = "........";

ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;

void setup(void) {

  Serial.begin(115200);
  Serial.println();
  Serial.println("Booting Sketch...");
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);

  while(WiFi.waitForConnectResult() != WL_CONNECTED){
    WiFi.begin(ssid, password);
    Serial.println("WiFi failed, retrying.");
  }

  MDNS.begin(host);

  httpUpdater.setup(&httpServer);
  httpServer.begin();

  MDNS.addService("http", "tcp", 80);
  Serial.printf("HTTPUpdateServer ready! Open http://%s.local/update in your browser\n", host);
}

void loop(void){
  httpServer.handleClient();
}

然后在偏好设置中的Show verbose output dump选项中选中"Complation"

当固件刷新后,打开串口调试器就可以看到OTA的更新页面的地址:

直接在浏览器打开该地址:

是不是很丑?而且你是无法进行任何的美化的!

对代码进行编译,在最后就会出现便宜后的二进制格式的固件更新文件:

回到浏览器点击"Choose file" 按钮就可以将固件上传到ESP8266中去:

更新结束。

结论

这种更新模式其实只适用于在开发期的一些应急的场景,例如:ESP8266已安装到原型机或者产品内且

  1. 无法与电脑相连进行直接的固件刷新。
  2. 无法直接连接更新服务器进行固件更件

这种更新界面是无法提供给最终用户使用的,因为要进行固件更新的话用户得先获得固件的文件,然后还得通过一个非常丑的Web页面将文件上传上去。所以说这种方式只能给开发人员在应急的情况下将就地用一下。

相关文章
|
11月前
|
内存技术
stm32实现iap远程固件更新
stm32实现iap远程固件更新
140 0
|
Web App开发 移动开发 前端开发
【webview】微信和PC监听浏览器关闭和刷新(亲测可用)
最近做的项目里有一个新的需求,在不同的浏览器内打开的网页,监听用户的操作,比如关闭浏览器,刷新浏览器等等。 这就涉及到了几个平台:PC端浏览器,移动端IOS和安卓微信的webview等等。在微信里打开的H5网页,要获取到用户关闭页面的事件。经过对visibilitychange、 unload/pagehide 、onunload、popstate各种方法一阵测试,发现安卓里`visibilitychange`能监听到关闭事件。而iOS里使用`pagehide`能监听。
615 0
|
JavaScript Android开发 iOS开发
兼容安卓和ios的手机端浏览器返回和物理返回的监听处理操作实战(推荐)
兼容安卓和ios的手机端浏览器返回和物理返回的监听处理操作实战(推荐)
271 0
兼容安卓和ios的手机端浏览器返回和物理返回的监听处理操作实战(推荐)
|
Web App开发
PC - Chrome 浏览器如何开启无痕模式?
PC - Chrome 浏览器如何开启无痕模式?
393 0
PC - Chrome 浏览器如何开启无痕模式?
|
Web App开发 监控 前端开发
Chrome 96又更新了5个巨巨巨好用的功能
大家好,我是零一,收到了 Chrome 96 版本的更新推送,简单看了一下,还是更新了几个挺有趣的东西的,一起来看看到底都有啥~ 先下载 Chrome Beta 版本才能体验 Chrome 96 哈
159 0
Chrome 96又更新了5个巨巨巨好用的功能
|
Web App开发 缓存 移动开发
[Chrome,Flash,浏览器,BLOB,DNS]Chrome浏览器内部协议Chrome://收集
  Chromium 采用 Chrome:// 协议开头的形式, 规定了一系列的内部协议, 有的用来显示数据, 有的用来实现一些功能, 但对普通用户进行了屏蔽。在Chrome浏览器地址栏直接访问就好了!   chrome://bookmarks   收藏管理器
268 0
ESP8266 OTA之服务器更新
我之前介绍了两篇关于ESP8266的OTA更新方法: 基于 Arduino OTA "ESP8266 OTA之Arduino IDE更新" 基于 浏览器的 OTA "ESP8266 OTA之浏览器更新" 说实话以上这两种方案除有点好玩其实没有什么实用性,由其在开发产品时上述的两种方案就是一种鸡肋,甚至可以说是不可用的。
4444 0