從零開始的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