主题中讨论的其他器件:UNIFLASH
工具与软件:
大家好、我想在器件处于 LPDS 模式等睡眠模式下、使用 HTTP GET 和 POST 请求来唤醒器件、这可以吗?
我的主要目标是使器件保持睡眠状态并在特定时间段将其唤醒、获取数据并将其恢复到睡眠状态、最佳方法是什么?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
大家好、我想在器件处于 LPDS 模式等睡眠模式下、使用 HTTP GET 和 POST 请求来唤醒器件、这可以吗?
我的主要目标是使器件保持睡眠状态并在特定时间段将其唤醒、获取数据并将其恢复到睡眠状态、最佳方法是什么?
您好!
此特性基本上已实现、这意味着如果您连接到 AP 并且大部分时间处于 LPDS 状态、则器件只会在接收信标时唤醒、这是强制性的。 如果将数据包发送到器件(无论数据包是什么数据包)、器件将在下一个信标处唤醒、读取来自信标的 TIM、了解其有一个数据包待处理、然后将从 AP 轮询该数据包并返回 LPDS。
有一种称为 RX 滤波器的机制(请参阅 NWP 指南中的第11章)、允许设置一些模式和规则以进一步"播放"唤醒器件的内容、但实现起来更复杂、我不确定您是否需要它。
此致、
Shlomi
你(们)好
我将器件置于 LPDS mmod 中。 它在该模式下消耗的电流很低。 我希望使用 HTTP GET 在该模式下将其唤醒。
让我告诉你我的主要目的,你给我最正确的方法。 我将通过每天发送4-5次 http GET 请求来向器件发送数据。 我希望器件在其余时间处于睡眠状态。 这样、我的目标是将电池寿命延长到6-7个月。 为此、我想将它置于 LPDS 模式下睡眠、并使用 HTTP 查询将其唤醒、但我不明白这是否可行。 我可以对 GPIO 中断执行相同的操作、但无法实现、因为我需要无线解决方案。
我建议您通读以下概述 https://www.ti.com/lit/an/swra594a/swra594a.pdf
概括来说、共有两种模式:间歇性连接和始终保持连接。
保持在 LPDS 状态与始终连接模式相关、在这种模式下、器件大部分时间都处于 LPDS 状态、而器件为接收信标而唤醒(您甚至可以通过每隔几个 DTIM 唤醒一次来降低平均电流-请参阅本文档中的 LSI 模式)。
这种方法的主要优势在于可始终与 AP 保持连接、也就是说、尝试通过云进行通信时、延迟极低、无需执行很多操作即可唤醒器件、只需将数据发送给 AP、就能自动唤醒并获取由 AP 在信标上发出的信号。
Shlomi
每半小时一次是一个很长的时间、您可以进入完全关闭状态。 但在完全关闭状态下、您需要给器件上电(可能打开计时器)。
如果您希望避开它并保持与 AP 的连接、即使您唤醒每个信标(102.4mSec)、仍可在小于1mSec 的平均值下绘制、因此您应该没问题。
还有其他因素需要考虑、例如 Wi-Fi 保持活动数据包、TCP 保持活动、DHCP 更新、Wi-Fi 广播密钥交换等。
话虽如此、平均值上1mSec 和5mSec 之间的差距很大、因此我认为您有足够的裕度来保持始终连接模式。
您好;
首先、感谢您的快速响应。
我想确保我正确理解您。 我可以使用 LSI 方法将器件置于睡眠模式。 我可以通过 http get 请求将其唤醒、这是可以实现的、对吧?
根据你说的,我创建了一个类似下面的结构。
void configureDTIMAndListenInterval (void){
uint16_t listenInterval = 5;//调整为所需的信标间隔(例如5个信标)
int32_t status;
//配置监听间隔
status = sl_WlanPolicySet (SL_WLAN_POLICY_PM、SL_WLAN_LOW_POWER_POLICY、(uint8_t *)&listenInterval、sizeof (listenInterval));
如果(状态< 0){
Display_printf (display、0、0、"Failed to set Listen Interval:%d"、status);
其他{
Display_printf (display、0、0、"Listen Interval set successfully:%d"、listenInterval);
}
}
谢谢。
您好;
void configureDTIMAndListenInterval (void){
uint16_t listenInterval = 5;//
int32_t status;
//设置 DTIM 和监听间隔设置
STATUS = SL_WlanPolicySet (SL_WLAN_POLICY_PM、SL_WLAN_LONG_SLEEP_INTERVAL_POLICY、(uint8_t *)&listenInterval、sizeof (listenInterval));
如果(状态< 0){
Display_printf (display、0、0、"Listen Interval set failed:%d"、status);
其他{
Display_printf (display、0、0、"Listen Interval set successfully:%d"、listenInterval);
}
}当我按此设置时、我得到监听间隔无法设置错误。
谢谢。
void configureDTIMAndListenInterval (void){
int32_t status;
SlWlanPmPolicyParams_t PmPolicyParams;
memset (&PmPolicyParams、0、sizeof (SlWlanPmPolicyParams_t));
PmPolicyParams。 MaxSleepTimeMs=100;
// DTIM ve Listen Interval ayarlarını yap
状态= SL_WlanPolicySet (SL_WLAN_POLICY_PM、SL_WLAN_LONG_SLEEP_INTERVAL_POLICY、(uint8_t *)&PmPolicyParams、sizeof (PmPolicyParams));
如果(状态< 0){
Display_printf (display、0、0、"Listen Interval ayarlanamadı:%d"、status);
其他{
Display_printf (display、0、0、"Listen Interval başarıyla ayarlandı:%d"、PmPolicyParams. MaxSleepTimeMS);
}
}
我按这种方式设置、但器件不会进入睡眠模式。 有一个正常的30mA 电流值。 如果您愿意、我可以共享代码的其他部分、但可以确定器件没有进入睡眠状态。