史上最简单的 ESP8266 云端升级方案

ESPush 是一个新手友好的 ESP8266 物联网云平台,专门为 ESP8266 模组优化,可以串口透传远程执行AT指令云端固件推送升级微信小程序远程控制一键烧录工具标准REST API接口访问等,点击下载中心,下载相关资源,查找各项组件源代码。

这里阐述如何使用 ESPush 的云端升级构建自己的 IoT 固件。

ESPush 云升级介绍

ESPush 云平台的固件升级由云端发起,设备端被动接收,并按扇区更新自己的 Flash 固件,更新完成且校验通过后,自动重启并应用新版本固件。

整个过程无需终端用户参与,固件端无需实现任何与之相关的代码,只需要集成 ESPush SDK 库文件即可,或直接使用 ESPush Demo 固件亦可。

使用 ESPush 云升级的唯一条件注册一个 ESPush 账号,点击此处查看快速入门教程。

添加设备固件种类

注册完 ESPush 系统用户,并按教程新增了产品类型后,还需要增加一个固件种类。我们姑且可以认为每个版本的固件,如V1.0,V1.1,V2.1.2 等都属于某个固件种类。点击左侧导航 设备固件,并点击新增固件产品类别,输入唯一字符串标识,确定后即新增成功。

图1 新增固件产品类别

ESPush ESP8266 新增固件类型

增加完成后,不用急着上传固件版本,因为我们现在还没有编译任何一份固件,切第一个版本的固件总是需要使用比较原始的手段烧入设备。

接下来克隆此 Demo 工程 https://github.com/espush/espush-demo ,让我们将终端设备接入 ESPush 云平台。

接入云平台

打开 app/user/user_main.c 文件,修改 user_init 函数为如下代码:

void ICACHE_FLASH_ATTR user_init(void)
{
    uart_init(BIT_RATE_115200, BIT_RATE_115200);
    {
        struct station_config config;
        os_strcpy(config.ssid, "YOUR SSID");
        os_strcpy(config.password, "SSID PWD");

        wifi_set_opmode(STATION_MODE);
        wifi_station_set_config(&config);
        wifi_station_set_auto_connect(1);
        wifi_station_dhcpc_start();
    }

    espush_init();
    espush_set_server_domain("espush.cn", 10001);
    espush_set_auth(YOUR_APPID, "YOUR DEVICE KEY");
    espush_set_firmware("EX");
    espush_set_autoreconnect(1);
    espush_connect();
}

以上代码留意几点:

  • YOUR SSID 与 SSID PWD ,需要改为您附近可用路由器的信息;
  • 配置 YOUR_APPID 为您在 ESPush 系统中的 设备接入信息部分显示的 ID与密钥;
  • espush_set_firmware 设置当前运行时的固件名称,请设置为在图一中设置的固件产品类别名称;
  • espush_set_server_domain 后指定了当前公网服务器地址,如果您自行部署了 ESPush 服务器,则需要指定您自己的域名,或使用函数 espush_set_server_ipaddr 指定服务器为 IP 地址表示;

以上代码就是所有本次教程需要了解的,接下来我们加入一行示例输出,作为我们版本1 特有功能。

版本1

在以上代码,user_init 函数最后一行,我们使用如下代码输出一个 Hello, ESPush version 1.

void ICACHE_FLASH_ATTR user_init(void)
{
    ......

    espush_connect();
    os_printf("\r\nHello, ESPush version 1.\r\n");
}

完成代码后按 BOOT=new MAP=6 的方式编译:

make clean
make BOOT=new APP=1 SPI_SIZE_MAP=6

在开发环境的 cygwin 控制台中,以下输出代表着编译成功。

ESPush ESP8266 云端固件升级 固件编译图片

编译完成后,将 APP1 烧录到固件中,如下图:

ESPush ESP8266 云端固件升级 固件编译图片

为确保演示成功,请按如下方式烧录固件:

boot_v1.7.bin => 0x0
user1.4096.new.6.bin => 0x1000
blank.bin => 0x3FB000
blank.bin => 0x3FE000
esp_init_data_default.bin => 0x3FC000

固件烧录完成后,重启设备,打开串口调试助手,可以看到我们期望中的输出,[5.13] xxxx 等格式字样,是 ESPush 库的输出,可忽略。

ESPush ESP8266 云端固件升级 串口输出

在 ESPush 系统的设备管理中,我们将也能看到在线的设备,下图显示了一些常见信息,以及运行时固件名称与 ESPush 版本号等。

ESPush ESP8266 云端固件升级 设备管理

版本1已完成,让我们简单修改,生成版本2代码,并使用云端推送升级。

版本2

再次修改代码,使之输出 version 2,如下:

void ICACHE_FLASH_ATTR user_init(void)
{
    ......

    espush_connect();
    os_printf("\r\nHello, ESPush version 2.\r\n");
}

完成代码后同样按 BOOT=new SPI_SIZE_MAP=6 的方式,并分别编译 APP1 与 APP2。在平台固件管理处,新增并上传固件。完成后如下所示:

ESPush ESP8266 云端固件升级 设备管理

执行云端升级

点击设备管理,并点击设备详情,在运行时固件信息旁点击固件升级,选择刚刚上传的固件版本,并点击确定,下图所示:

ESPush ESP8266 云端固件升级 设备管理

稍等片刻,查看串口输出,你会发现升级已经完成,并且按预期输出了新版本的字符串,如下图所示:

ESPush ESP8266 云端固件升级 设备管理

升级完成!

results matching ""

    No results matching ""