目录

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

简介

什么是超低功耗

超低功耗是相对于低功耗而言的。考虑到模块大部分应用场景:系统休眠后,依然需要隔一段时间进行数据收发,来上报设备的状态。所以传统的低功耗数据只具备一定的参考意义,实际业务场景下,并不能达到这个数值。超低功耗是针对【隔段时间收发数据】这一场景的特定优化,来降低产品的整体功耗。

特别说明:不管是进入低功耗还是超低功耗状态,都不会丢失服务器发来的数据。

能降低多少功耗

合宙Cat1 AT标准固件,在实网下测量的功耗数据如下:

【注:表中电流相关单位为ma】
LUAT 的功耗调试是参考 AT标准固件的结果。

从最后两行对比结果看,超低功耗模式下,心跳包保活场景功耗降低了一半以上。

注意:实际测量数据会受网络信号、是否已经注册上网、外围是否接了设备因素影响,如果差异比较大建议先断开外围设备,进入飞行模式对比一下数据。

什么时候用

超低功耗可用于大多数的数传业务场景。这些场景有一个共同的特点:需要传输数据的时候利用网络进行数据传输,传输完成后,设备进入心跳包保活状态。超低功耗正是针对心跳保活功耗的优化来实现整体功耗的降低。典型产品场景有:云喇叭、监控摄像头、共享设备、远程控制等。

哪个版本才支持

Lua版本>=V3024

实现方法

主要命令

