文章目录
目的
特有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