从零开始的ESP8266探索(13)-Arduino for esp8266特有API说明


文章目录
目的
特有API说明
睡眠模式及系统软复位
RTC存储区使用
模块基本信息读取
电源电压测量
总结
目的
本文介绍了Arduino for esp8266中特有API说明

特有API说明
睡眠模式及系统软复位
使用ESP.deepSleep(microseconds, mode)可以使ESP8266进入睡眠模式,其中microseconds为睡眠时间,mode为睡眠唤醒后工作模式,参数如下:

WAKE_RF_DEFAULT : do or not do the radio calibration depending on the init byte 108. 做或不做无线电校准依赖于init字节108;
WAKE_RFCAL : do the radio calibration every time.每次都要进行无线电校准;
WAKE_NO_RFCAL : do NOT the radio calibration on wake up.不要在醒来时使用无线电校准;
WAKE_RF_DISABLED : on wake up DISABLE the modem. So for example I can’t connect the esp to wifi.在醒来时禁用调制解调器,例如,我无法将esp连接到wifi;
使用ESP.deepSleepInstant(microseconds, mode)同样可以进入睡眠,但该方法会不等待系统关闭wifi直接进入休眠;

使用睡眠模式需要将GPIO16连接到RST管脚;
睡眠模式下约可以减少15mA电流(理论值);

关于睡眠模式可以参考下面链接:
http://www.yfrobot.com/thread-11978-1-1.html
https://www.cnblogs.com/Ray-liang/p/9787100.html

使用ESP.restart()可以软复位系统;

RTC存储区使用
使用ESP.rtcUserMemoryWrite(offset, &data, sizeof(data))可以向RTC存储区写数据;
使用ESP.rtcUserMemoryRead(offset, &data, sizeof(data))可以从RTC存储区读数据;
RTC存储区共支持128个4字节的数据(即总共可存储512字节内容),地址offset取值为0 ~ 127;

RTC存储区在系统复位时(非重新上电及固件上传)数据保持不变,可以结合睡眠模式来开发低功耗产品,可以参考下面代码及运行结果:

#include <ESP8266WiFi.h>

uint32_t count = 0;

void setup()
{
//波特率74880是ESP8266上电时打印信息的波特率
Serial.begin(74880);
Serial.println();

//该方法执行后可以看到ESP8266模块建立的无线网络
WiFi.softAP("ESP8266DeepSleepTestAP");
delay(30 * 1000);

//读取RTC用户存储区数据
ESP.rtcUserMemoryRead(0, &count, sizeof(count));
Serial.print("count = ");
Serial.println(count);
count++;
//将新数据写入RTC用户存储区数据
ESP.rtcUserMemoryWrite(0, &count, sizeof(count));

//使用该方法后所设置时间内将无法看到ESP8266模块建立的无线网络
//在时间到期后芯片将复位
ESP.deepSleep(30 * 1000 * 1000);

//功能同ESP.deepSleep(microseconds, mode),但该方法会不等待系统关闭wifi直接进入休眠
//ESP.deepSleepInstant(microseconds, mode)
}

void loop()
{
}

 

 

可以看到在每次复位时读取了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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM