ESP8266 SDK 获取CHIP_ID

在实际的项目当中,我们有的时候需要一个唯一的芯片ID,使得同一份固件可以得到不同的ID,之前用过nodemcu的固件,里面有一个函数node.chipId(),这个函数可以用来获取某一个ESP8266的ID,但是RTOS_3.2版本中我并未找到相关的函数可以调用,就打算自己编写一个加入SDK当中去。接下是代码和方法。

一、添加定义

把这个获取ID放到esp_system.h中最为合适:先找到\components\esp8266\include目录下的esp_system.h,添加一下下面的函数定义,传入的参数是一个32位整形指针,用于存放芯片ID

/*** @brief  Get the chip id .** @param  chip_id  the chiip id .length 32 bit.** @return ESP_OK on success*/
esp_err_t get_chip_id(uint32_t* chip_id);

二、添加实现

在\components\esp8266\source目录下找到system_api.c 然后添加以下代码:

esp_err_t get_chip_id(uint32_t* chip_id){esp_err_t status = ESP_OK;*chip_id = (REG_READ(0x3FF00050) & 0xFF000000) |(REG_READ(0x3ff0005C) & 0xFFFFFF);return status;
}

三、测试

#include <stdio.h>#include "esp_system.h"/******************************************************************************* FunctionName : app_main* Description  : entry of user application, init user function here* Parameters   : none* Returns      : none
*******************************************************************************/
void app_main(void)
{uint32_t id ;get_chip_id(&id);printf("SDK version:%s,chip id:%u\n", esp_get_idf_version(),id);}

三、总结

测试了两块,一块是2865516771,一块是3045330318,是不一样的,不过这个是否唯一还不好说,只能说重复率很低,上述的这种获取方法是和mac地址有关的。
搞出来的过程有点点复杂,先是找了nodemcu的源码,看了源码后又去看了ESP8266_RTOS的源码,最后终于搞出来了。

ESP8266_RTOS_SDK3.2 之获取芯片ID(chip id)相关推荐

  1. stm32获取芯片的96位ID

    stm32获取芯片ID stm32芯片ID的地址 stm32的芯片地址为:0x1FFFF7E8~0x1FFFF7F3 因为我们芯片的ID都是96位 所以我们就可以建立一个数组才存储这个ID 一般数据的 ...

  2. jQuery获取带点的id元素

    一般jQuery获取某个id为elem元素,只需用$('#elem')就行了,但是如果id中不小心包括了'.' ,那么我吗就会发现这时候jQuery就不能获取到这个元素了.但是使用dom原生的getE ...

  3. insert数据时,获取插入数据的id

    insert数据时,获取插入数据的id 当运行完插入语句后,执行select @@identity就可得到自动生成的id 如果是sql server 最好用select SCOPE_IDENTITY( ...

  4. mysql 获取刚插入行id汇总

    mysql 获取刚插入行id汇总 我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的. ...

  5. c++ 获取线程id_高效获取当前线程的 id

    不同平台获取当前线程 id 的方法 Windows 可以利用微软提供的 api,轻松获取当前线程的 id: int id = GetCurrentThreadId(); Linux Linux 平台一 ...

  6. WIN32开发:如何获取父进程的ID

    众所周知,windows中的进程是可以有父子关系的,拥有父子关系的进程,一旦父进程结束,子进程有会随之退出.但是如果进程之间没有父子关系,我们如何让子进程在父进程退出是也同时跟着退出呢?方法有很多,本 ...

  7. php mysql获取新添加记录的id值_PHP获取MySql新增记录ID值的方法

    今天发现用mysql_insert_id()获取到的新增记录的id不正确, 虽然发现源代码的事务写的有问题,但是最根本的原因是,我插入数据的id类型是bigint型 获取MySql新增记录ID值的方法 ...

  8. 【ARM】Tiny4412裸板编程之Chip ID

    00. 目录 文章目录 00. 目录 01. Chip ID概述 02. 寄存器介绍 03. 程序示例 04. 编译执行 05. 附录 01. Chip ID概述 The Exynos 4412 SC ...

  9. jquery 获取 id ,但是id 里面不能有. 这个符号

    因为要上传嵌套的变量 例如 rose.roseId,结果jquery 不能读取这个id    -> .jquery 获取 id ,但是id 里面不能有. 这个符号    ,都是坑啊,

最新文章

  1. ASP.NET远程连接数据库SQL server
  2. 什么是分布式_终于搞懂分布式锁是什么了
  3. Ionic介绍以及搭建环境、新建和运行项目
  4. 详解css样式处理的优先级
  5. elasticsearch-1.3.0 之索引代码粗略梳理
  6. C#------如何判断输入的是否为纯数字
  7. 【C++基础】模板基础与函数模板
  8. Kendo UI开发教程:Kendo UI模板概述
  9. sitck-breaking折棍法理解
  10. Python中常用的一些库
  11. 51nod 1133 不重叠的线段
  12. 数据结构课设之航空订票系统(Java)下载链接在文末
  13. Appium:ios自动化环境搭建
  14. 希尔伯特矩阵(Hilbert matrix)
  15. VSCODE + 搜狗输入法,文字突然变成了繁体字,为什么?
  16. android全屏状态栏是黑色,解决DialogFragment全屏时状态栏变黑
  17. Python实现视频转代码舞
  18. 微信小程序如何发布?发布流程怎么样
  19. R语言在线地图神器:Leaflet for R包(二)基础底图
  20. _stricmp与stricmp的关系

热门文章

  1. RadioButtonList控件添加样式
  2. RadioButtonList的一些问题
  3. 计算机运算器4个部件,第4章 计算机中的运算器部件(2).ppt
  4. 为什么UDDI会成功?即使缄默无闻
  5. 关于鲁大师安装后篡改chrome主页的问题
  6. TYPE-C接口简介
  7. 要实践不要忽悠的“云计算应用创新推进大会”
  8. 模拟停车场管理系统(c++,使用栈和队列)
  9. tinymce富文本实现可编辑和不可编辑状态
  10. 张量积和矩阵乘法的一个问题