目录

  • 功耗管理
    • 简介
    • 常用模块功耗指标
    • API说明
    • 3种工作模式:
      • 1. 全功能模式
      • 2. 休眠模式
      • 3. 最少功能模式
    • 实现流程
      • 全功能模式
      • 休眠模式
      • 最少功能模式
    • 示例
      • 全功能模式
      • 休眠模式
      • 最少功能模式
    • 常见问题
      • 飞行模式 和 超低功耗模式 哪个更省点?
      • 为什么模块无法进入休眠
      • 为什么串口1在休眠状态下也能正常收发数据
    • 相关资料以及购买链接

功耗管理

简介

Air724UG支持多种省电模式,通过进入不同的省电模式达到降低功耗的目的。
luat版本默认自动休眠控制,系统空闲会自动进入休眠。但是要进行串口,SPI,ADC,I2C操作时,需要调用pm.wake()主动唤醒。操作结束后,需要调用pm.sleep()重新进入自动休眠控制。
注意:
模块是否有进入睡眠模式,从外部电气信号或调试日志中无法体现,只能通过检测模块的消耗电流来判断。进入休眠后模块的电流会在1到2mA的底电流的基础上跳动。

常用模块功耗指标

  • 724u功耗
  • 720u功耗
  • 722u功耗
  • 820u功耗

API说明

API接口 描述
pm.wake(tag) 某个Lua应用唤醒系统
pm.sleep(tag) 某个Lua应用休眠系统
pm.isSleep(tag) 获取系统系统全局或某个Lua应用的休眠状态
net.switchFly(mode) 设置飞行模式

详细的API介绍见pm API章节

3种工作模式:

1. 全功能模式

一般的工作模式,CPU,时钟全速运行。

2. 休眠模式

CPU休眠,射频部分工作,周期进行寻呼,仅维持网络连接,能随时接收网络端的电话,短信等。功耗较低(具体功耗数据参考6.5章节),主要的省电模式。可以通过GPIO中断,内部计时器中断,网络消息,来电,短信等唤醒。

3. 最少功能模式

RF和SIM都关闭):CPU休眠,射频与SIM卡关闭,无法注册网络,无法接收网络端的任何信息。功耗最低

实现流程

目前的休眠处理有两种方式,
第一种是底层core内部,自动处理,例如tcp发送或者接收数据时,会自动唤醒,发送接收结束后,会自动休眠;这部分不用lua脚本控制、

第二种是lua脚本使用pm.sleep和pm.wake自行控制,例如,uart连接外围设备,uart接收数据前,要主动去pm.wake,这样才能保证前面接收的数据不出错,当不需要通信时,调用pm.sleep;如果有lcd的项目,也是同样道理

全功能模式

  • 模块启动后,如果网络端没有数据的接受或者发送,会自动休眠,在脚本中调用pm.wake(tag)使系统保持唤醒,不进入休眠,则是全功能模式

休眠模式

当模块开机后,网络没有进行数据发送、接收数据时,模块会自动进入休眠,下面的举例是使用lua脚本来控制休眠与唤醒

  • 使用pm.wake(tag)与pm.sleep(tag)来实现管理
  • 唤醒
    • 使用pm.wake(tag)来唤醒系统
  • 休眠
    • 使用pm.sleep(tag)来休眠系统
  • 休眠唤醒功能(pm)的原理可以按照如下方式理解
    有一个屋子,屋子里有个电灯,电灯是由电池来供电的,充一次电比较麻烦,所以为了省电,只有当有人需要用
到电灯时,才去打开它。晚上,屋子里进了一个人,说我要打开灯,于是灯亮了,后面接着进来了三个人,都说自己要打开灯。等了一会,他们中有一个人要走了,说:我要关掉灯,然后走了,但是这时候屋子里还有其他三个人需要用灯,
所以灯实际上并不会关掉,只有当屋子里所有的人都说要关掉灯,没人用到灯的时候,灯才会关掉。
  • 假设模块有两个应用

    • 第一个是使用SPI接了LCD屏,应用标记为"LCD"
      第二个是使用串口来传输数据,应用标记为"UART"
    • UART传输数据前需要让系统保持唤醒,使用pm.wake(“UART”)来使系统保持唤醒状态
      同时LCD屏需要显示数据,使用pm.wake(“LCD”)来保持系统唤醒
    • 当UART工作完毕后,使用pm.sleep(“UART”)来标记串口传输工作已经完毕,但此时LCD还处于工作状态,所以系统无法进行休眠。当LCD应用工作完毕调用pm.sleep(“LCD”)后,此时"UART"和"LCD"都工作完毕了,系统才会真正进入休眠
    • 更多应用同理
  • 假设模块有一个应用
    • 使用串口来传输数据,应用标记为"UART"
    • UART传输数据前需要让系统保持唤醒,使用pm.wake(“UART”)来使系统保持唤醒状态,当UART工作完毕后,使用pm.sleep(“UART”)来标记串口传输工作已经完毕,此时没有其他应用唤醒模块,系统可以真正地进行休眠

