概述
- 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。
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
带你飞、加群付费
esp8266源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
esp32源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
文章目录
- 一、前言;
- 二、认识 flash 分布;
- 三、配置好远程固件下载的信息;
- 第一步:拷贝一份官方示范到自己的文件夹;
- 第二步:切进去修改远程的文件配置等;
- 四、配置好芯片信息;
- 五、升级过程概述;
- 六、部分代码概述;
- 七、其他;
- 7.1 注意事项;
一、前言;
在人生的道路上,有很多十字路口,而最重要的,可能就那么一两条 。 这个是我最近看的《老师,好》电影里面一个经典台词。当第二次被邀请到乐鑫工作,我内心是热血狂澜的。但由于所处环境的和个人的本身原因,不得不放弃这个邀请。既然放弃了这个念头,那么就要好好地做好当前的工作,到人生后某一天想起,我也有信心勇气说起不负当年的决定。
当身边都是优秀的人,你也不得不被感染!他们接受新事物快,动手能力强,基础扎实,善于思考!大公司小公司都是需要这样的人才,所以为什么招聘高学历的人!qq群的大多数人的提问,让我不得不反思当前一个问题:不善于思考,这是个从小灌输的学习思想!如何去解决技术问题? 就拿我的qq群里面的群友来说,喜欢一上来就拿着工程去跑,比较多的问题是:编译失败,跑不通,连接服务器不成功!这类问题一般是对基础不扎实!
“前人种树后人乘凉”,我在 GitHub 或者这博客里面,放了很多的代码,里面的案列都是我亲手跑通才放上去的,这就是前人种树!但是 后人乘凉 ,需要你一个健全的人,一个可以把基本环境搭建好,把每个SDK版本的区别总体认识,最基础的是要有单片机入门基础!
总的来说,劝告那些在校大学生或者已就业的朋友,在开发单片机不管遇到什么问题,第一时间,看芯片log打印信息分析,此log绝大部分可以分析出处于什么问题才会这样的现象!包括我接触的 JavaScript 小程序、Android开发app,php服务器对接天猫精灵,都是喜欢打 log ,不断调试思考哪里问题!这都是作为一个标准程序员的技能!
最后说一句,以后大家提问题,一定要说明当前的硬件环境,sdk版本,代码截图,现象说明,日志打印信息!提问语气友好!不管在哪里,这样的提问方式,绝对让对方感到你虚心好学的态度。
二、认识 flash 分布;
以下的讨论都是基于 支持 ota 分区来说的,并非single factory app
;
在 3.0
的版本,esp32
和esp8266
的内存分布都是一样的,就拿我们的esp8266-12f
模块来说,如下图片,我们一层层说下(全部手写,非翻译而来):
- 前面已经说到了
NVS
是乐鑫自研的类似数据库的存储机制的 flash 操作技术,其位置大家在下面都可以看到了! PartitionTable
是分区表,字面意思是 每个用户编写的应用程序的位置定义。pyh_init
就是 rf射频相关的了!coredump
是程序跑飞异常时候保存log信息的位置,这个在esp32有提到怎么使用,目前在 esp8266 是没提到的;ota-0
和ota-1
大家都应该看的懂了就是升级后的2个程序存储位置。factory app
就是初次烧录的用户程序的位置了!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_SDKexamplessystemota
第二步:切进去修改远程的文件配置等;
切进去后 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!rn");
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 rn", ip);
socket_id = socket(AF_INET, SOCK_STREAM, 0); // 创建套接字描述符
if (socket_id < 0)
{
ret = -1;
printf("socket created failed!rn");
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!rn");
ret = 0;
break;
}else {
printf("error = %drn", 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 注意事项;
- 每次手动烧录固件,请先
make erase_flash
,因为这样可以清除所有的信息,保证程序读取是在 factory app 区域!再烧录make flash
! - 确保你的服务器上的固件地址正常访问,是http 请求访问,不是 https 哈!!!
- 为了区分是否正确ota升级,先修改下固件版本,比如
v1.1
,放去服务器,再修改低版本的通过本地烧录到硬件去。 - 放到服务器的固件本地位置是在编译后的
build
文件夹下的ota.bin
文件哈!
- 很多人怎么联系我一起学习进步,下面打个小小公告和干货无偿分享:
玩转
esp8266
带你飞、加群付费
esp8266源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
esp32源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
- 下面是我动态录制的 gif 图片,正常运行即使为这样示范:
- 本博文硬件代码工程下载:https://download.csdn.net/download/xh870189248/11171459
最后
以上就是幽默导师为你收集整理的乐鑫esp8266学习rtos3.0笔记第6篇:esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网之上增加dns域名解析!(附带demo)一、前言;二、认识 flash 分布;三、配置好远程固件下载的信息;四、配置好芯片信息;五、升级过程概述;六、部分代码概述;七、其他;的全部内容,希望文章能够帮你解决乐鑫esp8266学习rtos3.0笔记第6篇:esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网之上增加dns域名解析!(附带demo)一、前言;二、认识 flash 分布;三、配置好远程固件下载的信息;四、配置好芯片信息;五、升级过程概述;六、部分代码概述;七、其他;所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复