乐鑫esp8266学习rtos3.0笔记第6篇:esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网之上增加dns域名解析!(附带demo)

版权声明:本文为博主半颗心脏一心一血敲出来的原创作品,未经博主允许不得转载,多谢支持。 https://blog.csdn.net/xh870189248/article/details/90079984

  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。
2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。
3、 Esp8266之 利用 "软件定时器 " 定时0.5秒闪烁点亮一盏LED。
4 、Esp8266之 了解PWM,更为深入地用PWM控制一盏LED的亮度变化。
5 、Esp8266之 原生乐鑫SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。
6 、Esp8266之 了解 SmartConfig与Airkiss一键配网,给8266配网上云端。无需把wifi名字密码写在固件里。
7 、Esp8266之 了解 softAP热点配网模式原理,仿“机智云”定义自己的热点配网模式协议。
8、 Esp8266之 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。
9、 Esp8266进阶之路第1篇: [小实战上篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
10、 Esp8266进阶之路第2篇: [小实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
11、 Esp8266进阶之路第3篇: 8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!
12、 Esp8266进阶之路第4篇: 图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制一盏LED。
13、 Esp8266进阶之路第5篇: 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。
14、 Esp8266进阶之路第6篇: esp8266的 FreeRtos系统学习的正确姿势 ------ 环境搭建、烧录。
15、 Esp8266进阶之路第7篇: esp8266的 物联网又一股清流,8266接入阿里云平台非阿里智能的SDS服务,点亮一盏LED灯。
16、 Esp8266进阶之路第8篇: esp8266的 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。
17、 Esp8266进阶之路第9篇: esp8266自研的快速上电开关五次 (开-关为一次) ,无需按键触发则8266进去一键配网模式。
18、 Esp8266进阶之路第10篇: esp8266 基于NONOS 实现 OTA 远程升级,实现无线“ 热修复 ”升级固件程序。
19、 Esp8266进阶之路第11篇esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。
20、 Esp8266进阶之路第12篇深入学习esp8266的esp now模式,仿机智云做一个小网关,实现无需网络下轻松彼此连接通讯交互数据。
21、 Esp8266进阶之路第13篇浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。
22、 Esp8266进阶之路第14篇esp8266的工程如何添加第三方静态库文件以及如何自定义文件夹,聊聊那些makeFile的事。。
23、 Esp8266进阶之路第15篇再来一波 esp8266 基于 freeRtos系统连接自己私有的服务器实现OTA远程升级,接触下 lwip的基本知识。。
24、 Esp8266进阶之路第16篇渗透学习回顾下esp8266的外置spi芯片25q系列,熟悉8266代码块在其的分布,得心应手放置图片或其他资料。
25、 Esp8266进阶之路第17篇深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。
26、 Esp8266进阶之路第18篇RTOS分析 MQTT 实现过程,实现移植 MQTT协议在 esp8266 rtos实时系统,可断线重连。
27、 Esp8266进阶之路第19篇跟紧脚步,用VisualStudio Code开发 esp8266 rtos SDK v3.0版本,全新的 idf 框架,节省内存模块化开发。
28、 Esp8266进阶之路第20篇教你轻松自如使用cJson在乐鑫 esp8266 如何解析一段json数据以及如何生成一段json数据。
29、 Esp8266进阶之路第21篇百万条消息免费之乐鑫esp8266使用TCP直连模式MQTT协议接入阿里云物联网平台,支持私家服务器对接支持阿里云规则引擎。
30、 Esp8266进阶之路第22篇乐鑫esp8266 SDK编程使用 IIC总线驱动 0.96寸的OLED显示屏,显示天气预报信息。
31、 Esp8266进阶之路第23篇当esp8266遇到 Html,该怎么内置网页控制设备,理清内置网页的实现过程,实现无需路由器手机也可以控制esp8266。
32、 Esp8266进阶之路第24篇细聊HmacMD5的加密方法带来的安全性,并实践在esp8266上,最大保障传输的过程的信息的安全性。
33、 Esp8266进阶之路第25篇如何优雅地像乐鑫原厂封装esp8266底层寄存器的逻辑思维,做成自己的静态库库文件,让第三方人使用?
34、 Esp8266进阶之路第26篇乐鑫esp8266 NONOS SDK 3.0编程使用 SPI 驱动基于Max7219芯片的八位数码管,显示日期信息。
35、 Esp8266进阶之路第27篇乐鑫esp8266芯片借助机智云平台做一个商业化的七彩RGB灯泡可调整体方案项目,炫彩夺目高大尚。
36、 Esp8266学习rtos3.0笔记第1篇认识esp8266 Rtos 3.0 sdk 工程结构,esp8266如何向esp-idf工程靠近的,如何自定义头文件编译?
37、 Esp8266学习rtos3.0笔记第2篇你要找的基本外设功能都在这里了,包括Gpio、Pwm 和 Uart 接口使用。
38、 Esp8266学习rtos3.0笔记第3篇 一篇文章带你搞掂存储技术 NVS 的认识和使用,如何利用NVS保存整型、字符串、数组以及结构体。
39、 Esp8266学习rtos3.0笔记第4篇 带你捋一捋市面上的微信公众号配网智能设备 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 sdk。
40、 Esp8266学习rtos3.0笔记第5篇 基于乐鑫idf框架,研究出超稳定、掉线重连、解决内存泄露问题的Mqtt框架!支持esp8266和esp32!
41、 Esp8266学习rtos3.0笔记第6篇 esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网基础之上增加dns域名解析!


  • 很多人怎么联系我一起学习进步,下面打个小小公告和干货无偿分享:

玩转esp8266带你飞、加群付费QQ群,提高门槛,不喜的朋友勿喷勿加:434878850
esp8266源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
esp32源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32


一、前言;


     在人生的道路上,有很多十字路口,而最重要的,可能就那么一两条 。 这个是我最近看的《老师,好》电影里面一个经典台词。当第二次被邀请到乐鑫工作,我内心是热血狂澜的。但由于所处环境的和个人的本身原因,不得不放弃这个邀请。既然放弃了这个念头,那么就要好好地做好当前的工作,到人生后某一天想起,我也有信心勇气说起不负当年的决定。


     当身边都是优秀的人,你也不得不被感染!他们接受新事物快,动手能力强,基础扎实,善于思考!大公司小公司都是需要这样的人才,所以为什么招聘高学历的人!qq群的大多数人的提问,让我不得不反思当前一个问题:不善于思考,这是个从小灌输的学习思想!如何去解决技术问题? 就拿我的qq群里面的群友来说,喜欢一上来就拿着工程去跑,比较多的问题是:编译失败,跑不通,连接服务器不成功!这类问题一般是对基础不扎实!


     “前人种树后人乘凉”,我在 GitHub 或者这博客里面,放了很多的代码,里面的案列都是我亲手跑通才放上去的,这就是前人种树!但是 后人乘凉 ,需要你一个健全的人,一个可以把基本环境搭建好,把每个SDK版本的区别总体认识,最基础的是要有单片机入门基础!


     总的来说,劝告那些在校大学生或者已就业的朋友,在开发单片机不管遇到什么问题,第一时间,看芯片log打印信息分析,此log绝大部分可以分析出处于什么问题才会这样的现象!包括我接触的 JavaScript 小程序、Android开发app,php服务器对接天猫精灵,都是喜欢打 log ,不断调试思考哪里问题!这都是作为一个标准程序员的技能!


     最后说一句,以后大家提问题,一定要说明当前的硬件环境,sdk版本,代码截图,现象说明,日志打印信息!提问语气友好!不管在哪里,这样的提问方式,绝对让对方感到你虚心好学的态度。

在这里插入图片描述


二、认识 flash 分布;


     以下的讨论都是基于 支持 ota 分区来说的,并非single factory app


     在 3.0的版本,esp32esp8266的内存分布都是一样的,就拿我们的esp8266-12f模块来说,如下图片,我们一层层说下(全部手写,非翻译而来):


  1. 前面已经说到了 NVS是乐鑫自研的类似数据库的存储机制的 flash 操作技术,其位置大家在下面都可以看到了!
  2. PartitionTable 是分区表,字面意思是 每个用户编写的应用程序的位置定义。
  3. pyh_init就是 rf射频相关的了!
  4. coredump 是程序跑飞异常时候保存log信息的位置,这个在esp32有提到怎么使用,目前在 esp8266 是没提到的;
  5. ota-0ota-1 大家都应该看的懂了就是升级后的2个程序存储位置。
  6. factory app 就是初次烧录的用户程序的位置了!
  7. not use就是并没使用的部分,大家可以在这里存储自己的东西,比如字库!

在这里插入图片描述


     还有另外几点我需要补充的是:

  • 这个分区并不是一味不变的,大家可以自定义的。换句话说,我可以自定义存储位置以及其存储大小,一般对于初学者来说别修改,否则会让你的程序跑不起来的!默认的采用分区文件是在:ESP8266_RTOS_SDK/components/partition_table/partitions_two_ota.csv

  • 这个存储的地方在哪里的呢?当有人问你的时候,别说存储在 esp8266芯片里面的,其实是在 它接的一个 flash 芯片上的,比如下面的 25q32 ;

  • not use部分的存储可以在代码读取出来,同样地,我们也可以通过 espTools 提供的工具把 数据转存为 NVS 数据格式存储在 NVS 位置,这个我以后会提到!

在这里插入图片描述


三、配置好远程固件下载的信息;


第一步:拷贝一份官方示范到自己的文件夹;


     为什么要拷贝一份官方示范?因为我不喜欢动官方的源码,一方面为了对比自己后面修改的代码,二是可以直接pull官方最新的代码不发生冲突!这是我个人习惯!或者你直接进去其文件夹配置就好了,我的是基于 rtos3.1版本的,其路径是:

..\ESP8266_RTOS_SDK\examples\system\ota

第二步:切进去修改远程的文件配置等;


     切进去后 make menuconfig , 找到 Example Configuration,其每项如下所示,具体输入看实际而定!

     注意:如果你是直接使用官网的代码,下面的服务器地址只能是ip地址,如果你是用我下面提供的,必须是域名哈!

在这里插入图片描述


四、配置好芯片信息;


     esp8266 的ota 不管在 哪个 SDK 版本,都是需要配置芯片信息的,3.0版本之前是在Makefile文件配置,但是 3.0 之后是在 shell 窗口打开make menuconfig 配置的!操作如下动态图所示:

 -->Partition Table
    --> Partition Table (选择第二个表示支持ota,采用默认的分区) 
      --> Partition Table Offset set (输入0x8000就是上面说的分区表位置)

在这里插入图片描述


  • 注意看我的 烧录配置,尤其注意flash设置为 2MB !

在这里插入图片描述


五、升级过程概述;


     这部分没啥好讲的,和 2.0 那些代码过程都是一样的!下面贴出我之前写的 一个博文链接,可以加深理解其过程:https://blog.csdn.net/xh870189248/article/details/80095139

在这里插入图片描述


六、部分代码概述;


  • 为了区分其固件版本,我加了一个宏表示当前版本定义,下面表示是 1.0 版本 :
#define  FW   "V1.0"

  • 在官网的基础上,我并没修改什么代码,仅仅加了下面的dns解析我们的域名:

static int connect_to_http_server()
{
    ESP_LOGI(TAG, "Server IP: %s Server Port:%d", EXAMPLE_SERVER_IP, EXAMPLE_SERVER_PORT);
    int ret;
    struct addrinfo hints, *addr_list, *cur;
    struct sockaddr_in serverAddr;

    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_UNSPEC; // Allow IPv4 or IPv6
    hints.ai_flags = 0;
    hints.ai_protocol = 0;
    hints.ai_socktype = SOCK_STREAM;
    
    //域名解析得到ip地址
    ret = getaddrinfo(EXAMPLE_SERVER_IP, NULL, &hints, &addr_list);
    
    if (ret != 0)
    {
        printf("DNS parsing failed!\r\n");
        return -1;
    }

    for (cur = addr_list; cur != NULL; cur = cur->ai_next)
    {
        char ip[128];
        inet_ntop(AF_INET, &(((struct sockaddr_in *)cur->ai_addr)->sin_addr), ip, 128);
        printf("DNS IP: %s  \r\n", ip);
        socket_id = socket(AF_INET, SOCK_STREAM, 0); // 创建套接字描述符
        if (socket_id < 0)
        {
            ret = -1;
            printf("socket created failed!\r\n");
            continue;
        }
        bzero(&serverAddr, sizeof(struct sockaddr_in)); // 清零
        serverAddr.sin_family = AF_INET;
        //这个是设置ip地址
        serverAddr.sin_addr.s_addr = inet_addr((const char *)ip);
        //serverAddr.sin_addr.s_addr = inet_addr((const char*)("192.168.1.124"));
        serverAddr.sin_port = htons(EXAMPLE_SERVER_PORT); 

        if (connect(socket_id, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) == 0)
        {
            printf("connect server success!\r\n");
            ret = 0;
            break;
        }else  {
            printf("error = %d\r\n", errno); // #define EHOSTUNREACH 113 // No route to host 无法路由到主机
        }
        close(socket_id);
        ret = -1;
    }
    if (cur == NULL)
        ret = -1;
    freeaddrinfo(addr_list);
    return ret;
}


  • 我们在程序入口加如打印当前的版本:
    //打印版本
    ESP_LOGI(TAG, "Version : %s", FW);

七、其他;


7.1 注意事项;


  1. 每次手动烧录固件,请先make erase_flash,因为这样可以清除所有的信息,保证程序读取是在 factory app 区域!再烧录make flash
  2. 确保你的服务器上的固件地址正常访问,是http 请求访问,不是 https 哈!!!
  3. 为了区分是否正确ota升级,先修改下固件版本,比如v1.1,放去服务器,再修改低版本的通过本地烧录到硬件去。
  4. 放到服务器的固件本地位置是在编译后的 build文件夹下的ota.bin文件哈!
  • 很多人怎么联系我一起学习进步,下面打个小小公告和干货无偿分享:

玩转esp8266带你飞、加群付费QQ群,提高门槛,干货多多,不喜的朋友勿喷勿加:434878850
esp8266源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
esp32源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xh870189248/article/details/90079984