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

主题

使用【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 )上传需要升级的固件就可以了。

  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: ESP8266 OTA升级是一种通过无线网络更新设备固件的方法。在Arduino中,可以使用ESP8266WiFi库和ESP8266HTTPUpdate库来实现OTA升级。首先,需要将设备连接到WiFi网络,然后使用HTTPUpdate库从服务器下载新的固件并更新设备。这种方法可以方便地更新设备,而无需将设备连接到计算机或使用编程器进行更新。 ### 回答2: ESP8266 OTA升级Arduino是一种便捷的方式,能够让我们省去了通过USB或串口连接板子进行上传的麻烦。在使用OTA升级之前,需要配置好Wi-Fi连接和局域网设置。 首先,我们需要使用Arduino IDE打开一个示例程序,这个程序需要以OTA方式上传到Arduino板子上。在示例程序中,我们需要添加OTA库,来实现固件OTA升级。具体步骤是:Sketch->Include Library->Manage Libraries->OTA->Install。 接下来需要修改OTA的SSID和密码,这是为了让我们的Arduino板子能够连接上Wi-Fi。修改的位置在OTA代码的WiFi.begin(ssid,password)这一行中。 然后我们需要在代码中加入一个标识,每次升级时比较版本号,以避免重复上传已经上传过的固件。我们可以通过把当前版本号写在代码的一个常量中,每次更新时对比这个版本号和上传固件中的版本号是否相同,来判断是否需要升级。 最后,我们需要打开“OTA port”,以便在本地局域网内访问Arduino板子。我们可以通过在代码中添加“ArduinoOTA.begin()”来完成打开OTA port的操作。 在此之后,我们就可以使用“Sketch->Upload using OTA”命令将程序通过OTA的形式上传到Arduino板子上,实现便捷的固件升级。相比传统的USB或串口上传方式OTA升级更加方便快捷,极大提高了调试和开发效率。 ### 回答3: ESP8266是一款非常流行的Wi-Fi模块,它也可以被用来控制Arduino板子。OTA即Over-The-Air升级,是一种不需要通过串口或USB线连接板子就可以升级固件方式,通过Wi-Fi实现实现ESP8266 OTA升级Arduino主要有两种方式:基于HTTPServer和基于MQTT。 基于HTTPServer的方式需要我们在ESP8266上搭建一个Web服务器,通过浏览器或者Python等程序向服务器发送固件升级信息。首先,我们需要使用ESP8266WebServer库,搭建一个HTTP服务器,配置网络和路由,使其能够处理HTTP请求。然后我们需要在Arduino程序中定义一个固件升级的接口,将固件文件上传到这个接口,如果上传成功就将文件保存到SPIFFS文件系统中,接着重启系统切换到新的固件程序。 基于MQTT的OTA升级方式,则需要我们在ESP8266Arduino中运用MQTT,通过MQTT传递消息。在ESP8266中,我们需要连接一个MQTT代理服务,监听指定主题。Arduino中的程序需要将当前版本号,固件信息和更新程序上传到MQTT代理上,这样ESP8266就能收到消息,进行升级操作了。 在进行ESP8266 OTA升级Arduino时,需要注意一下几点: 1. 电源充足:OTA升级需要大量网络传输和Flash读写操作,需要保证合适的供电 2. 固件安全:OTA升级开启后,需要考虑固件的安全性,防止文件被篡改 3. 程序稳定:OTA升级无疑会对当前程序造成影响,需要谨慎处理,确保升级后程序的稳定性和完整性。 总之,ESP8266 OTA升级Arduino需要考虑很多因素,但它可以有效提升开发效率和用户体验,是非常有价值的一个技术。如果你对此比较感兴趣,可以继续进行深入研究。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值