玩轉(zhuǎn)OpenHarmony智能家居:如何實現(xiàn)開發(fā)版“碰一碰”設(shè)備控制

一、簡介

“碰一碰”設(shè)備控制,依托NFC短距通信協(xié)議,通過碰一碰的交互方式,將OpenAtom OpenHarmony(簡稱“OpenHarmony”)標準系統(tǒng)設(shè)備和全場景設(shè)備連接起來,解決了應(yīng)用與設(shè)備之間接續(xù)慢、傳輸難的問題,實現(xiàn)一碰拉起應(yīng)用,為用戶帶來無縫切換的流暢體驗。

二、“碰一碰”設(shè)備控制場景

(1)使用效果

當A開發(fā)板靠近B開發(fā)板,A中應(yīng)用程序被拉起,進入LED小燈控制界面。然后,控制端和設(shè)備端完成配網(wǎng)通信連接,點擊打開BLED小燈點亮,點擊關(guān)閉LED小燈熄滅。

(2)操作流程

? 在B的NFC被動貼片中寫入控制端應(yīng)用信息

? 將A的PN532主動板靠近B NFC貼片,讀取貼片中的應(yīng)用信息,拉起對應(yīng)的小燈控制應(yīng)用

? 控制端和設(shè)備端完成配網(wǎng)通信連接

? 點擊打開B LED小燈點亮,點擊關(guān)閉LED小燈熄滅

三、NFC拉起應(yīng)用功能實現(xiàn)

近場通信(Near Field Communication,簡稱NFC),是一種新興的技術(shù),使用了NFC技術(shù)的設(shè)備可以在彼此靠近的情況下進行數(shù)據(jù)交換,是由非接觸式射頻識別(RFID)演變而來。NFC技術(shù)在現(xiàn)實場景中被廣泛使用,通過在單一芯片上集成感應(yīng)式讀卡器、感應(yīng)式卡片和點對點通信的功能,利用移動終端實現(xiàn)移動支付、門禁、移動身份識別、防偽等應(yīng)用。NFC的點對點模式需要主動板和被動板兩個模塊,該案例中A的PN532模塊是主動板用于讀取信息,B 開發(fā)板的NFC貼片是被動板用于保存信息。

int main(int argc, char **argv) {
    uint8_t buff[255];
    uint8_t uid[MIFARE_UID_MAX_LENGTH];
    int32_t uid_len = 0;
    PN532 pn532;
    PN532_I2C_Init(&pn532);
    if (PN532_GetFirmwareVersion(&pn532, buff) == PN532_STATUS_ERROR) {
        return -1;
    }
    PN532_SamConfiguration(&pn532);
    while (1) {
        while (1) {
            // 判斷NFC模塊是否靠近
            if (PN532_ReadPassiveTarget(&pn532, uid, PN532_MIFARE_ISO14443A, 1000) != PN532_STATUS_ERROR) {
                break;
            }
            usleep(100);
        }
 
        HILOGI("開始調(diào)起應(yīng)用\r\n");
        pthread_t id1;
        int ret = pthread_create(&id1, NULL, (void *)mythread1, NULL);
        if (ret) {
            HILOGE("創(chuàng)建線程失敗\r\n");
        }
 
        sleep(4);
    }
}
/*
 *拉起設(shè)備控制應(yīng)用的線程
*/
void *mythread1(void) {
    char arg[500] = "aa start -d 1 -a com.huawei.ohos_car_controller.default -b ohos.samples.jshelloworld";
    system(arg);
    return NULL;
}

上述代碼中,NFC功能的實現(xiàn)需要調(diào)用驅(qū)動文件中相應(yīng)的接口函數(shù)。I2C_Init函數(shù)實現(xiàn)A PN532模塊的初始化。PN532_ReadPassiveTarget函數(shù)用于實現(xiàn)循環(huán)讀取NFC貼片的UID信息,當讀到B NFC貼片信息時,創(chuàng)建新的線程拉起對應(yīng)的LED燈應(yīng)用。

四、LED小燈應(yīng)用功能實現(xiàn)

該案例中LED小燈應(yīng)用,主要基于TCP通信協(xié)議實現(xiàn)對B LED小燈的打開和關(guān)閉控制。

import led_controller from '@ohos.led_controller';
export default {
    onShow() {
        this.tcpConnect();
    },
    onDestroy() {
        this.tcpDistroy();
    },
    tcpConnect() {
        let promise_connect = led_controller.Connect();
        promise_connect.then((results) => {
            setTimeout(this.changeText(), 9000);
        }).catch(err => {
            console.log('[led Controller]' + err)
        })
    },
    tcpSend(message) {
        let promise_send = led_controller.Send({
            data: message
        })
        promise_send.then((results) => {
            if (results.send_status == 1) {
                console.log("[led Controller] send success")
            }
        }).catch(err => {
            console.log("[led Controller]" + err)
        })
    },
    tcpDistroy() {
        let promise_disconnect = led_controller.Close()
        promise_disconnect.then((results) => {
            if (results.close_status == 1) {
                ConnectionStatus = 0
                prompt.showToast({
                    message: "網(wǎng)絡(luò)斷開",
                });
            }
        }).catch(err => {
            console.log("[led Controller]" + err)
        })
    },
    ledOpen() {
       this.tcpSend("1")
    },
    changeText() {
        prompt.showToast({
            message: "配網(wǎng)成功",
        });
    },
    ledClose() {
        this.tcpSend("0")
    }
}

上述代碼中,通過import led_controller from '@ohos.led_controller'引入NAPI動態(tài)庫,led_controller動態(tài)庫中封裝TCP通信相關(guān)的接口函數(shù)。

五、總結(jié)

本文介紹了如何使用NFC實現(xiàn)OpenHarmony“碰一碰”設(shè)備控制。首先,需要基于A PN532模塊驅(qū)動開發(fā)NFC智能感知的應(yīng)用,實現(xiàn)設(shè)備間碰一碰發(fā)現(xiàn)的功能。然后,基于NAPI開發(fā)設(shè)備間的TCP通信業(yè)務(wù),并在應(yīng)用層調(diào)用接口函數(shù)實現(xiàn)LED小燈的開閉。除了文中分享的樣例,開發(fā)者還可以通過拓展其他相關(guān)的屬性和方法,實現(xiàn)更多好玩的、高性能的樣例。

寫在最后

  • 如果你覺得這篇內(nèi)容對你還蠻有幫助,我想邀請你幫我三個小忙:
  • 點贊,轉(zhuǎn)發(fā),有你們的 『點贊和評論』,才是我創(chuàng)造的動力。
  • 關(guān)注小編,同時可以期待后續(xù)文章ing??,不定期分享原創(chuàng)知識。
  • 想要獲取更多完整鴻蒙最新學習知識點,請移步前往小編:https://gitee.com/MNxiaona/733GH/blob/master/jianshu
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容