最少功能模式

系统休眠,并且模块进入飞行模式

  • 有两种实现的方法

    • 第一种:开机10秒后或开机20秒模块注册上网络后调用
      net.switchFly(true)使模块进入飞行模式,等待系统自动休眠后,进入最少功能模式

    • 第二种:待模块任务执行完毕,但不想让它关机时,调用
      pm.sleep(tag)与net.switchFly(true)使模块进入休眠并进入飞行模式

示例

这里是功耗管理demo的章节,请点我

全功能模式

  sys.taskInit(function()sys.wait(5000)--挂起五秒,等待模块开机pm.wake("WAKE")--模块开机后调用pm.wake(tag)(这里"WAKE"为tag),使系统保持唤醒状态end
)

休眠模式

sys.taskInit(function()--等待十秒,十秒后,保持系统唤醒sys.wait(8000)--两秒后打印当前"TEST"和全局脚本的休眠状态,true为休眠状态,false为唤醒状态sys.wait(2000)print("执行pm.wake(\"TEST\")之前\"TEST\"的休眠状态:",pm.isSleep("TEST"),"全局的休眠状态:",pm.isSleep())pm.wake("TEST")--两秒后打印当前"TEST"和全局脚本的休眠状态,true为休眠状态,false为唤醒状态sys.wait(2000)print("执行pm.wake(\"TEST\")后\"TEST\"的休眠状态:",pm.isSleep("TEST"),"全局的休眠状态:",pm.isSleep())local temp = 0--循环打印二十次,等待20秒后,进入休眠while temp < 20 doprint("我现在正在执行打印任务")sys.wait(1000)temp = temp + 1endprint("我休眠了")--调用接口使模块休眠pm.sleep("TEST")sys.wait(2000)print("执行pm.sleep(\"TEST\")后\"TEST\"的休眠状态:",pm.isSleep("TEST"),"全局的休眠状态:",pm.isSleep())end
)

最少功能模式

sys.taskInit(function()--等待10秒--刚开机就进入飞行模式可能会失败,所以开机后等待10s或注册上网络后再进入飞行模式sys.wait(10000)--进入飞行模式net.switchFly(true)--等待两秒sys.wait(2000)print("我休眠了")--调用接口使模块休眠pm.sleep("TEST")end
)

常见问题

飞行模式 和 超低功耗模式 哪个更省点?

飞行低,但退出飞行模式重新联网需要时间,飞行模式下,没法维持模块与服务器连接,根据实际业务情况选。
如果开关飞行频率过大,功耗也会增加。

为什么模块无法进入休眠

1. 查看模块是否插入USB,USB连接的状态下模块保持唤醒,无法休眠
2. 使用开发板和自己的板子烧录adc的demo进行对比,看模块是否能够进行休眠
3. 使用pm.isSleep()接口查询脚本休眠状态,看是否是调用了pm.wake(tag)后没有去调用pm.sleep(tag)
4. 屏蔽代码,看是由哪部分代码使模块无法休眠

为什么串口1在休眠状态下也能正常收发数据

uart1在core中做了特殊处理,可以实现休眠状态下接收数据不丢失

相关资料以及购买链接

Air724UG开发板购买链接
Air724 开发板使用说明