首先,打开进入低功耗休眠模式,让设备空闲状态下进入低功耗状态;其次,通过AT命令ATRTIME打开超低功耗模式。
LUAT 开机注册上网络后运行 下面两条语句 (语句无先后顺序,一般成对使用)
ril.request(“AT+WAKETIM=2”)
ril.request("AT
RTIME=2")

AT+WAKETIM=< s >

参数 定义 取值 对取值的说明
s 在IDL状态下等待多长时间进入休眠状态 0~100 单位:秒,0表示关闭。

在 IDLE 状态下(无 AT,无短信,无通话且 AP_WAKEUP_MODULE 为高的情况下) 等待多长时间进入睡眠状态

AT*RTIME=< n >

参数 定义 取值 对取值的说明
n 在数传模式下等待多长时间进入休眠状态 0~20 单位:秒,0表示关闭。

信号正常情况下,值越短功耗就越低,建议设置为2。如果实际使用环境信号比较差,数据收发经常出现重传延迟,那这个值就需要改大。

示例

实现原理

首先, 模块做数据通信时功耗是很高的(80-120mA区间), 不做数据传输,仅仅保持一个SOCKET 连接本身并不怎么耗电,只有连接是通的,才能保证及时收到服务器下发的指令。
如果SOCKET连接超过10分钟(部分地区5分钟就不稳定了)没有任何数据传输,这个连接就会被网络回收,导致连接断开;为了避免这个情况的发生,就需要心跳包来维持连接在线。

两种心跳包

第一种是TCP协议栈的保活功能
它在应用层是看不见数据交互的:参考 https://doc.openluat.com/wiki/21?wiki_page_id=2256 中的 socketcore.sock_setopt() 这种方式由于用的少,在LUAT LIB 中没有封装进去,知道有这个方法就好了。

第二种是应用层保活功能,这种保活也有两种用法
A 固定周期保活
不管当前连接是否有数据在传输,间隔时间到了,就会向服务器发送心跳包;目的是 保活 + 同步。 这种场景有可能用在一些对心跳包周期有严格要求的业务中。
B. 网络通信TIMEOUT 保活
如果当前链接上有任意数据的收发,下次心跳就等指定时间之后再发出,目的是保活 +省电。这种场景应用较多,目前LUAT 的示例TCP、MQTT 默认都是这种方式设计的。
上面 AB 两种选项根据服务器的心跳要求来设计,各有用途

实现代码

在实现TCP 长连接之前,有几个参数需要做交代:

  1. 服务器IP和端口,以及准备工作
bool flag_conned=false --服务器是否已连接
local tip,  tport  = "106.13.6.X", "6640"
--向TCP服务端发送普通数据或心跳数据
function send_tcp_request(pdata)sys.publish("T_SOCKET_SEND_DATA",pdata)
end
  1. 参与测试的串口收发代码(并非必需,这里是为了测试才加上的),用户可以把串口1和服务器之间通过TCP 做透传
local UART1_ID, recvQueue = 1, {}
local uartimeout, recvReady,RECV_MAXCNT = 2000, "UART_RECV_ID",1024---这里使用uart1 连接电脑来和服务器进行数据交互
local function uart1_write(data)for i = 1, #data, 1460 douart.write(UART1_ID, data:sub(i, i + 1460 - 1))end
end
---配置串口的参数
uart.setup(UART1_ID, 115200, 8, uart.PAR_NONE, uart.STOP_1)
---通过注册回调函数来收串口数据
uart.on(UART1_ID, "receive", function(uid)local str_recv = uart.read(uid, RECV_MAXCNT)log.info("uart recv <---------", str_recv)send_tcp_request( str_recv)uart1_write("OK\r\n")
end)
  1. TCP 工作线程
sys.taskInit(function()local r, s, plocal result,  unProcData=false,""while true dolocal count = 0flag_conned=falsewhile not socket.isReady() do--等联网count = count + 1log.info("check net",count)sys.wait(1000)if count > 60 then  --如果太长时间连不上,则进入飞行模式重连(属小概率事件)net.switchFly(true)sys.wait(5000)net.switchFly(false)count = 0endendlog.info("+++++++++++++++ socket ready+++++++++++++++")-- 找到网络后发出下面两个指令,优化休眠。ril.request("AT+WAKETIM=1\r\n")sys.timerStart(function() ril.request("AT*RTIME=2\r\n")end,1000)local c = socket.tcp()if c:connect(tip, tport) thenflag_conned=true---每次重新连接TCP服务器都要做一次登录操作while true dolocal r, s, p = c:recv(120000, "T_SOCKET_SEND_DATA")if r thenif  s and  #s >0 then--假定用户用串口1 和TCP 进行透传,则把从服务器收到的内容转发到串口1uart1_write(s)endelseif s == "T_SOCKET_SEND_DATA" thenlog.info("socket send----->", p)if not c:send(p,10) then break endelseif s == "timeout" then--注意#B,如果是网络通信TIMEOUT 保活,这里可以发送保活数据包--send_tcp_request("heartdata")elselog.info("loop exit r,s,p",r,s,p)breakendendendflag_conned=falser,s,p = nil,nil,nilc:close()link.shut()end
end)
  1. 如果是固定周期保活的,则TCP 工作线程中的 timout (–注意#B)就不需要发送心跳了,而是开一个循环定时器,如下 120秒上报一次心跳:
sys.timerLoopStart(function() if flag_conned thensend_tcp_request("heartdata")end
end, 12000)

常见问题

1,在进行CTA/GCF等测试认证的时候需要关闭该功能。
2,如果心跳包比较频繁,比如10秒一次,那就不建议开启这个功能,极端情况下可能会导致设备断网。
3,如果数传是基于UDP这种非可靠传输,打开这个功能后,丢包概率会变大。

4 LUAT 的底包在应用层不做任何休眠调度时,默认是启用休眠的。休眠会让部分外设停止工作,比如彩屏的SPI ,CAT1的串口2 和串口3 等,如果要对外设进行控制,建议主动唤醒模块 pm.wake(“flagxxx”), 当需要进入休眠了,就调用 pm.sleep(“flagxxx”), 应用逻辑上,要这两个操作是成对的。
5.关于休眠的测量,建议使用高精度的电流测试仪器,测试条件定义为连上服务器后首次电流数字持续跌落 到几个毫安的时候开始, 测量时间越长平均功耗越准确,总测量时长最少要超过半小时。

相关资料以及购买链接

SOCKETAPI说明
源代码 : JLF_TEST.lua

相关开发板购买链接

Air724UG开发板
Air724 开发板使用说明

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

  1. Luat模块应用手册-示例-Luat DEMO-长连接超低功耗方案

    如何用开发板实现 低功耗长连接 功能 目录名称 如何用开发板实现 低功耗长连接 功能 简介 材料准备 步骤 实现代码 常见问题 相关资料以及购买链接 简介 socket是物联网中最常用的功能,本文介绍 ...

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

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

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

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

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

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

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

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

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

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

  7. Luat模块应用手册-指南-luat二次开发教程-功能开发教程-HTTP

    关键词:HTTP,POST,GET 目录 http 简介 API说明 实现流程 示例 执行HTTP请求的回调函数 HTTP请求函数 常见问题 是否支持HTTPS 为什么频繁请求会失败 为什么POST ...

  8. 二.office-Excel 2010 办公常用功能操作教程

    一.Excel 常用技能的说明目录. 1.数据的自动填充方式. 2.输入框中下拉选择框数据的绑定 3.简单的公式计算. 4.超链接的创建. 5.工作簿的保护. 二.说明目录的详细操作. 1.数据的自动 ...

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

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

最新文章

  1. POJ 3150 循环矩阵的应用
  2. sublime text 使用笔记
  3. 数据中心柴油发电机组功率有哪几种?
  4. 信息系统项目管理师 案例1
  5. c++ 重载 重写_关于C/C++中的++i和i++实现机制的探讨
  6. C++之map的前后遍历
  7. 计算机检测维修与数据恢复课件,2017年全国职业院校技能大赛中职组“计算机检测维修与数据恢复”赛项说明会ppt课件.ppt...
  8. 编程体系结构(08):Spring.Mvc.Boot框架
  9. MATLAB中disp的用法
  10. php与mysql网页实例,php与mysql 实例
  11. 第六章 实验报告(函数与宏定义)
  12. 每次打印只能打打印一页
  13. Win7 64位系统下Auto CAD 2010注册激活,出现警告:Make sure you can write to current directory...
  14. 三四线城市的O2O之路在哪
  15. 怎么添加校园邮箱到Outlook?
  16. python贪吃蛇报告_python实现贪吃蛇游戏
  17. python掷骰子实验报告_python掷骰子游戏
  18. ios点击推送闪退_iOS 13.4 Beta 4 发布,闪退问题修复!
  19. 淘淘商城---8.7
  20. mysql 修改 root 密码

热门文章

  1. 数据结构之B树、B+树、B*树
  2. 高级软件工程师必备的五大技能
  3. part1:企业微信发送消息API调试
  4. 关于UEFI引导的理解
  5. 数模算法 — 蒙特卡罗算法及Matlab案例
  6. 金蝶K3 库存收发汇总
  7. 如何深入理解php中的值传递和引用传递
  8. 更改aspx页面编码格式
  9. ios Symbol(s) not found for architecture arm64
  10. python的pyecharts(群图乱舞)可视化神器