侧边栏壁纸
  • 累计撰写 129 篇文章
  • 累计创建 16 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录
ESP32   

ESP32-芯片与系统信息获取

简介

本节主要是对于Esp.h文件的理解,在该头文件中主要是实现了对内核中的RAM资源的管理、片外SPI RAM管理、获取芯片的基本信息、Flash管理。

RAM资源的管理

其中分为片内与片外RAM的管理。

  //Internal RAM
  uint32_t getHeapSize(); //total heap size 全部的片内内存大小
  uint32_t getFreeHeap(); //available heap  可以内存大小
  uint32_t getMinFreeHeap(); //lowest level of free heap since boot
  uint32_t getMaxAllocHeap(); //largest block of heap that can be allocated at once

  //SPI RAM 外设需要自己设计
  uint32_t getPsramSize();
  uint32_t getFreePsram();
  uint32_t getMinFreePsram();
  uint32_t getMaxAllocPsram();

芯片的基本信息

获取芯片基本信息,包括了芯片的id物理地址、版本、运行频率等

uint8_t getChipRevision();
uint32_t getCpuFreqMHz(){ return getCpuFrequencyMhz(); }
inline uint32_t getCycleCount() __attribute__((always_inline));
const char * getSdkVersion();     
uint64_t getEfuseMac();

例子:

#include <Arduino.h>
 
void setup()
{
   Serial.begin(9600);
   Serial.println("");
}
 
uint64_t chipid;  
 
 void loop()
{
   chipid=ESP.getEfuseMac();//The chip ID is essentially its MAC address(length: 6 bytes).
   Serial.printf("ESP32 Chip ID = %04X",(uint16_t)(chipid>>32));//print High 2 bytes
   Serial.printf("%08X\n",(uint32_t)chipid);//print Low 4bytes.  
   Serial.printf("total heap size = %u\n",ESP.getHeapSize());
   Serial.printf("available heap = %u\n",ESP.getFreeHeap());
   Serial.printf("lowest level of free heap since boot = %u\n",ESP.getMinFreeHeap());
   Serial.printf("largest block of heap that can be allocated at once = %u\n",ESP.getMaxAllocHeap());
 
   Serial.printf("total Psram size = %u\n",ESP.getPsramSize());
   Serial.printf("available Psram = %u\n",ESP.getFreePsram());
   Serial.printf("lowest level of free Psram since boot = %u\n",ESP.getMinFreePsram());
   Serial.printf("largest block of Psram that can be allocated at once = %u\n",ESP.getMinFreePsram());
 
   Serial.printf("get Chip Revision = %u\n",ESP.getChipRevision());
   Serial.printf("getCpuFreqMHz = %u\n",ESP.getCpuFreqMHz());
   Serial.printf("get Cycle Count = %u\n",ESP.getCycleCount());
   Serial.printf("get SdkVersion = %s\n",ESP.getSdkVersion());
   
   delay(5000);
 }

睡眠模式

void deepSleep(uint32_t time_us);

调用后进入深度睡眠模式,深度睡眠时间过后,设备会自动醒来,在醒来时,设备调用深睡眠唤醒存根,然后继续加载应用程序。

调用这个函数相当于调用esp_deep_sleep_enable_timer_wakeup,然后调用esp_deep_sleep_start。

esp_deep_sleep不会优雅地关闭WiFi、BT和更高级别的协议连接。确保调用了相关的WiFi和BT栈函数来关闭任何连接,并对外设进行初始化。这些包括:esp_bluedroid_disable、esp_bt_controller_disable、esp_wifi_stop

此函数不返回。time_us:深度睡眠时间,单位:微秒

这是极为简单的睡眠调用,且只能是定时唤醒。后面将仔细研究ESP32的各种睡眠与唤醒:链接

#include <Arduino.h>

void setup(){
   Serial.begin(9600);
   delay(1000); 
   Serial.println("Going to sleep now\n")
   ESP.deepSleep(5000000); // 注时间意单位为:us
   Serial.println("This will never be printed\n"); 
 }
 
void loop(){
   // 这里不会调用
}
0

评论区