学习NodeMCU的低功耗休眠

大多数IOT应用是电池供电的,在电池电量一定的情况下(体积、环境等限制),耗电量决定了产品的寿命,决定了产品是否实用。本文主要目的是学习关于NodeMCU的休眠机制。

NodeMCU的API

https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en#nodedsleep

node.dsleep()

Description

Enter deep sleep mode, wake up when timed out.

Syntax

node.dsleep(us, option)

Note: This function can only be used in thecondition that esp8266 PIN32(RST) and PIN8(XPD_DCDC aka GPIO16) areconnected together. Using sleep(0) will set no wake up timer, connecta GPIO to pin RST, the chip will wake up by a falling-edge
on pinRST.

option=0, init data byte 108 is valuable;

option>0,init data byte 108 is valueless.

More details as follows:

0,RF_CAL or not after deep-sleep wake up, depends on init data byte108.

1, RF_CAL after deep-sleep wake up, there will belargecurrent.

2, no RF_CAL after deep-sleep wake up, there will only besmall current.

4, disable RF after deep-sleep wake up, just likemodem sleep, there will be the smallest current.

Parameters

  • us: number(Integer) or nil,sleep time in micro second. If us = 0, it will sleep forever. If us= nil, will not set sleep time.
  • option: number(Integer) or nil.If option = nil, it will use last alive setting as default option.

Returns

  • nil

Example

    --do nothing
    node.dsleep()
    --sleep μs
    node.dsleep(1000000)
    --set sleep option, then sleep μs
    node.dsleep(1000000, 4)
    --set sleep option only
    node.dsleep(nil,4)

NodeMCU源代码

https://github.com/nodemcu/nodemcu-firmware/blob/fa7cf87832fc9905df98f9435c149d40f314dee8/app/modules/node.c

static int node_deepsleep( lua_State* L)

{

s32 us, option;

//us = luaL_checkinteger( L, 1 );

// Set deleep option, skip if nil

if ( lua_isnumber(L, 2) )

{

option = lua_tointeger(L, 2);

if ( option < 0 || option >4)

return luaL_error( L, "wrongarg range" );

else

deep_sleep_set_option( option);

}

// Set deleep time, skip if nil

if ( lua_isnumber(L, 1) )

{

us = lua_tointeger(L, 1);

// if ( us <= 0 )

if ( us < 0 )

return luaL_error( L, "wrongarg range" );

else

system_deep_sleep( us );

}

return 0;

}

https://github.com/nodemcu/nodemcu-firmware/blob/84a9ab35a8eb9b4ae2229bba7b2626c2a285818d/include/user_interface.h

bool system_deep_sleep_set_option(uint8option);

void system_deep_sleep(uint32time_in_us);

ESP8266 Specifications

http://www.seeedstudio.com/document/pdf/ESP8266%20Specifications%28Chinese%29.pdf

10电源管理

芯片可以调成以下状态:

  • 关闭(OFF):CHIP_PD
    管脚处于低功率状态。RTC失效。所有寄存器被清空。
  • 深度 睡眠
    ( DEEP_SLEEP ) : RTC开着,芯片的其他部分都是关着的。RTC内部recovery
    memory 可保存基本的WiFi
    连接信息。
  • 睡眠(SLEEP):只有RTC
    在运行。晶体振荡器停止。任何部位唤醒(MAC、主机、RTC计时器、外部中Sleep断)将使唤醒整个芯片。
  • 唤醒(WAKEUP):在这种状态下,系统从睡眠状态下转为起动(PWR)状态。晶体振荡器和PLL
    均转为使能状态。
  • 开启状态(ON):高速时钟可以运行,并发送至各个被时钟控制寄存器使能的模块。各个模块,包括CPU
    在内,执行较低电平的时钟门控。系统运作时,可以通过WAITI
    指令关闭CPU
    内部时钟。

The following data are based on a 3.3V power supply, ambienttemperature 25C and use the internal regulator measured. [1] Allmeasurements are made in the absence of the SAW filter, the antennainterface is completed. [2] all transmit data based on 90% dutycycle,
continuous transmission mode in the measured.


Mode


Min


Typical


Max


Units


802.11b, CCK 1Mbps, POUT=+19.5dBm

 
215

 
mA


802.11b, CCK 11Mbps, POUT=+18.5dBm

 
197

 
mA


802.11g, OFDM 54Mbps, POUT=+16dBm

 
145

 
mA


802.11n, MCS7, POUT =+14dBm

 
135

 
mA


802.11b, packet size of 1024 bytes, -80dBm

 
60

 
mA


802.11b, packet size of 1024 bytes, -70dBm

 
60

 
mA


802.11b, packet size of 1024 bytes, -65dBm

 
62

 
mA


Standby

 
0.9

 
uA


Deep sleep

 
10

 
mA


Saving mode DTIM 1

 
1.2

 
mA


Saving mode DTIM 3

 
0.86

 
mA


Shutdown

 
0.5

 
uA

https://nurdspace.nl/ESP8266#Technical_Overview

其他资源

Low Power ESP8266 – Sleeping at 78 micro Amps

http://blog.csdn.net/coolwaterld/article/details/45365749

ESP8266 in deep sleep

http://blog.csdn.net/coolwaterld/article/details/45365841

Building a battery powered WiFi IoT Sensor with ESP8266, MS-5611(GY-63), nodemcu and MQTT

http://blog.csdn.net/coolwaterld/article/details/45366003

Designing An Ultra Low Power Sensor Solution With ESP8266

https://github.com/EspressifSystems/low_power_voltage_measurement/wiki

