【ESP8266 快速入门】示例5:Arduino环境实现OTA无线升级固件功能WebServer网页服务器方式

2023-11-15

主题

使用【ESP8266】Arduino环境实现OTA无线升级固件功能,由LED闪烁程序通过OTA升级为PWM呼吸灯程序。

0.引言

OTA听起来挺牛的一个功能,其全称为(Over-The-Air),直译为空中传送。就是通过无线方式实现固件升级。
在这里插入图片描述
对于实际封装好的项目,ESP8266已经包装好了,不方便使用数据线来下载程序。Arduino的OTA库,经常搜索不到网络端口,这里采用web服务端来升级程序,更加便捷。
下文将详细介绍如何轻松优雅的通过web,来无线更新ESP8266设备的固件,而无需物理连接。

1.环境准备

硬件:安信可esp8266开发板。
在这里插入图片描述

1.安装Arduino 1.8.15软件
2.安装ESP8266的库
这些在我的博文里面有详细说明,这里就不赘述了。博文如下:【ESP8266 快速入门】0.详细步骤-Arduino IDE开发环境搭建(基于安信可NodeMCU、C/C++)
在这里插入图片描述

2.OTA步骤

2.1.OTA的基础程序:LED闪烁

OTA应用以led闪烁程序为例。下文的关键代码httpUpdater.setup(&httpServer); // 网页更新固件

/*******************************************************************/
/*
项目名称           : 快速入门ESP8266
程序名称           : WEB_OTA_Example
作者              : nanshou
日期              : 202303
程序目的: 
本示例程序用于演示ESP8266的web-OTA功能。通过web网页更新esp8266的固件,而不需要连接数据线。
*/
/*******************************************************************/
#include <ESP8266WiFi.h> 
#include <ArduinoOTA.h>  // OTA库
#include <Ticker.h>      // 定时任务
#include <WiFiClient.h>   
#include <ESP8266WebServer.h>
#include <ESP8266HTTPUpdateServer.h>
// 设置wifi接入信息(只能是2.4g频段)
const char *ssid = "yourssid";
const char *password = "yourpassword";
ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;

/************************************************************/
Ticker ticker; // 定时任务
// led闪烁时间间隔(秒)
const int blinkInterval = 1;
// 在Tinker对象控制下,此函数将会定时执行。
void tickerCount(){
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
void setup(void)
{
    pinMode(LED_BUILTIN, OUTPUT);
    ticker.attach(blinkInterval, tickerCount); // 设置Ticker对象
    Serial.begin(115200);
    Serial.println();
    Serial.println("web OAT:blick v1.0"); // 显示版本
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);

    Serial.print("Connecting...");
    while (WiFi.status() != WL_CONNECTED)
    {
        Serial.print(".");
        delay(300);
    }

    Serial.println();

    httpUpdater.setup(&httpServer); // 网页更新固件
    httpServer.begin();

    Serial.print("HTTPUpdateServer ready! Open http://");
    Serial.print(WiFi.localIP());
    Serial.println("/update in your browser");
}

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

注意这里填写你的wifi信息

// 设置wifi接入信息(只能是2.4g频段)
const char *ssid = "yourssid";
const char *password = "yourpassword";

连接数据线,烧录这个程序到开发板。
工具参数如下,注意COM和硬件连接的编号相对应。我的是COM5,如果你的是COM3就选COM3。
在这里插入图片描述
点击程序上传。
在这里插入图片描述
程序上传成功后,led开始1s闪烁一次。
led点亮1s熄灭1s,闪烁效果如下图。
请添加图片描述

2.2.OTA的升级程序:PWM呼吸灯

新建一个项目,实现pwm呼吸灯。代码如下。

/*******************************************************************/
/*
项目名称           : 快速入门ESP8266
程序名称           : WEB_OTA_Example
作者              : nanshou
日期              : 202303
程序目的: 
本示例程序用于使用pwm呼吸灯,演示ESP8266的web-OTA功能。通过web网页更新esp8266的固件,而不需要连接数据线。

*/
/*******************************************************************/
#include <ESP8266WiFi.h> 
#include <ArduinoOTA.h>  // OTA库
#include <Ticker.h>      // 定时任务
#include <WiFiClient.h>   
#include <ESP8266WebServer.h>
#include <ESP8266HTTPUpdateServer.h>
// 设置wifi接入信息(只能是2.4g频段)
const char *ssid = "yourssid";
const char *password = "yourpassword";
ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;

