Esp8266 进阶之路33【大神篇】如何优雅地像乐鑫原厂封装esp8266底层寄存器的逻辑思维,做成自己的静态库库文件,让第三方人使用?

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://xuhong.blog.csdn.net/article/details/86661844

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

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!


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

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

一:前言;


    今天是2019年1月26号了,相信还在坚持看我博文笔记的你,应该放假了把。●︿● 。在这条esp8266 SDK编程开发道路渐行渐远了,不知道这一年的笔记竟然可以帮助那么多的朋友,感到欣慰!!

    当初写博客仅仅为了记录职业发展,回头看看那些年的进步!这个要看到一些去年做乐鑫开发板的淘宝商家,开始开源了教程在GitHub,很好,哈哈!

    即使在这个嵌入式开发路上走了那么远,我依然不忘初衷,继续笔记,开源代码。并非商业用途,并非组织编写。小徐学到一些好的东西知识干货,依然会分享给大家。我并不会停顿在某个领域或某个阶段,做无谓的事情,时间是珍贵的,若干年后,三十而立,要有所作为!

    这里说明下,要加我好友的人太多了,我特意弄了个qq付费群,提高下群人素质,如果支持我,或者有什么问题,都可以进群里面提问,大家一起讨论。当然了,每篇博文都是可以留言的,我第一时间看到回复!


二:认识C语言的编程,编译器最后到底把我们的文件弄成啥了?


     从大学学了C语言、Java语言,毕业一年就学了web前端编程以及服务器php开发,c语言很大都不同的是:C语言是面对过程的编程!编译之后,就是二进制的bin文件,或者我们51熟悉的hex文件,这些文件不能再一次被分解了。

     而学过javaWeb,或者安卓的朋友,像是对apk反编译都知道,最后是一个个的class文件,而最后的虚拟机会对这些文件进一步编译成二进制或者其他文件给手机linux跑起来。总的来说,java是把我们编程中的对象,变成一个class!不同的class名字不一样,所以我们也就是有:面向对象编程。

     举个靶子,我们的c语言有个关键字extern,而在面向对象编程,是没有这个存在的!extern关键字意思是让当前的c文件去其他c文件找这个变量;更可怕的,如果2个文件或者多个文件定义一样的变量的名字,编译过程提示变量重复。。What?我明明放在2个文件啊,为啥还提示重复??原理就是编译过程其实就是把所有文件整理成一个不可分解文件!


三:回到正题,为何需要 封装底层逻辑 ?


     封装,何谓封装?就是一些细节隐藏起来,目的是不让其他开发者看到我的实现过程,或者是为了禁止他人修改。就像一个工厂,实现封闭式管理,不让他人看到里面的操作流程,或者不想泄露商业机密!客户仅需按照合同来提供金钱,那么工厂就会操作并且 提供货源给你。

     而乐鑫esp8266就是很好的用了这个原理,开发者不必去关心里面底层的逻辑实现,只需要用哪个接口(相当于提供金钱),那么就可以实现你要的效果。(并非追随乐鑫,而是学习到这种封装精神!)

     去年时候,我接到公司给的一个利用某较为出名的物联网平台提供的SDK,集成在esp8266,实现连接其平台,实现控制下发流程。刹那感觉这公司的嵌入式开发人那么牛逼啊。竟然可以封装esp8266的底层逻辑给第三方使用!

     现在想起来,也不是难!可能是我已经掌握了吧?是的,我已经学会了如何做自己的sdk静态库文件,并且提供给第三方用!现在我们开始通过认识乐鑫提供的文件,了解一下一个完整的SDK包应该是怎么样的?


在这里插入图片描述


四:开始你的表演!


  • 下面拿上篇文章的说的MD5加密算法封装适配esp8266封装起来。
  • 我这里准备一台集成esp8266开发环境的linux系统的虚拟机,可以跑起来一个完整的工程,我把我要封装的文件单独放在一个独立文件夹,叫做driver,下面只有一个头文件和源文件,以及一个Makefile文件!
  • 注意事项:
    • 1、注意driver文件夹要被工程编译,别问怎么做。。这个是esp8266编程基本功了!
    • 2、务必要在linux下编译,windows我还没发现有什么方法可以编译成库文件。
    • 3、 我们把所有的业务和实现过程在源文件实现,只提供头文件给他人用。

在这里插入图片描述


  • 待我们编译成功之后:

    • 其下面文件夹有个 libxxx.a文件。没错,他就是这个文件夹编译出来的。这个就是我们要的库文件,是不是很简单轻松拿到呀?

在这里插入图片描述



  • 这个其实对于个人学习如何封装是很好的体现,下面给大家提供我封装的MD5esp8266的封装库文件以及源文件:
  • 提供的接口很简单:
#ifndef __MZX_CLOUDS_H__
#define __MZX_CLOUDS_H__

#include "esp_common.h"
#include "c_types.h"

#define XH_MD5_16 16
#define XH_MD5_32 32

/**
 * @description:  HMAC_MD5加密
 * @param {strContent} 要加密的字符串
 * @param {iLength} 要加密的字符串的长度
 * @param {typeMd5Bit} 十六位还是三十二位加密?
 * @param {outBuffer} 输出字符串
 * @return: 
 */
void XH_MD5StartDigest(void const *strContent, u16 iLength, u8 typeMd5Bit, u8 *outBuffer);

/**
 * @description:  HMAC_MD5加密
 * @param {inBuffer} 要加密的字符串
 * @param {len} 要加密的字符串的长度
 * @param {ky} 密钥
 * @param {pUserOut} 输出字符串
 * @return: 
 */
void HMAC_XH_MD5(u8 *inBuffer, u16 len, u8 *ky, u8 *pUserOut);

#endif


如何使用?

void user_init(void)
{

    char context[20] = {"xuhong2019"}; //要加密的字符串
    char getEntry[20]; //加密后的内容
    XH_MD5StartDigest(context, strlen(context), XH_MD5_16, getEntry); //十六位加密

    printf("xuhong2019 16Bit: %s \n", getEntry);
}


五:其他!


  • 运行截图:

在这里插入图片描述

展开阅读全文

没有更多推荐了,返回首页