关于openharmony:玩转OpenHarmony智能家居如何实现树莓派碰一碰设备控制

38次阅读

共计 2782 个字符,预计需要花费 7 分钟才能阅读完成。

一、简介

“碰一碰”设施管制,依靠 NFC 短距通信协议,通过碰一碰的交互方式,将 OpenAtom OpenHarmony(简称“OpenHarmony”)规范零碎设施和全场景设施连接起来,解决了利用与设施之间接续慢、传输难的问题,实现一碰拉起利用,为用户带来无缝切换的晦涩体验。

二、“碰一碰”设施管制场景

(1)应用成果
当树莓派开发板凑近小熊派开发板,树莓派中应用程序被拉起,进入 LED 小灯管制界面。而后,管制端和设施端实现配网通信连贯,点击关上小熊派 LED 小灯点亮,点击敞开 LED 小灯燃烧。

(2)操作流程
• 在小熊派的 NFC 被动贴片中写入管制端利用信息
• 将树莓派的 PN532 被动板凑近小熊派 NFC 贴片,读取贴片中的利用信息,拉起对应的小灯管制利用
• 管制端和设施端实现配网通信连贯
• 点击关上小熊派 LED 小灯点亮,点击敞开 LED 小灯燃烧

三、NFC 拉起利用性能实现

近场通信(Near Field Communication,简称 NFC),是一种新兴的技术,应用了 NFC 技术的设施能够在彼此凑近的状况下进行数据交换,是由非接触式射频辨认(RFID)演变而来。

NFC 技术在事实场景中被宽泛应用,通过在繁多芯片上集成感应式读卡器、感应式卡片和点对点通信的性能,利用挪动终端实现挪动领取、门禁、挪动身份辨认、防伪等利用。NFC 的点对点模式须要被动板和被动板两个模块,该案例中树莓派的 PN532 模块是被动板用于读取信息,小熊派开发板的 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("开始调起利用 \r\n");
        pthread_t id1;
        int ret = pthread_create(&id1, NULL, (void *)mythread1, NULL);
        if (ret) {HILOGE("创立线程失败 \r\n");
        }

        sleep(4);
    }
}
/*
 * 拉起设施管制利用的线程
*/
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 性能的实现须要调用驱动文件中相应的接口函数。I2C_Init 函数实现树莓派 PN532 模块的初始化。PN532_ReadPassiveTarget 函数用于实现循环读取 NFC 贴片的 UID 信息,当读到小熊派 NFC 贴片信息时,创立新的线程拉起对应的 LED 灯利用。

四、LED 小灯利用性能实现

该案例中 LED 小灯利用,次要基于 TCP 通信协议实现对小熊派 LED 小灯的关上和敞开管制。

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: "网络断开",});
            }
        }).catch(err => {console.log("[led Controller]" + err)
        })
    },
    ledOpen() {this.tcpSend("1")
    },
    changeText() {
        prompt.showToast({message: "配网胜利",});
    },
    ledClose() {this.tcpSend("0")
    }
}

上述代码中,通过 import led_controller from ‘@ohos.led_controller’ 引入 NAPI 动静库,led_controller 动静库中封装 TCP 通信相干的接口函数。

五、总结

本文介绍了如何应用 NFC 实现 OpenHarmony“碰一碰”设施管制。首先,须要基于树莓派 PN532 模块驱动开发 NFC 智能感知的利用,实现设施间碰一碰发现的性能。而后,基于 NAPI 开发设施间的 TCP 通信业务,并在应用层调用接口函数实现 LED 小灯的开闭。除了文中分享的样例,开发者还能够通过拓展其余相干的属性和办法,实现更多好玩的、高性能的样例。

代码地址:
https://gitee.com/isrc_ohos/l…
https://gitee.com/isrc_ohos/l…

参考地址

设施端源码 https://gitee.com/isrc_ohos/l…
利用端源码 https://gitee.com/isrc_ohos/l…
常识体系 https://gitee.com/openharmony…

正文完
 0