/************************************************************/
Ticker ticker; // 定时任务
// 任务间隔毫秒
const int tick_ms_interval = 10;
int i = 1023;
// 在Tinker对象控制下,执行此函数实现呼吸灯
void ticker_pwm_breathing(){
  // 低电平点亮,i越接近0越亮。led逐渐变亮
  if(i< 0) i = 1023;
  analogWrite(LED_BUILTIN, i);
  i= i-5;
}
void setup(void)
{
    pinMode(LED_BUILTIN, OUTPUT);
    analogWriteRange(1023); // 设置PWM精度为10位(0-1023)
    
    Serial.begin(115200);
    Serial.println();
    Serial.println("web OAT:breathing v2.0"); // 显示版本
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);

    Serial.print("Connecting...");
    while (WiFi.status() != WL_CONNECTED)
    {
        Serial.print(".");
        delay(300);
    }

    Serial.println();

    httpUpdater.setup(&httpServer); // 网页更新固件
    httpServer.begin();

    Serial.print("HTTPUpdateServer ready! Open http://");
    Serial.print(WiFi.localIP());
    Serial.println("/update in your browser");

    ticker.attach_ms(tick_ms_interval, ticker_pwm_breathing); // 设置Ticker对象,输出pwm呼吸灯
}

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

注意这里填写你的wifi信息

// 设置wifi接入信息(只能是2.4g频段)
const char *ssid = "yourssid";
const char *password = "yourpassword";

点击左上角’文件’->‘首选项’后,勾选’编译’,然后点击’好’,保存设置。
在这里插入图片描述
编译代码(不是点上传)
通过无线网络上传ESP8266的这个呼吸灯程序编译的固件。
注意下面显示的固件输出的路径。

在这里插入图片描述
将路径复制出来C:\Users\nanshou\AppData\Local\Temp\arduino_build_116550(上图路径的中\改为\),在文件资源管理器中,可以看到后缀为bin的固件。就是通过web服务器,上传这个bin文件。
在这里插入图片描述

打开串口工具,查看串口输出服务器地址。用arduino自带的串口监视器也可以。
在这里插入图片描述
浏览器输入上述网址http://192.168.110.31/update 。注意电脑要和esp8266在同一局域网环境下(不懂局域网,就让esp8266连接同一wifi),否则网页打不开。
在这里插入图片描述
选择编译生成的呼吸灯的bin文件。
在这里插入图片描述
点击更新。
在这里插入图片描述
等待更新完成。
在这里插入图片描述
系统重启后就是新固件了。

led由闪烁变为了呼吸灯。效果如下图。
请添加图片描述
在这里插入图片描述
求赞求收藏求关注
在这里插入图片描述

3.总结

至此实现了web-ota,将esp8266从闪烁升级为呼吸灯。
1.ota程序占的空间较大,注意空间分配
2.电脑和esp8266必须处于同一局域网

这里调用的是默认的网页,非常难看。后续有空了再优化吧。
除了升级程序外,还可以更新文件系统的文件。有兴趣的朋友可以钻研。

此外,如果觉得使用STA模式升级不方便(需要额外的路由器WiFi或者热点),可以把STA换成AP模式,使用手机或者PC连接EPS8266放出来了的热点后,对应的ip地址(默认的是192.168.4.1/update )上传需要升级的固件就可以了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ESP8266 快速入门】示例5:Arduino环境实现OTA无线升级固件功能WebServer网页服务器方式 的相关文章

  • LINQ的基本使用

    一 什么是LINQ 长期以来 开发社区形成以下的格局 1 面向对象与数据访问两个领域长期分裂 各自为政 2 编程语言中的数据类型与数据库中的数据类型形成两套不同的体系 例如 C 中字符串用string数据类型表示 SQL中字符串用NVarc
  • 静态代码检测遇到的一些问题总结

    393 S Single parameter constructor not explicit 原因 只有一个参数的构造函数存在隐式类型转换的可能 解决方法 在单参数构造函数之前添加 explicit 例子 class test publi

