什么是web前端(干货!物联网模块 esp8266 OTA在线升级固件 省去烧写的麻烦!)

什么是web前端(干货!物联网模块 esp8266 OTA在线升级固件 省去烧写的麻烦!)
干货!物联网模块 esp8266 OTA在线升级固件 省去烧写的麻烦!

哈喽~大家好 今天小编发现了一个特别有意思的操作.esp8266在线更新固件 废话不多说 下面开整!

本文所有程序皆开源 下载地址在文章尾部

在线升级固件的应用范围

不知道你有没有遇到过下面的两种情况 :

  1. 程序烧写完毕 调试阶段没有任何bug 但是正式使用一段时间后因为某种原因出现了不可容忍的BUG(对于处女座的人来说任何bug都是不可容忍的)

  2. 程序烧写完毕 使用正常 但是某天你突然想到了一个非常炸天的功能 或者你想再度优化程序

那么问题来了 无论你是解决bug 还是要优化程序 都需要设备断电 拆卸 烧写 这三步 是不是很烦?

这里推荐一个好方法 esp8266在线更新固件 OTA (Over-the-Air的简写,空中下载技术的意思)

esp8266 for arduino 的开发者给出了两种更新方法都是在线更新!

一种是esp8266自建一个 web server 当你通过网页访问8266时 通过上传bin文件升级 如下

第二种是 在指定的网页位置查找bin文件 并下载更新

因为第二种对小编实际应用比较大 所以第一种并未研究....(因为手里正好有瘦主机 建好站 把升级文件往里一扔就可以了)

这里单独讲解第二种哦.

先看下效果~

视频加载中...
[xss_clean][xss_clean]

正式开始前的准备

硬件esp8266一个 不推荐01版本(有过对比你就知道差一元钱的差距)

然后把arduino ide 附加开发版设置好 这样就可以用arduino的ide开发esp8266了

具体设置 请看我之前发布的一个视频和一个文章 都有讲

视频:玩转esp8266物联网模块 简简单单点亮LED灯

文章:物联网重要组成部分esp8266的开发 用Arduino的IDE开发ESP8266

我他喵的也不想这样的 头条的内部文章链接抽风了..不能直接引用

什么是web前端(干货!物联网模块 esp8266 OTA在线升级固件 省去烧写的麻烦!)

-注意!-

因为spiffs的原因 开发板必须选generic esp8266 module(必须是要这个哦~因为别的开发板貌似都没有flahsize选项)

并且把flah size 设置成 no spiffs

原因是一个程序文件200+KB esp8266空间分配会出问题


在菜单 首选项 里设置如下

这样的话 ide编译的二进制文件 你就能根据他的输出提示进而找到了

完毕!

让我们一起来写程序吧!

先写好一份程序 点亮led灯之类的 用作测试 并且编译

编译成功后

在 "Linking everything together.." 的下第二行 红框标识的那一行向后拉

这个地址就是你编译的bin文件地址 找到他

找一个直链网盘 存进去 获得到一个下载地址 格式 http://xxx.xxx.xxx/dw/csR.bin

必须要直链!必须要直链!必须要直链! 百度云是不可以的!

以.bin结尾才可以

把这个地址放在浏览器地址栏里敲下回车 弹出下载框 就ok

我们现在把这个程序定义为你升级后的程序 并把这个bin命名为 csR.bin 其实不改这个傻乎乎的名字也可以的

我是为了方便下面的程序.. 那里写的是csR.bin

ok 结束 现在写在线更新的程序

全局定义和setup部分

有点基础的应该看得懂.没有基础的应该也能看得懂.........基本都是一行一注释

这部分需要的注意的是 把WIFI账号和密码改成你自己的. 因为你想在线更新你必须把它挂在网络上!

loop部分↓


35行 延时函数 一秒 让查询一秒查一次

36行 判断8266是否链接到路由器 如果没有 直接跳转到62行 开始输出13脚的高或低电平(这种检测取反值的方法是我搬运时候学到的..之前都不知道还有这种骚操作..一直以为管脚定义为输入模式才能检测)

38行 在链接路由的条件下才能执行 查找csR.bin文件 并将返回结果赋给ret

39行 判断ret

41-43行 如果ret是HTTP_UPDATE_FAILED 则打印输出升级失败信息

57行 如果都不是上述结果 那就打印出 未知错误

ok检测部分执行完毕 然后跳转到62行执行13脚高低电平输出

loop函数结束

烧写进你的8266 这个开发版要手动拉低引脚并重启才能烧写进去 如果选nodemcu1.0 的话自动烧写,但是程序不能正常执行 因为没有flah选项....

烧写成功后看串口输出 正常的话 链接路由器后 不到2秒就会下载新的程序 然后自动更新 (下载更新是没有提示的!)

然后会输出一大堆参数 .反正我是看不懂 好像是什么烧写位置之类的

之后观察你的板子看看有没有执行你放在网盘里的程序

题外话:

但是有些地方出现的问题小编到发帖时也没有解决

讲道理他应该会判断下载到的bin文件特性是否与正在运行的程序一致 如果一致的话就不更新 提示出无需更新的信息

但是实际并没有这样做 8266在更新一次后(更新后的程序里我写的还是查找csR.bin) 自动重启之后再次查找时候还会再次更新 一直循环

玩过8266的同学有知道什么原因的话......求指点

不过正式应用时到不会妨碍 ,因为这次更新文件里我会预先写好下次更新的文件名叫csR02.bin 这样他更新完csR.bin之后 找csR02.bin 就会提示失败 因为csR02.bin你还没有编写出来 csR02.bin是你为下次更新预留的文件名.也可以叫留的后手...

源码下载

我写了两个源码 一个是csR 一个是csG 分别对应 RGB灯的 红和绿 烧写其中的csR之后 他会亮红灯然后去自己下载更新新的固件csG csG运行后 点绿灯 然后去更新csR ...一直这么循环 .

两个代码我都打包在一起 如你不想像我这么二的话 用其中之一就好啦`~

链接:http://pan.baidu.com/s/1o7YCez4

提取码:mt0q

最后一句! 求关注啊亲 手打一个小时.....

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读