合宙Air780E|iot|update|FOTA|LuatOS-Air开发|LuatOS-SOC接口|官方demo|学习(17):FOTA(远程升级)

news2024/11/14 13:40:45

一. 概述

update是物联网中比较常用的功能,本文介绍如何用Air780E开发板,如何做update升级。

LuatOS-Air开发模式下,固件分为两部分:corescript

远程升级时:core为差分升级;script为全量覆盖升级

远程升级时:可以仅升级script;可以仅升级core;也可以同时升级core+script

支持合宙iot平台升级和自建第三方服务器升级。

注意:

"fotademo"的升级仅适用于V1103及以上的固件,以下版本固件无法实现core+script同时升级的目的。V1103以下版本的固件需本地升级至V1103及以上版本,之后才可实现完整的远程升级(同时升级core+script)功能。

. 材料准备

  1. [EVB_Air780E]开发板一套,包括天线SIM卡,USB线。
  2. PC电脑,以及登录官方IOT后台 合宙云平台
  3. 固件和DEMO下载地址 LuatOS软件包

刷入旧版本的fota-demo程序及所需要的支持库文件:

 

刷入完成后log:

可以从日志中查到imei号后期需要填入iot平台用于升级。

 

. 合宙iot平台升级core+script过程

1. iot平台创建产品

  1. ​ 登录合宙iot平台

http://iot.openluat.com/cloud/main

  1. 如果没有账户,注册一个账户
  2. 我的项目->新建产品

复制产品product_key

 

2. 模块端脚本修改,生成升级包

core

旧版本core

新版本core

例子

LuatOS-SoC_V1103_EC618.soc

LuatOS-SoC_V1103_EC618.soc

要求

1、大于等于旧版本core版本号

2、新旧版本core支持的功能相同

script
main.lua

旧版本
(模块端本地烧录的)

新版本
(生成的量产文件,

远程升级包)

要求

PROJECT
(项目名称)

fotademo

fotademo

新旧版本保持一致

VERSION
(软件版本号)

1.0.1

1.0.2

大于等于旧版本VERSION

PRODUCT_KEY
(项目密钥)

JdIY6pAEHiK3z9sTz3I0eQHqG********

JdIY6pAEHiK3z9sTz3I0eQ*********

和iot平台创建的产品
ProductKey保持一致

3. 按照新版本的需求,修改main.lua

如下图所示,PROJECTPRODUCT_KEY保持不变,PRODUCT_KEY需和服务器保持一致,VERSION修改为1.0.2

注意事项:
1、固件版本 V1103 及以上, 配合 libfota.lua
2
main.lua 内填写版本号要符合 x.y.z 形式, 其中 x/y/z 均为数值, 不限于个位数
3、若fota使用合宙iot平台, 版本号中的 y 会被忽略, 推荐写0, 务必留意。

 4. 使用Luatools生成bin文件差分包

注意:只有Luatools版本2.1.89以上支持生成bin文件差分包,低版本仅支持生成sota文件
固件和DEMO下载地址 LuatOS软件包,这里下载的是LuatOS-SoC@EC618 V1103项目下面的core_V1103.zip软件包。下载对应软件包后按如下步骤生成对应的差分包。

 在Luatools目录下的SOC量产及远程升级文件下,找到EC618文件夹,打开后缀名为.bin的文件fotademo_1103.1.2_LuatOS-SoC_EC618.bin,这个就是文件差分包。

 5.在合宙iot平台配置升级包

进入iot平台创建的产品,打开我的项目->固件列表->创建固件,如下图所示


默认生成的量产文件均存放在luatools主程序下的SOC量产及远程升级文件夹下,如:E:\LuatOS\SOC量产及远程升级文件\EC618

 点击确定之后,升级配置完成,如下图所示

 添加需要升级的模块imei,如下图所示

Imei编号可在log日志中查到。

 添加完成如图:

 6. 模块开机,完成升级

烧录旧版本的模块开机后,连接升级服务器,下载差分升级包,自动重启,重启过程中完成固件升级,整个过程的关键日志如下图所示:

 

 7.云平台查看升级日志