https://github.com/EspressifSystems/low_power_voltage_measurement

This is a project for ESP8266 for low power sensor applications.The chip powers on once every 1 minute to measure it‘s own powersupply, and sends the data to the server, once every 20 minutes. Ofcourse, you can configure the chip to do other things such
asmeasuring temperature or humidity, etc. The project is now based onEspressif‘s SDK version 1.0.1b. More details about the project can befound in the Wiki.

时间: 2024-11-07 14:55:42

学习NodeMCU的低功耗休眠的相关文章

学习NodeMCU的GPIO

本文研究NodeMCU的GPIO的用法,主要是IO的电压范围和电流范围 NodeMCU GPIO与ESP8266的映射 https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en GPIONEW TABLE ( Build 20141219 and later) new_gpio_map IO index ESP8266 pin IO index ESP8266 pin 0 [*] GPIO16 7 GPIO13 1 GPIO4

蓝牙学习之旅——低功耗蓝牙之广播报文CONNECT_REQ

(一) CONNECT_REQ净荷如下: InitA(Initiator Address)域是public(TxAdd=0)还是random(TxAdd=1)由净荷头中TxAdd域决定. AdvA(Advertiser Address)域是public(RxAdd=0)还是random(RxAdd=1)由净荷头中RxAdd域决定. (二) 上图是一个完整的CONNECT_REQ报文,被解析后如下图所示 (1)Initiator Address:0x870533001177(dongle的地址)

Android 系统设置中显示设置之休眠和屏保设置篇

Android 系统设置中显示设置之休眠和屏保设置篇 在上一篇中我们学习了Android系统设置中字体大小和屏幕旋转设置基本内容,在这一篇中我们继续学习显示设置中的休眠和屏保设置. 1.休眠设置 首先我们来看一下休眠设置在界面中的定义: 1 <ListPreference 2 android:key="screen_timeout" 3 android:title="@string/screen_timeout" 4 android:summary="

(数字IC)低功耗设计入门(二)——功耗的分析

前面学习了进行低功耗的目的个功耗的构成,今天就来分享一下功耗的分析.由于是面向数字IC前端设计的学习,所以这里的功耗分析是基于DC中的power compiler工具:更精确的功耗分析可以采用PT,关于PT的功耗分析可以查阅其他资料,这里不涉及使用PT的进行功耗分析. (1)功耗分析与流程概述 上一个小节中讲解了功耗的构成,并且结合工艺库进行简要地介绍了功耗的计算.但是实际上,我们根本不可能人工地计算实际的大规模集成电路的功耗,我们往往借助EDA工具帮我们分析电路的功耗.这里我们就介绍一下EDA

STM32CubeMX新建工程+基本IO配置过程

Ⅰ.写在前面 学习本文之前可以查看我前面的文章: STM32CubeMX介绍.下载与安装 STM32CubeMX使用方法及功能介绍 本文接着上一篇文章结合基本IO配置实例,讲述关于STM32CubeMX新建工程的过程.最终通过STM32CubeMX工具配置完成一个驱动IO(点亮LED)的软件工程,也就是通过STM32CubeMX配置完成之后,打开工程直接下载就能点亮LED的工程. 本文使用Keil(MDK-ARM) V5软件为编译环境,如果你没有安装最新版本的软件,请安装最新版本的软件,具体过程

Android 系统设置中显示设置之亮度调节篇

在上一篇博客中,我们学习了显示设置中休眠设置和屏保设置的基本内容.在这一篇中我们来学习设备亮度的调节,首先还是学习在DisplaySettings.xml增加了一个叫做BrightnessPreference的preference的选项用来控制亮度调节. 步骤1:当用户点击BrightnessPreference的时候,由BrightnessPreference做对应的处理(注:其实是发送了一个广播) 1 public class BrightnessPreference extends Pre

ARM手记之新唐M0系列

NUC1xx系列是32位的内嵌ARM Cortex-M0核的微控制器 ,适用于工业控制和需要丰富的通信接口的应用领域.ARM Cortex-M0 内核最高运行50MHz.宽电压工作范围 由2.5V 至 5.5V. 1.ARM  Cortex-M0 内核 Cortex-M0处理器是32位多级可配置的RISC处理器.它有AMBA AHB-Lite接口和嵌套向量中断控制器(NVIC),具有可选的硬件调试功能,可以执行Thumb指令,并与其它Cortex-M系列兼容.支持两种模式:Thread模式和Ha

1.6《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——小结

本章节学过的重要命令整理,见下表Table 2. Command Description Example echo <string> 向屏幕输出字符串 $ echo hello man <command> 显示命令手册页 $ man echo ?C 跳出窘境 $ tail^C ?A 移至该命令行开始 ?E 移至该命令行末尾 ?U 删除一行命令 重新输入 $ tail^C Option-click 将光标移至点击位置 Up & down arrow 滚动查看前面的命令 cle

【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠

碰撞与休眠 上一篇笔记说过,当给予游戏对象刚体这个组件以后,那么这个组件将存在碰撞的可能性.一旦刚体开始运动,那么系统方法便会监视刚体的碰撞状态.一般刚体的碰撞分为三种:进入碰撞,碰撞中,和碰撞结束.关于休眠可以理解成为让游戏对象变成静止状态.如果给某个游戏对象休眠的状态,那么这个物体将立马静止,不再运动. 碰撞 首先学习下碰撞几个重要的方法: OnCollisionEnter(  ):刚体开始接触的时候,立即调用. OnCollisionStay(  ):碰撞过程中,每帧都会调用此方法,直到撞