玩转OpenHarmony智能家居:如何实现开发版“碰一碰”设备控制

536 篇文章 7 订阅
425 篇文章 3 订阅

一、简介

“碰一碰”设备控制,依托NFC短距通信协议,通过碰一碰的交互方式,将OpenAtom OpenHarmony(简称“OpenHarmony”)标准系统设备和全场景设备连接起来,解决了应用与设备之间接续慢、传输难的问题,实现一碰拉起应用,为用户带来无缝切换的流畅体验。

二、“碰一碰”设备控制场景

(1)使用效果

当A开发板靠近B开发板,A中应用程序被拉起,进入LED小灯控制界面。然后,控制端和设备端完成配网通信连接,点击打开BLED小灯点亮,点击关闭LED小灯熄灭。

(2)操作流程

• 在B的NFC被动贴片中写入控制端应用信息

• 将A的PN532主动板靠近B NFC贴片,读取贴片中的应用信息,拉起对应的小灯控制应用

• 控制端和设备端完成配网通信连接

• 点击打开B LED小灯点亮,点击关闭LED小灯熄灭

三、NFC拉起应用功能实现

近场通信(Near Field Communication,简称NFC),是一种新兴的技术,使用了NFC技术的设备可以在彼此靠近的情况下进行数据交换,是由非接触式射频识别(RFID)演变而来。NFC技术在现实场景中被广泛使用,通过在单一芯片上集成感应式读卡器、感应式卡片和点对点通信的功能,利用移动终端实现移动支付、门禁、移动身份识别、防伪等应用。NFC的点对点模式需要主动板和被动板两个模块,该案例中A的PN532模块是主动板用于读取信息,B 开发板的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函数实现A PN532模块的初始化。PN532_ReadPassiveTarget函数用于实现循环读取NFC贴片的UID信息,当读到B NFC贴片信息时,创建新的线程拉起对应的LED灯应用。

四、LED小灯应用功能实现

该案例中LED小灯应用,主要基于TCP通信协议实现对B 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“碰一碰”设备控制。首先,需要基于A PN532模块驱动开发NFC智能感知的应用,实现设备间碰一碰发现的功能。然后,基于NAPI开发设备间的TCP通信业务,并在应用层调用接口函数实现LED小灯的开闭。除了文中分享的样例,开发者还可以通过拓展其他相关的属性和方法,实现更多好玩的、高性能的样例。

如果想更深入的学习 OpenHarmony (鸿蒙南向)全栈开发的内容,可以参考以下学习文档:

OpenHarmony 开发环境搭建:https://qr18.cn/CgxrRy

《OpenHarmony源码解析》:https://qr18.cn/CgxrRy

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……

系统架构分析:https://qr18.cn/CgxrRy

  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

OpenHarmony 设备开发学习手册:https://qr18.cn/CgxrRy

OpenHarmony面试题(内含参考答案):https://qr18.cn/CgxrRy

写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:https://gitee.com/MNxiaona/733GH

在这里插入图片描述

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值