?合宙4G-Cat.1模組支持三種功耗模式:
- 常規(guī)模式
- 低功耗模式
- PSM+模式
用戶可以根據(jù)不同的應(yīng)用場景,按需選擇不同的合宙4G-Cat.1模組功耗模式,以及三種功耗模式之間的相互轉(zhuǎn)換。
合宙4G-Cat.1模組優(yōu)異的低功耗表現(xiàn),既有來自硬件設(shè)計的加持,也有軟件協(xié)議算法的幫助。除實驗室數(shù)據(jù)外, 合宙更關(guān)注實網(wǎng)環(huán)境下的功耗表現(xiàn), 呈現(xiàn)給用戶的效果更多以實網(wǎng)在線表現(xiàn)為準(zhǔn)。
?
?
很多客戶的實際應(yīng)用場景,是不需要和服務(wù)器保持長連接的,一天甚至一周上傳一兩次數(shù)據(jù),就能滿足實際的項目需求了。
如果用合宙推薦的第二種低功耗模式,有些大材小用,針對這種情況——可以使用PSM+模式。
今天,帶大家過過PSM+模式下——LuatOS開發(fā)代碼。
一、主要硬件準(zhǔn)備
這里大致說下需要準(zhǔn)備的硬件條件:
- 合宙Air780E全I(xiàn)O開發(fā)板一塊:
測試前需要將開發(fā)板上端USB下方的C2處ESD吹掉,要不會有大約20微安的漏電流。 - 支持?jǐn)?shù)據(jù)傳輸?shù)腢SB線一根;
- 一個可調(diào)電源:
可調(diào)電源最好是能精確的捕捉到μA電流的電源,本次筆者使用的是合宙自研的Air9000P手持可調(diào)電源。
?
二、PSM+超低功耗示例源碼下載
本文示例中用到的代碼,可以在這里gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/pm
需要用的代碼在“780E_Lowpower”文件夾目錄下:
?
如果您手上是其他模組,如Air780EP或者Air780EPS,則可以查看Air780EP/Air780EPS對應(yīng)倉庫下的 pm文件夾 。
三、PSM+超低功耗示例源碼
接下來,我們開始進(jìn)行PSM+超低功耗示例源碼的大致講解。
3.1 main.lua
LuatOS中,代碼的起始位置是從main.lua第一行開始的,本文使用的是 PSM+模式 ,所以打開第12行的注釋,屏蔽第11行的代碼。
?
3.2 psm_plus.lua
1)設(shè)置服務(wù)器
進(jìn)入psm_plus.lua可以看到:
?
在這里,改成用戶自己使用的服務(wù)器的IP/域名以及端口號;如果僅作測試,也可以使用合宙提供的測試服務(wù)器。
進(jìn)入后選擇打開TCP/UDP,根據(jù)用戶服務(wù)器類型自行選擇。
?
打開后,如下圖紅框所示位置即是IP和端口號:
?
local period = 36060*1000 --3小時喚醒一次
這一句是喚醒時間的設(shè)置,時間設(shè)置喚醒的時間單位為ms。所以如果你有更長時間的喚醒需求,如一天喚醒一次,可以改動最前面的3為24。
特別提醒:
這個TCP服務(wù)器僅能當(dāng)作測試來用,刷新一下網(wǎng)頁或者你電腦網(wǎng)絡(luò)有波動斷網(wǎng)一下,就會斷開,重新打開TCP端口就會變。
2)獲取喚醒原因
?
上面兩句是獲取了一下當(dāng)前喚醒的原因,是正常開機(jī),還是設(shè)置的定時器啟動,或是串口/AGPIO喚醒。
3)testTask函數(shù)
直接拉到psm_plus.lua最后一行;其實上面所有的函數(shù)都是基于最后一行的task跑的:
?
本句的意思是啟動一個task,在task里運行第14行的testTask函數(shù),并傳入了d1Name這個變量,傳入了netCB這個回調(diào)函數(shù),以及給testTask傳入了server_ip和server_port這兩個參數(shù)。
接下來,我們看看testTask這個函數(shù)的前一小段:
?
先判斷了一下當(dāng)前喚醒是什么原因喚醒的,并將對應(yīng)原因賦值給了一個叫做txData的變量,并且判斷了下是上電開機(jī)還是休眠喚醒。
如果是休眠喚醒,則主動退出飛行模式(因為模組在休眠的時候會進(jìn)入飛行模式,減小因為可能的網(wǎng)絡(luò)波動引起的功耗增大等異常)。
下面這一段就是與TCP服務(wù)器鏈接的全過程,如果鏈接失敗會重連3次:
?
?
接下來這段配置了uart1的波特率為9600,方便外部串口設(shè)備從串口喚醒模組(注:9600狀態(tài)下喚醒模組比較方便,如果是115200或其他波特率,可能需要發(fā)送多次數(shù)據(jù)才能走串口喚醒模組)。
如果不影響產(chǎn)品功能,需要將所有AGPIO在休眠狀態(tài)下的高電平輸出關(guān)閉,可以進(jìn)一步節(jié)省耗電,比如本示例中對GPIO32的操作就是這一原因。
關(guān)于AGPIO和GPIO對應(yīng)編號,如下圖所示:
?
?
最后這段代碼,啟動了深度休眠也就是PSM+模式的定時器:
?
后面的 period參數(shù), 就是腳本最上面我們設(shè)置的定時休眠喚醒時間;后面進(jìn)入飛行模式,是避免因為基站網(wǎng)絡(luò)波動導(dǎo)致的異常功耗;然后,才真正進(jìn)入了PSM+模式。如果進(jìn)入不成功,15秒后會重啟模組。
- 如果是串口喚醒,那么服務(wù)器會收到”uart1 wakeup“的數(shù)據(jù);
- 如果是GPIO喚醒,那么服務(wù)器會收到"pad wakeup";
- 如果是定時器喚醒,那么服務(wù)器會收到"timer wakeup";
- 如果當(dāng)前是上電開機(jī)去鏈接服務(wù)器,那么服務(wù)器會收到"normal wakeup"。
在沒有數(shù)據(jù)發(fā)送的時候,模組實測待機(jī)功耗為下圖的3μA:
?
今天的內(nèi)容就分享到這里啦,你學(xué)會了嗎?
審核編輯 黃宇
-
4G
+關(guān)注
關(guān)注
15文章
5492瀏覽量
118704 -
超低功耗
+關(guān)注
關(guān)注
5文章
178瀏覽量
18405 -
模組
+關(guān)注
關(guān)注
6文章
1406瀏覽量
30213 -
PSM
+關(guān)注
關(guān)注
1文章
41瀏覽量
13372
發(fā)布評論請先 登錄
相關(guān)推薦
評論