隨著物聯(lián)網(wǎng)革命每天都在蓬勃發(fā)展,連接設(shè)備的數(shù)量正在迅速增加。將來(lái),多數(shù)設(shè)備將實(shí)現(xiàn)互連并實(shí)時(shí)通信。這些設(shè)備面臨的其中一個(gè)問(wèn)題就是功耗。此功耗因數(shù)是任何物聯(lián)網(wǎng)設(shè)備和物聯(lián)網(wǎng)項(xiàng)目的關(guān)鍵和決定性因素之一。
我們知道ESP8266是搭建任何物聯(lián)網(wǎng)項(xiàng)目最受歡迎的模塊之一,因此在本文中我們將學(xué)習(xí)如何在物聯(lián)網(wǎng)應(yīng)用中使用ESP8266時(shí)降低功耗。本文中,我們以15秒的間隔將LM35溫度傳感器數(shù)據(jù)上傳到ThingSpeak云,在這15秒內(nèi),ESP8266將處于深度睡眠(Deep Sleep)模式以降低功耗。
最小化功耗的幾種不同方法
有幾種方法可以優(yōu)化嵌入式和物聯(lián)網(wǎng)設(shè)備的功耗。優(yōu)化可以在硬件和軟件上完成。有時(shí)我們無(wú)法優(yōu)化硬件組件以降低功耗,但我們肯定可以通過(guò)更改和優(yōu)化代碼指令和功能在軟件方面實(shí)現(xiàn)。不僅如此,開發(fā)人員還可以修改時(shí)鐘頻率以降低微控制器的功耗。
我們可以編寫固件,以便在沒(méi)有數(shù)據(jù)交換時(shí)使硬件進(jìn)入休眠狀態(tài),并在特定時(shí)間間隔內(nèi)執(zhí)行定義的任務(wù)。在休眠模式下,連接的硬件消耗的電量非常少,因此電池可以持續(xù)很長(zhǎng)時(shí)間。
ESP8266模塊是使用最廣泛的Wi-Fi模塊,功能強(qiáng)大,具有不同的功耗模式,包括睡眠模式,這些模式可以通過(guò)硬件和軟件的一些修改來(lái)訪問(wèn)。要了解有關(guān)ESP8266的更多信息,您可以使用ESP826 Wi-Fi模塊查看論壇中其他一些基于物聯(lián)網(wǎng)的項(xiàng)目,其中一些列表如下:
●? ??Atmega16微控制器連接ESP8266 NodeMCU實(shí)現(xiàn)發(fā)送電子郵件
●? ??使用ESP8266和Arduino的基于物聯(lián)網(wǎng)的患者監(jiān)護(hù)系統(tǒng)
●? ??如何使用Arduino、ESP8266和氣體傳感器制作物聯(lián)網(wǎng)煙霧探測(cè)系統(tǒng)
本文中,我們將介紹ESP8266中可用的一些不同睡眠模式,并通過(guò)使用深度睡眠模式定期向Thingspeak服務(wù)器發(fā)送溫度數(shù)據(jù)來(lái)演示這些睡眠模式。
需要的組件
●? ? ESP8266 Wi-Fi模塊
●? ? LM35溫度傳感器
●? ? 跳線
ESP8266中的睡眠模式類型
ESP8266模塊可以在以下模式運(yùn)行:
1.? ?活動(dòng)模式:在此模式下,整個(gè)芯片上電,芯片可以接收、傳輸數(shù)據(jù)。顯然,這是耗電量最大的模式。
2.? ?調(diào)制解調(diào)器睡眠模式:在此模式下,CPU可以運(yùn)行,但禁用Wi-Fi無(wú)線電。此模式可用于需要CPU工作的應(yīng)用程序,如PWM。它使Wi-Fi調(diào)制解調(diào)器電路在與Wi-Fi AP(接入點(diǎn))連接時(shí)關(guān)閉,無(wú)數(shù)據(jù)傳輸以優(yōu)化功耗。
3.? ?輕度睡模式:在此模式下,CPU和所有外圍設(shè)備都暫停。任何喚醒(如外部中斷)都會(huì)喚醒芯片。在沒(méi)有數(shù)據(jù)傳輸?shù)那闆r下,可以關(guān)閉Wi-Fi調(diào)制解調(diào)器電路并暫停CPU以節(jié)省功耗。
4.? ?深度睡眠模式:在此模式下,只有RTC功能正常,芯片的所有其他組件都斷電。在長(zhǎng)時(shí)間間隔后傳輸數(shù)據(jù)的情況下,此模式非常有用。
ESP8266中的深度睡眠模式
當(dāng)某些功能關(guān)閉時(shí),需要ESP8266模塊運(yùn)行時(shí),調(diào)制解調(diào)器睡眠模式和輕度睡眠模式非常有用。但如果您需要一些更高的功耗控制,那么請(qǐng)選擇深度睡眠模式??偲骄?a href="http://www.wenjunhu.com/tags/電流/" target="_blank">電流小于1mA。在2.5V時(shí),電流僅需20μA。
使用深度睡眠模式的步驟:
1.? ? 將模塊與Wi-Fi AP連接
2.? ? 執(zhí)行讀取傳感器值,發(fā)布MQTT消息等任務(wù)。
3.? ? 根據(jù)定義的微秒數(shù)睡眠一段時(shí)間
4.? ? 再次重復(fù)上述過(guò)程
睡眠時(shí)間以微秒為單位。根據(jù)ESP8266 SDK,您只能睡眠?4,294,967,295?μs,大約71分鐘。
設(shè)置ESP8266模塊:
將ESP8266的RST引腳與GPIO 16連接,即D0引腳。 GPIO 16是具有WAKE功能的重要引腳。
將LM35溫度傳感器與NodeMCU的A0引腳相連。
當(dāng)ESP模塊的RST引腳上為高電平時(shí),它處于運(yùn)行狀態(tài)。一旦在RST引腳上接收到LOW信號(hào),ESP就會(huì)重新啟動(dòng)。
使用深度睡眠模式設(shè)置定時(shí)器,一旦定時(shí)器結(jié)束,D0引腳將低電平信號(hào)發(fā)送到RST引腳,模塊將通過(guò)重新啟動(dòng)來(lái)喚醒。
現(xiàn)在,硬件已準(zhǔn)備就緒且配置良好。溫度讀數(shù)將發(fā)送到Thingspeak服務(wù)器上。為此,請(qǐng)?jiān)趖hingspeak.com上創(chuàng)建一個(gè)帳戶,并通過(guò)以下步驟創(chuàng)建一個(gè)頻道。
現(xiàn)在,復(fù)制Write API密鑰。該密鑰將在ESP代碼中使用。
ESP8266深度睡眠模式編程
我們將使用Arduino IDE編程ESP8266模塊,這非常容易實(shí)現(xiàn)。確保已安裝所有ESP8266開發(fā)板的文件。
首先包括所需的所有重要庫(kù)。
#include
一旦包含所有庫(kù),就可以使用相關(guān)的函數(shù),然后分配API寫密鑰、配置您的Wi-Fi名稱和密碼。然后聲明所有變量以供進(jìn)一步使用存儲(chǔ)數(shù)據(jù)的位置。
String apiWritekey = "*************"; // replace with your THINGSPEAK WRITEAPI key here
char ssid[] = "******"; // your wifi SSID name
char password[] = "******" ;// wifi pasword
現(xiàn)在,使用wifi.begin()函數(shù)創(chuàng)建一個(gè)連接模塊和Wi-Fi網(wǎng)絡(luò)的函數(shù),然后while循環(huán)持續(xù)檢查WIFI狀態(tài),直到模塊連接到Wi-Fi。
void connect1() {
WiFi.disconnect();
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
創(chuàng)建另一個(gè)函數(shù)將數(shù)據(jù)發(fā)送到thingpeak服務(wù)器。這里將發(fā)送一個(gè)字符串,其中包含API寫密鑰、字段編號(hào)和必須發(fā)送的數(shù)據(jù)。然后使用client.print()函數(shù)發(fā)送此字符串。
void data() {
if (client.connect(server,80))
{??
String tsData = apiWritekey;
tsData +="&field1=";
tsData += String(tempF);
tsData += " ";
client.print("POST /update HTTP/1.1 ");
client.print("Host: api.thingspeak.com ");
調(diào)用connect1函數(shù),該函數(shù)將調(diào)用函數(shù)連接Wi-Fi,然后讀取溫度讀數(shù)并將其轉(zhuǎn)換為攝氏溫度。
void setup() {
Serial.begin(115200);
Serial.println("device is in Wake up mode");
connect1();
float volts=(value/1024.0)*5.0;? ?? ?
tempC = volts*100.0;? ?
現(xiàn)在,調(diào)用data()函數(shù)向thingpeak云上傳數(shù)據(jù)。最后,調(diào)用的重要函數(shù)是ESP.deepSleep();該函數(shù)將使模塊在定義的時(shí)間間隔內(nèi)休眠,該時(shí)間間隔以微秒為單位。
data();
Serial.println("deep sleep for 15 seconds");
ESP.deepSleep(15e6);
循環(huán)函數(shù)將保持為空,因?yàn)樗腥蝿?wù)必須執(zhí)行一次,然后在定義的時(shí)間間隔后復(fù)位模塊。
在本文的末尾處給出了完整代碼。上傳代碼到ESP8266模塊中。在上傳程序之前移除RST和D0連接線,否則會(huì)出錯(cuò)。
在ESP8266中測(cè)試深度睡眠模式
上傳程序后,您將看到溫度讀數(shù)每15秒后上傳到ThingSpeak云,然后模塊進(jìn)入深度睡眠模式。
以上就是在ESP8266模塊中使用深度睡眠的全部?jī)?nèi)容。深度睡眠是非常重要的功能,它已被包含在大多數(shù)設(shè)備中。
編輯:hfy
評(píng)論
查看更多