从零开始的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 

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()
{
}

从零开始的ESP8266探索(13)-Arduino for esp8266特有API说明_第1张图片
可以看到在每次复位时读取了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

你可能感兴趣的:(ESP8266相关)