4G模组PSM+超低功耗,手把手教你!

合宙4G-Cat.1模组支持三种功耗模式:

  • 常规模式

  • 低功耗模式

  • PSM+模式

用户可以根据不同的应用场景,按需选择不同的合宙4G-Cat.1模组功耗模式,以及三种功耗模式之间的相互转换。

合宙4G-Cat.1模组优异的低功耗表现,既有来自硬件设计的加持,也有软件协议算法的帮助。除实验室数据外,合宙更关注实网环境下的功耗表现,呈现给用户的效果更多以实网在线表现为准。

图片

图片

很多客户的实际应用场景,是不需要和服务器保持长连接的,一天甚至一周上传一两次数据,就能满足实际的项目需求了。

如果用合宙推荐的第二种低功耗模式,有些大材小用,针对这种情况——可以使用PSM+模式。

今天,带大家过过PSM+模式下——LuatOS开发代码。

一、主要硬件准备

这里大致说下需要准备的硬件条件:

  • 合宙Air780E全IO开发板一块:
    测试前需要将开发板上端USB下方的C2处ESD吹掉,要不会有大约20微安的漏电流。

  • 支持数据传输的USB线一根;

  • 一个可调电源:
    可调电源最好是能精确的捕捉到μA电流的电源,本次笔者使用的是合宙自研的Air9000P手持可调电源。

图片

二、PSM+超低功耗示例源码下载

本文示例中用到的代码,可以在这里gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/pm

需要用的代码在“780E_Lowpower”文件夹目录下:

图片

如果您手上是其他模组,如Air780EP或者Air780EPS,则可以查看Air780EP/Air780EPS对应仓库下的pm文件夹

三、PSM+超低功耗示例源码

接下来,我们开始进行PSM+超低功耗示例源码的大致讲解。

3.1  main.lua

LuatOS中,代码的起始位置是从main.lua第一行开始的,本文使用的是PSM+模式,所以打开第12行的注释,屏蔽第11行的代码。

图片

3.2  psm_plus.lua

1)设置服务器

进入psm_plus.lua可以看到:

图片

在这里,改成用户自己使用的服务器的IP/域名以及端口号;如果仅作测试,也可以使用合宙提供的测试服务器。

进入后选择打开TCP/UDP,根据用户服务器类型自行选择。

图片

打开后,如下图红框所示位置即是IP和端口号:

图片

local period = 3*60*60*1000 --3小时唤醒一次

这一句是唤醒时间的设置,时间设置唤醒的时间单位为ms。所以如果你有更长时间的唤醒需求,如一天唤醒一次,可以改动最前面的3为24。

特别提醒:
这个TCP服务器仅能当作测试来用,刷新一下网页或者你电脑网络有波动断网一下,就会断开,重新打开TCP端口就会变。

2)获取唤醒原因

图片

上面两句是获取了一下当前唤醒的原因,是正常开机,还是设置的定时器启动,或是串口/AGPIO唤醒。

3)testTask函数

直接拉到psm_plus.lua最后一行;其实上面所有的函数都是基于最后一行的task跑的:

图片

本句的意思是启动一个task,在task里运行第14行的testTask函数,并传入了d1Name这个变量,传入了netCB这个回调函数,以及给testTask传入了server_ip和server_port这两个参数。

接下来,我们看看testTask这个函数的前一小段:

图片

先判断了一下当前唤醒是什么原因唤醒的,并将对应原因赋值给了一个叫做txData的变量,并且判断了下是上电开机还是休眠唤醒。

如果是休眠唤醒,则主动退出飞行模式(因为模组在休眠的时候会进入飞行模式,减小因为可能的网络波动引起的功耗增大等异常)。

下面这一段就是与TCP服务器链接的全过程,如果链接失败会重连3次:

图片

图片

接下来这段配置了uart1的波特率为9600,方便外部串口设备从串口唤醒模组(注:9600状态下唤醒模组比较方便,如果是115200或其他波特率,可能需要发送多次数据才能走串口唤醒模组)。

如果不影响产品功能,需要将所有AGPIO在休眠状态下的高电平输出关闭,可以进一步节省耗电,比如本示例中对GPIO32的操作就是这一原因。

关于AGPIO和GPIO对应编号,如下图所示:

图片

图片

最后这段代码,启动了深度休眠也就是PSM+模式的定时器:

图片

