ESP-specific_APIs_test
extern "C" {
#include <user_interface.h>
}
uint32_t count = 0;
ADC_MODE(ADC_VCC); //切换ADC模式
void setup()
{
//波特率74880是ESP8266上电时打印信息的波特率
Serial.begin(74880);
Serial.println();
//该方法执行后可以看到ESP8266模块建立的无线网络
//WiFi.softAP("ESP8266DeepSleepTestAP");
//delay(30 * 1000);
rst_info *rinfo;
rinfo = ESP.getResetInfoPtr();
Serial.println(String("ResetInfo.reason = ") + (*rinfo).reason);
Serial.print("ESP.getResetReason():");Serial.println(ESP.getResetReason());
//读取RTC用户存储区数据
Serial.println(ESP.getVcc()); //打印电源电压
ESP.rtcUserMemoryRead(0, &count, sizeof(count));
Serial.print("count = ");
Serial.println(count);
count++;
//将新数据写入RTC用户存储区数据
ESP.rtcUserMemoryWrite(0, &count, sizeof(count));
//From there I found all the values for rst_info.reason at https://github.com/devicehive/esp8266-f ... nterface.h . 0 = boot, 4 = soft reset, 5 = wake from deep sleep.
//enum rst_reason {
// REASON_DEFAULT_RST = 0,
// REASON_WDT_RST = 1,
// REASON_EXCEPTION_RST = 2,
// REASON_SOFT_WDT_RST = 3,
// REASON_SOFT_RESTART = 4,
// REASON_DEEP_SLEEP_AWAKE = 5,
// REASON_EXT_SYS_RST = 6
//}
if ((*rinfo).reason == REASON_DEEP_SLEEP_AWAKE) {
Serial.println("Woke from deep sleep, performing full reset") ;
ESP.restart() ;
}
//使用该方法后所设置时间内将无法看到ESP8266模块建立的无线网络
//在时间到期后芯片将复位
ESP.deepSleep(5 * 1000 * 1000);
//功能同ESP.deepSleep(microseconds, mode),但该方法会不等待系统关闭wifi直接进入休眠
//ESP.deepSleepInstant(microseconds, mode)
}
void loop()
{
}
/*
16:38:55.482 -> ets Jan 8 2013,rst cause:1, boot mode:(3,6)
16:38:55.482 ->
16:38:55.482 -> load 0x4010f000, len 3584, room 16
16:38:55.482 -> tail 0
16:38:55.482 -> chksum 0xb0
16:38:55.482 -> csum 0xb0
16:38:55.482 -> v2843a5ac
16:38:55.482 -> ~ld
16:38:55.574 ->
16:38:55.574 -> ResetInfo.reason = 0
16:38:55.574 -> ESP.getResetReason():Power On
16:38:55.574 -> 3438
16:38:55.574 -> count = 3572777379
16:39:00.632 ->
16:39:00.632 -> ets Jan 8 2013,rst cause:2, boot mode:(3,6)
16:39:00.632 ->
16:39:00.632 -> load 0x4010f000, len 3584, room 16
16:39:00.679 -> tail 0
16:39:00.679 -> chksum 0xb0
16:39:00.679 -> csum 0xb0
16:39:00.679 -> v2843a5ac
16:39:00.679 -> ~ld
16:39:00.726 ->
16:39:00.726 -> ResetInfo.reason = 5
16:39:00.726 -> ESP.getResetReason():Deep-Sleep Wake
16:39:00.726 -> 3440
16:39:00.726 -> count = 3572777380
16:39:00.726 -> Woke from deep sleep, performing full reset
16:39:00.820 -> @⸮R%dP⸮MT%⸮⸮w⸮@⸮Y)Q
16:39:00.820 -> ⸮O⸮
16:39:00.913 -> ResetInfo.reason = 4
16:39:00.913 -> ESP.getResetReason():Software/System restart
16:39:00.913 -> 3439
16:39:00.913 -> count = 3572777381
16:39:05.995 ->
16:39:05.995 -> ets Jan 8 2013,rst cause:2, boot mode:(3,6)
16:39:05.995 ->
16:39:05.995 -> load 0x4010f000, len 3584, room 16
16:39:05.995 -> tail 0
16:39:05.995 -> chksum 0xb0
16:39:05.995 -> csum 0xb0
16:39:05.995 -> v2843a5ac
16:39:05.995 -> ~ld
16:39:06.088 ->
16:39:06.088 -> ResetInfo.reason = 5
16:39:06.088 -> ESP.getResetReason():Deep-Sleep Wake
16:39:06.088 -> 3441
16:39:06.088 -> count = 3572777382
16:39:06.088 -> Woke from deep sleep, performing full reset
16:39:06.182 -> @⸮R%dP⸮MT%⸮⸮w⸮@⸮Y)Q
16:39:06.182 -> ⸮O⸮
16:39:06.229 -> ResetInfo.reason = 4
16:39:06.229 -> ESP.getResetReason():Software/System restart
16:39:06.229 -> 3440
16:39:06.229 -> count = 3572777383
16:39:11.291 ->
16:39:11.291 -> ets Jan 8 2013,rst cause:2, boot mode:(3,6)
16:39:11.291 ->
16:39:11.291 -> load 0x4010f000, len 3584, room 16
16:39:11.337 -> tail 0
16:39:11.337 -> chksum 0xb0
16:39:11.337 -> csum 0xb0
16:39:11.337 -> v2843a5ac
16:39:11.337 -> ~ld
16:39:11.384 ->
16:39:11.384 -> ResetInfo.reason = 5
16:39:11.384 -> ESP.getResetReason():Deep-Sleep Wake
16:39:11.384 -> 3439
16:39:11.384 -> count = 3572777384
16:39:11.384 -> Woke from deep sleep, performing full reset
16:39:11.477 -> @⸮R%dP⸮MT%⸮⸮w⸮@⸮Y)Q
16:39:11.477 -> ⸮O⸮
16:39:11.572 -> ResetInfo.reason = 4
16:39:11.572 -> ESP.getResetReason():Software/System restart
16:39:11.572 -> 3440
16:39:11.572 -> count = 3572777385
可以看到在每次复位时读取了RTC存储器中的数据,+1后重新写入,等待下次系统复位读取;
模块基本信息读取
ESP.getResetReason()获取一个上次表明复位原因的字符串;
ESP.getFreeHeap()返回空闲堆大小;
ESP.getHeapFragmentation()返回堆碎片度量(超过50%就对程序运行可能会有影响了);
ESP.getMaxFreeBlockSize()返回堆碎片的最大可分配RAM块;
ESP.getChipId()以32位整数形式返回ESP8266芯片ID;
ESP.getCoreVersion()返回包含内核版本的字符串;
ESP.getSdkVersion()以字符形式返回SDK版本;
ESP.getCpuFreqMHz()以兆赫为单位返回无符号8位整数的CPU频率;
ESP.getSketchSize()以无符号32位整数返回当前固件大小;
ESP.getFreeSketchSpace()以无符号32位整数的形式返回可用空闲固件空间;
ESP.getSketchMD5()返回当前固件的MD5的小写字符串;
ESP.getFlashChipId()以32位整数返回闪存芯片ID;
ESP.getFlashChipSize()返回由sdk看到的闪存芯片大小(以字节为单位)(可能小于实际大小);
ESP.getFlashChipRealSize()根据闪存芯片ID返回实际芯片大小(以字节为单位);
ESP.getFlashChipSpeed()返回闪存芯片频率,单位为赫兹;
ESP.getCycleCount()以无符号32位返回自启动以来的CPU指令周期数,可以用于对时间要求非常严密的操作中;
电源电压测量
使用ESP.getVcc()可以打印模块电源电压(U(V) = ESP.getVcc()/1023),使用该功能时ADC针脚不能连接任何东西,并且需要在全局调用ADC_MODE(ADC_VCC);,这个功能怎么说呢……我感觉好像没啥用啊,还是看代码吧:
ADC_MODE(ADC_VCC); //切换ADC模式
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println(ESP.getVcc()); //打印电源电压
}
void loop()
{
}
总结
比较简单没什么好说的了。
参考链接:https://arduino-esp8266.readthedocs.io/en/latest/libraries.html#esp-specific-apis
————————————————
版权声明:本文为CSDN博主「Naisu_kun」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Naisu_kun/article/details/85338717
0 0
posted @ 2020-03-06 08:49 chenlife 阅读(889) 评论(0) 编辑 收藏 举报
*/

浙公网安备 33010602011771号