為Wifi-lot小車做一個遙控器應用
??想了解更多關(guān)于開源的內(nèi)容,請訪問:??
在HarmonyOS3.0和OpenHarmony3.2的支持下,TCP-socket通信API已經(jīng)穩(wěn)定可控,今天我們做一個控制應用來控制小車。
1、效果演示
2、設(shè)計思路
運行環(huán)境:HarmonyOS3.0,OpenHarmony3.2
(1)按鍵說明
①轉(zhuǎn)向控制:左右滑動搖桿,實現(xiàn)轉(zhuǎn)向,上下滑動搖桿,實現(xiàn)速度控制。
②動力控制:上下滑動搖桿,實現(xiàn)前進后退。
③本機IP地址展示
④對端IP地址輸入
⑤鏈接,斷開按鍵,主動進行TCP連接請求與斷開。
(2)控制指令
本遙控器以狀態(tài)指令為驅(qū)動,每觸發(fā)一種狀態(tài)僅發(fā)送一次指令,對端在未接收到新指令的情況下一直保持當前指令狀態(tài)。
- 前進狀態(tài):“1”
- 后退狀態(tài):“2”
- 左轉(zhuǎn)狀態(tài):“3”
- 右轉(zhuǎn)狀態(tài): “4”
- 停止狀態(tài): “0”
3、頁面設(shè)計
在搖桿的拖動設(shè)計中,主要運用ontouchmove,ontouchend,ontouchstart實現(xiàn),通過手指坐標來確定搖桿組件的top和left值,通過設(shè)定方向閾值來判斷是否開始發(fā)送指令,通過打印回調(diào)數(shù)據(jù)來設(shè)置參數(shù)。
(1)hml
(2)CSS
4、業(yè)務(wù)邏輯
(1)參數(shù)調(diào)試
我們前面為搖桿組件設(shè)置了ontouch事件,那么如何設(shè)計Top或者left值來判斷什么時候可以開始發(fā)送指令呢?搖桿既不可太過靈敏也不可以太過遲鈍,我們可以通過打印觸摸事件返回的參數(shù)來進行調(diào)參。
(2)觸摸控制
根據(jù)前文提到的狀態(tài)控制機制,我們應該在ontouchmove中進行判斷,當上滑到某一閾值的時候開始發(fā)送前進指令,當松手時即ontouchend時我們應該立即發(fā)送停止指令。即滑動中判斷并發(fā)送指令,停止則立馬發(fā)送停止信息。具體的閾值參數(shù)根據(jù)個人考慮進行調(diào)試設(shè)置。
(3)TCP
- 通過輸入框獲取對端IP地址,點擊鏈接按鍵時觸發(fā)connect方法請求連接,連接成功彈出對話框"連接成功"。
- 展示本機IP地址。
- 應用或者頁面銷毀時應關(guān)閉連接,否則會占據(jù)對端該端口,導致下次連接失敗。
- 根據(jù)狀態(tài)驅(qū)動指令控制,由于ontouchmove是一直在觸發(fā)的,也就是判斷是一直在進行的,當我們保持搖桿前進狀態(tài)的時候,注意要判斷指令狀態(tài)是否更新了?如果指令未變,那么就不再發(fā)送指令。只有指令變化的時候才會發(fā)送一次指令。
- 只有連接成功后,才能夠發(fā)送信息。
方法 | 描述 |
creatScoket() | 綁定本機IP |
sendMessage() | 發(fā)送指令 |
onConnect() | 鏈接對端 |
onDisconnect() | 斷開鏈接 |
getIpAddress() | 獲取本機IP地址 |
- tcp設(shè)置參數(shù):
|參數(shù)|描述|
|-|-|
|keepAlive|是否保持連接。默認為false。|
|OOBInline|是否為OOB內(nèi)聯(lián)。默認為false。|
|TCPNoDelay|TCPSocket連接是否無時延。默認為false。|
|receiveBufferSize|接收緩沖區(qū)大小(單位:Byte)|
|sendBufferSize|發(fā)送緩沖區(qū)大小(單位:Byte)|
|reuseAddress|是否重用地址。默認為false|
|socketTimeout|套接字超時時間,單位毫秒(ms)| - 建議開啟HarmonyOS工程,開發(fā)完畢后可同步安裝到OpenHarmony設(shè)備,反之則會變得麻煩一些。
(4)申請權(quán)限
5、結(jié)語
本次分享的應用需要南北向開發(fā)配合食用,同時需要HarmonyOS3.0設(shè)備或者OpenHarmony3.2設(shè)備。HarmonyOS2.0設(shè)備可考慮采用JS/JAVA混合開發(fā),JAVA側(cè)實現(xiàn)Socket通信,可參考我往期博客。下一期,我將會分享如何配置HarmonyOS3.0設(shè)備的碰一碰拉起應用配置。