目的
本文介绍了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