ESP8266快速入门:使用Arduino环境实现OTA无线升级固件功能的WebServer方式

主题

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

目录

  • 主题
  • 0.引言
  • 1.环境准备
  • 2.OTA步骤
  • 2.1.OTA的基础程序:LED闪烁
  • 2.2.OTA的升级程序:PWM呼吸灯
  • 3.总结
  • 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 )上传需要升级的固件就可以了。

    物联沃分享整理
    物联沃-IOTWORD物联网 » ESP8266快速入门:使用Arduino环境实现OTA无线升级固件功能的WebServer方式

    发表回复