指南-Luat二次开发教程指南-功能开发教程-功耗管理相关推荐

  1. 开发指南专题二:JEECG微云快速开发平台JEECG框架初探

    开发指南专题二:JEECG微云快速开发平台JEECG框架初探 2.JEECG框架初探 2.1演示系统 打开浏览器输入JEECG演示环境地址:http://demo.jeecg.org:8090/可以看 ...

  2. Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述—— 隐鹤 / HelloWorld...

    Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述---- 隐鹤  /  HelloWorld 1. 引言 自本人第一篇博文"Excel阅读模式/单元格行列指示/聚光灯 ...

  3. NC65二开单据单据追溯功能开发

    NC65二开单据单据追溯功能开发 一.单据元数据字段增加字段 来源单据主键 来源单据类型 二.设置单据按钮&&修改单据类型 单据增加按钮 <bean id="linkQ ...

  4. Android开发 Camera2开发_1_拍照功能开发

    Android开发 Camera2开发_1_拍照功能开发 介绍 google已经在Android5.1之后取消了对Camera1的更新,转而提供了功能更加强大的Camera2.虽然新版本依然可以使用C ...

  5. 3D格式转换工具HOOPS Exchange最全技术指南(二):4大功能特征与典型使用场景

    什么是 HOOPS Exchange? HOOPS Exchange 是一组软件库,可以帮助开发人员在开发应用程序时读取和写入主流的 2D 和 3D 格式.HOOPS Exchange 支持 在主流的 ...

  6. 百度URL自动推送收录插件【土拨鼠网站日记管理(分析推送二合一)】推送功能配置教程

    推送功能配置教程(推送功能和网站日记分析功能可以单独分开始用,需要哪个功能就单独设置这个功能即可): 第一次使用推送功能需要在[工具设置]先生成缓存数据库和配置推送计划 初次设置: 自动爬取整站URL ...

  7. php微信自定义菜单开发,微信公众平台开发自定义菜单功能开发

    一.简介 微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能.开发者可利用该功能为公众账号的会话界面底部增加自定义菜单,用户点击菜单中的选项,可以调出相应的回复信息或网页链接.自 ...

  8. Luat模块应用手册-指南-Luat二次开发教程指南-功能开发教程-虚拟AT

    目录 简介 实现方法 示例 常见问题 相关资料以及购买链接 测试源码 相关开发板购买链接 简介 虚拟AT 也叫 VAT , 'V' 的英文就是 virtual 虚拟的意思; ,传统的AT 是上位机何下 ...

  9. Luat模块应用手册-指南-Luat二次开发教程指南-功能开发教程-长连接超低功耗方案

    目录 简介 什么是超低功耗 能降低多少功耗 什么时候用 哪个版本才支持 实现方法 主要命令 示例 实现原理 两种心跳包 实现代码 常见问题 相关资料以及购买链接 相关开发板购买链接 简介 什么是超低功 ...

最新文章

  1. DeviceToken 获取失败,原因:Error Domain=NSCocoaErrorDomain Code=3000 未找到应用程序的“aps-environment”的授权字符串......
  2. 用Go语言建立一个简单的区块链part4(1):交易(1)
  3. CMDB功能分析与实现方案
  4. ubuntu恢复系统_Ubuntu恢复菜单:揭开Linux系统恢复神秘面纱
  5. 微信小程序盲盒-可对接微信支付
  6. php获取网页内指定内容,PHP中获取某个网页或文件内容的方法
  7. 【ACWing】1123. 铲雪车
  8. CentOS7下docker服务无法启动的一般检查
  9. 函数在c99中隐式声明无效_C函数的隐式声明
  10. 在quartus II15.0中调用Modelsim进行时序仿真时出现Rerun the EDA Netlist Writer的原因
  11. Kafka Broker 基本架构二
  12. SVM(一):SVM入门
  13. R语言笔记——”org.Hs.eg.db“脱坑记录
  14. 大疆睿炽Tello EDU无人机python操控之二——使用Tello-Python-master示例程序控制Tello EDU无人机
  15. 二极管反向恢复时间和反向恢复电流
  16. 人工智能原理与算法2021年期末考试试题
  17. 软件过程开发方法(RUP、AP、MP、HP)
  18. [golang]通过github下载golang官方工具包
  19. unity制作交互视频/互动视频
  20. socket主要函数介绍

热门文章

  1. 计算机硬盘一只闪烁,硬盘灯一直亮,小编教你电脑硬盘指示灯一直亮怎么办
  2. 股票模拟交易日志(七)
  3. python从入门到入土表情包-Python自动生成表情包,python在手,从此斗图无敌手
  4. Shape对象和轮廓填充ShapeGeometry
  5. ASP完美优化(不断更新)
  6. 整理学习之深度迁移学习
  7. android高德地图截屏,高德地图-地图截屏
  8. 大数据信息资料采集:淘宝飞猪旅游酒店客栈旅社公寓数据信息采集
  9. mcu和服务器通讯协议pdf,Modbus DTU与服务端间的通讯协议
  10. linux画国旗程序,C语言也能画国旗