随机推荐

  • HTML5中的save()和restore()方法的用法

    HTML5中的save 和restore 方法的用法 1 save 方法将当前的绘图环境压入堆栈顶部 2 restore 方法将从栈顶部弹出的一组状态信息 并根据此恢复当前绘图环境的各个状态
  • OpenWrt入门完美教程

    近来由于毕业设计需要用到摄像头模块 考虑利用 OpenWrt UVC mjpg streamer 方案驱动摄像头模块 学习了一篇很好的OpenWrt入门美文 原文链接如下 http zhidx com p 186 html 从零开始学习Op
  • 【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程

    2021年12月9日更新 可查看本人最新的CUDA环境配置博客 https zhuanlan zhihu com p 443114377 系对本文的提炼 归纳与总结 目录 环境配置流程总结 2021年6月10日更新 重要概念 务必看 写在开
  • 数字信号处理第二次试验:时域采样与频域采样

    数字信号处理第二次试验 时域采样与频域采样 前言 一 实验目的 二 实验原理与方法 三 实验环境 四 实验内容及步骤 五 实验结果截图 含分析 实验程序运行结果及分析讨论 六 思考题 想说点啥 前言 为了帮助同学们完成痛苦的实验课程设计 本
  • js去掉字符串的空格

    1 trim方法 过滤字符串两端的空格 var str xin xiang console log str trim xin xiang trim 是最常用的方法 也是最方便的方法 缺点 只能去除字符串两端的空格 不能去除中间的空格 2 r
  • Node.js基础入门第七天

    经过前面六天的知识学习 对Node js开发的基础知识 有了一个初步的掌握 今天继续学习Node js后端web开发的相关知识 本篇文章作为Node js服务端程序开发的基础入门知识 仅供学习分享使用 如有不足之处 还请指正 创建服务端程序
  • JS的findIndex在对象中依值查找相应的索引

    博大精深的JS 永远都学不完的好东东 JS根据对象值查找对应索引 let arr id 1 name a id 2 name b id 3 name c 查找id 3记录的索引号 let i arr findIndex v gt v id
  • 一步一步,学习如何搭建Spring+Spring MVC+MyBatis SSM框架开发环境

    目录导航 前言 一 准备工作 二 创建Maven项目 三 pom xml配置 四 配置web xml spring xml文件 五 编写Controller和相应jsp页面 六 集成mybatis 七 测试 八 TroubleShootin
  • 某资产配置平台系统方案建设规划

    整个平台规划分为前台与后台以及微平台的建设 其中前台系统囊括首页概览 固定收益产品 阳光私募产品 PE VC产品 地产投资产品 海外保险产品 理财学堂 会员中心八大模块 后台系统包含理财中心 产品中心 基础管理与账号管理四个版块 微平台后续
  • Rusr Error: linker `x86_64-w64-mingw32-gcc` not found

    Error linker x86 64 w64 mingw32 gcc not found 问题描述 解决办法 For Self For Windows 问题描述 交叉编译时 在 Mac OS 平台下为 Windows 打 EXE 包报错
  • 基于Spring Boot的个人博客系统的设计与实现毕业设计源码271611

    目 录 摘要 1 绪论 1 1研究意义 1 2开发背景 1 3系统开发技术的特色 1 4论文结构与章节安排 2 个人博客系统系统分析 2 1 可行性分析 2 2 系统流程分析 2 2 1数据增加流程 2 3 2数据修改流程 2 3 3数据删
  • 后端配置跨域

    仅为记录 Configuration public class CorsConfig 当前跨域请求最大有效时长 这里默认1天 private static final long MAX AGE 24 60 60 private CorsCo
  • CAN分析仪、USBCAN卡连接失败常见问题

    CAN分析仪对CAN总线开发的工程师来说是很常用的工具 但是对第一次将USB连接到CAN上的人来说可能会遇到很多问题 本文列举可能会遇到的问题 然后列出解决方法 问题1 设备打开失败 如下图所示 可能原因 设备型号选错 解决办法 来可针对不
  • 逆向破解学习-单机斗地主

    试玩 破解思路 9000 是成功的代码 Hook代码 import de robv android xposed XC MethodHook import de robv android xposed XposedHelpers impor
  • 开发ssm框架软件系统常见问题及解决方法

    在SSM框架开发软件系统中 可能会遇到一些常见的问题 如下所述 1 配置文件错误 在SSM框架开发软件系统中 配置文件往往是一个非常重要的部分 当配置文件存在错误时 可能会导致软件系统无法正常运行 解决这个问题的方法是检查配置文件的语法 路
  • 计算机术语表达因果,我翻译的维基百科关于福多的词条(下)

    意向实在论 福多对丹尼特的批评 福多对所谓的标准实在论提出了批评 根据他自己的想法 这个观点可以被描绘为两个独立的断言 其中一个诉诸心理状态的内在结构并且断言这些状态是非关联的 另一个主张关注心理内容的语义学理论并且断言在这些内容的因果作用
  • linux创建、删除文件夹的软链接

    在 home tom 下有个叫 a 的文件夹 想在 home dataset 下建一个软链接 b 指向它 即 hom dataset b rightarrow home tom a Create ln s home tom a home d
  • Android流行UI布局 BottomNavigationView+ViewPager+Fragment的使用

    1 概述 Android端采用底部导航栏的app非常多 一般我们都采用RadioGroup RadiaButton来进行界面的切换 今天我们要讲的是一个新的控件BottomNavigationView 用于替换RadioGroup 这个控件
  • 1023 买书(完全背包问题求方案数)

    1 问题描述 小明手里有n元钱全部用来买书 书的价格为10元 20元 50元 100元 问小明有多少种买书方案 每种书可购买多本 输入格式 一个整数 n 代表总共钱数 输出格式 一个整数 代表选择方案种数 数据范围 0 n 1000 输入样
  • 【ESP8266 快速入门】示例5:Arduino环境实现OTA无线升级固件功能WebServer网页服务器方式

    主题 使用 ESP8266 Arduino环境实现OTA无线升级固件功能 由LED闪烁程序通过OTA升级为PWM呼吸灯程序 目录 主题 0 引言 1 环境准备 2 OTA步骤 2 1 OTA的基础程序 LED闪烁 2 2 OTA的升级程序