登录云平台,选择对应设备升级的产品->固件升级->升级日志->输入对应的imei并选择日期->搜索:

 可以看到设备在此日期下的空中升级日志。正常升级成功的情况下,短时间内会有两次升级请求,第一次请求升级获取到升级包之后,设备重启升级成功会再次向云平台请求是否有更高版本的固件可以升级。直到升级结果为 “已是最新版本服务器没有更高版本的固件为止。

之后再重启,日志会显示http应答不OK  400,直到有新的升级包:

 8.设备升级失败代码

设备升级失败代码,可对照以下表格寻求解决方案。

响应码

响应信息

问题以及解决办法

云平台日志结果

3

无效的设备

检查请求键名(imei小写)正确性

17

无权限

设备会上报imei、固件名、项目key。
服务器会以此查出设备、固件、项目三 条记录,
如果 这三者不在同一个用户名下,就会认为无权限。
设备不在项目key对应的账户下,
可寻找合宙技术支持查询该设备在哪个账户下,
核实情况后可修改设备归属

无权限

21

21

不允许从1.0.2升到1.0.3

21

25

无效的项目

productkey不一致,检查是否存在拼写错误,
检查模块是否在本人账户下,若不在本人账户下,请联系合宙工作人员处理

未找到项目

26

无效的固件

固件名称错误,项目中没有对应的固件。用户自己修改了固件名称,可对照升级日志中设备当前固件名与升级配置中固件名是否相同(固件名称,固件功能要完全一致,只是版本号不同)。

找不到固件

27

已是最新版本

1、设备固件版本高于云平台
2、固件版本设备脚本版本高于云平台版本
3、用户项目升级配置中未添加该设备
4、云平台升级配置中,是否升级配置为否

已是最新版本
设备不在配置的升级设备列表中

40

循环升级

云平台进入设备列表搜索被禁止的imei,解除禁止升级就好了。
云平台防止模块在升级失败后,反复请求升级导致流量耗尽,
在模块一天请求升级六次后会禁止模块升级。可在平台解除。

检测到循环升级
(已禁止升级,请到设备列表解除)

43

请等待

云平台生成差分升级包需要等待,
一到三分钟后云平台生成完成差分包便可以请求成功。

正在生成版本,请等待

44

基础版本缺失

平台未收录设备固件(多为定制固件,
可寻找合宙技术支持人员添加,需提供定制固件邮件)

基础CORE版本缺失

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/352160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring高级(原理)

一、Spring创建Bean personService -> 构造方法 -> 普通对象 -> 依赖注入(byType->byName) -> 初始化前(PostConstruct) -> 初始化(InitializingBean) -> 初始化后(AOP) -> 代理对象 -> 将代理对象放入到Map单例池中 -> B…

WGCNA | 值得你深入学习的生信分析方法!~(网状分析-第五步-高级可视化)

1写在前面 前面我们用WGCNA分析完成了一系列的分析,聚类分割模块。🥰 随后进一步筛选,找到与我们感兴趣的表型或者临床特征相关的模块,而且进行了模块内部分析。😘 再然后是对感兴趣模块进行功能注释,了解模…

Mars3D Studio 的使用方法

Mars3D Studio的使用 1、介绍: mars3d Studio是mars3d研发团队于近期研发上线的一款 场景可视化编辑平台。拥有资源存档、团队协作、定制材质等丰富的功能。可以实现零代码构建一个可视化三维场景。 2、功能介绍 (1)数据上传&#xff1a…

代码随想录【Day16】| 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和

110. 平衡二叉树 题目链接 题目描述: 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,nul…

物理层基本介绍

corset 0 告诉下行初始带宽是多少 initail DL BWP, 4g 是20M带宽,5G是FR1 如果5G是全带宽的话,手机很快就会没电了。 告诉手机带宽会分布在某一个带宽里面去,将手机的带宽调整就行。 DCI,告诉手机,未来的某一个时刻&a…

【MyBatis】第九篇:mybatis逆向工程插件----mybatis-generator

本篇聊mybatis逆向工程,但是这个和安卓逆向不一样,不是说反编译,破解什么加密 ,最后打包。而是通过一某插件,快速生成一个mybatis项目的结构而已。 简单的说就是,通过先创建的数据表,由框架通过…

【1139. 最大的以 1 为边界的正方形】

来源:力扣(LeetCode) 描述: 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0。 示例 1&#…