后面的period参数,就是脚本最上面我们设置的定时休眠唤醒时间;后面进入飞行模式,是避免因为基站网络波动导致的异常功耗;然后,才真正进入了PSM+模式。如果进入不成功,15秒后会重启模组。

  • 如果是串口唤醒,那么服务器会收到”uart1 wakeup“的数据;

  • 如果是GPIO唤醒,那么服务器会收到"pad wakeup";

  • 如果是定时器唤醒,那么服务器会收到"timer wakeup";

  • 如果当前是上电开机去链接服务器,那么服务器会收到"normal wakeup"。

在没有数据发送的时候,模组实测待机功耗为下图的3μA:

图片

今天的内容就分享到这里啦,你学会了吗?

<think>嗯,用户遇到了4G模块PSM+模式下唤醒后无法发送消息的问题。我需要先理解PSM+模式的工作原理。根据引用[^1],PSM模式下模组会断开网络连接,进入深度休眠,直到预设唤醒时间或外部信号触发。唤醒后可能需要重新建立网络连接,所以可能用户没有正确重新连接。 接下来,用户可能在唤醒后立即尝试发送消息,但模块还没完成网络注册。引用提到唤醒后需要重新激活,所以步骤可能包括等待网络注册完成。检查AT命令是否正确发送,比如是否在唤醒后执行了必要的初始化步骤。 另外,可能APN配置在唤醒后丢失,需要重新配置。引用[^2]提到LuatOS开发代码,可能需要检查代码中是否有正确的APN设置和网络重连逻辑。此外,电源管理设置可能影响模块的响应速度,确保电源稳定,电压足够。 还有可能是固件版本过旧,存在PSM相关的bug,需要升级。或者运营商网络不支持快速重连,需要检查网络兼容性。引用[^3]提到程中的方法,可能需要参考具体代码实现,比如定时唤醒机制是否正确,是否在唤醒后调用了发送函数。 总结可能的解决步骤:检查唤醒后的网络状态,确保重新注册;验证AT命令流程是否正确;配置APN;检查电源;更新固件;测试不同网络环境。同时建议用户提供更多上下文,比如日志或代码片段,以便更精准定位问题。</think>### 4G模块PSM+模式唤醒后无法发送消息的解决方案 #### 1. 检查网络连接重建状态 在PSM+模式唤醒后,模块需重新建立与基站的连接。若未完成网络注册(EPS注册状态),发送消息会失败。建议: - 使用AT命令检查网络状态:`AT+CEREG?` 返回值为1表示已注册[^1] - 增加网络状态轮询机制,确认注册完成后再发送数据 - 典型等待时间:10-30秒(取决于网络环境) #### 2. 验证唤醒触发机制 不正确的唤醒方式会导致模块未完全激活: - 硬件唤醒:检查RTC定时唤醒电路设计,确保符合模组规格 - 软件唤醒:确认发送`AT+CFUN=1`命令后收到OK响应 - 异常情况处理:增加唤醒失败重试机制(建议最多3次) #### 3. 数据发送流程优化 ```python # 示例流程代码(需根据具体模组调整) def psm_wakeup_send(): wakeup_pin.high() # 触发硬件唤醒 time.sleep(5) # 等待模组启动 send_at_command("AT+CFUN=1") # 激活射频功能 while not check_network(): # 持续检查网络状态 time.sleep(2) send_message(data) # 执行数据发送 ``` #### 4. APN配置验证 PSM唤醒后可能丢失APN配置: - 重新发送APN设置命令:`AT+CGDCONT=1,"IP","your_APN"` - 检查PDP上下文激活状态:`AT+CGACT?` - 建议在每次唤醒流程中加入APN配置步骤 #### 5. 电源管理关键参数设置 ```markdown 重要AT命令配置: 1. 设置TAU周期:AT+CPSMS=1,,,"01000111" # 1小时周期 2. 激活时间配置:AT+CEDRXS=1,5,"0101" # 5秒激活窗口 3. 发送缓冲区设置:AT+QMTBS=1 # 启用透传模式 ``` #### 6. 常见故障排查表 | 现象 | 检测方法 | 解决方案 | |------|----------|----------| | 发送超时 | 检查信号强度(AT+CSQ) | 调整天线位置 | | 协议栈错误 | 查询错误代码(AT+CEER) | 重启模组 | | 数据丢包 | 抓取空口日志 | 优化发送间隔 | | 功耗异常 | 测量唤醒电流 | 检查外围电路 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值