浮点数值计算精度丢失问题剖析及解决方法

文章目录1、原因分析2、解决方法2.1、Java中使用 BigDecimal 类2.2、JavaScript 中解决计算精度丢失的问题3、使用建议1、原因分析 首先我们来看个反直觉的浮点数值计算 System.out.println(0.3*3);有的同学可能要问为啥不是0.9? 首先要知道为什么会产生这个问题…

Mybatis的Mapper接口代理机制

提示:本文章基于B站动力节点的课程仿写 文章目录前言一、解析mybatis-config.xml1.1 引入dom4j依赖1.2 解析mybatis-config.xml1.3 解析mapper映射文件二、引入javassist2.1 引入javassist依赖2.基于mybatis的javassist来实现该功能前言 本文章基于B站动力节点的课…

算法训练营DAY54|583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 - 力扣(LeetCode)https://leetcode.cn/problems/delete-operation-for-two-strings/这道题也是对于编辑距离的铺垫题目,是可以操作两个字符串的删除,使得两个字符串的字符完全相同,这道题可…

利用vite插件开发,实现工程化打包,建议收藏

为什么需要工程化打包? vue3vite的工程,普遍都会在项目public文件夹,创建一个config.js文件,存放一些配置态的数据,用于在产品上线后,可能会根据需要修改参数值,从而达到线上配置数据目的。 但…

第0章 一些你可能正感到迷惑的问题

操作系统是什么 操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件。 由操作系统把资源获取到后台给用户进程,但为了保护计算机系统不被损坏,不允许用户进程直接访问硬件资源。 操作系统相当于是一个分配资源的机构,…

【C++】string类(下)

文章目录1.迭代器(正向遍历)begin有两个版本2.反向迭代器(反向遍历)rbegin由两个版本3. at4. insert ——头插在pos位置前插入一个字符串在pos位置前插入n个字符在迭代器前插入一个字符5. erase从pos位置开始删除len个字符从迭代器位置开始删除6. replace——替换从pos位置开始…

【Linux】进程终止进程等待

文章目录进程创建fork函数初识fork函数返回值写时拷贝fork常规用法fork调用失败的原因进程终止进程退出场景进程常见退出方法进程等待进程等待必要性进程等待的方法wait方法waitpid方法获取子进程status从操作系统层面理解waitpid阻塞状态和非阻塞状态阻塞等待例子:多进程创建和…

设计模式 - 模板方法模式详解

介绍&定义 模板模式,全称是模板方法设计模式,英文是 Template Method Design Pattern。在 GoF 的《设计模式》一书中,它是这么定义的: Define the skeleton of an algorithm in an operation, deferring some steps to subcl…

从辅助驾驶到自动驾驶究竟还有多远?

/ 导读 /现如今,自动驾驶的噱头早已被厂家们放在台面上宣传了太多,小鹏汽车更是在最近宣称要在2023年在中国率先推出全自动驾驶,此言一出更是一石激起千层浪,而业内人士表示针对此类言论早已经见怪不怪了,更何况何小鹏…

计算机网络期末复习汇总(附某高校期末真题试卷)

文章目录一、选择题二、填空题三、名词解析四、简答题五、高校期末真题一、选择题 1、传输延迟时间最小的交换方法是( A ) A.电路交换 B.报文交换 C.分组交换 D.信元交换 2、在OSI七层结构模型中,处于数据链路层与运输层之间的是( B) A、物…

双代号网络图、双代号时标网络图、单代号网络图精讲

01进度管理—普通双代号网络1.识读、虚箭线(1)网络图的识读:基本组成及逻辑关系;(2)补充虚箭线:共用一个班组、共用一台机械;(3)网络图的基本绘制要求:①只有一个起点及终点;②箭线从小节点编号指向大编号&…

for var in 循环报错

近期对babel进行升级,突然爆出 Property left of ForInStatement expected node to be of a type ["VariableDeclaration","LVal"] but instead got undefined;的错误,不知为何;解决:for(var p in…

数据库如何分库分表

有了主从数据库为啥还需要分库分表 如果一个网站业务快速发展,那这个网站流量也会增加,数据的压力也会随之而来,比如电商系统来说双十一大促对订单数据压力很大,Tps十几万并发量,如果传统的架构(一主多从&a…