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

一、简介

“碰一碰”设备控制,依托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小灯的开闭。除了文中分享的样例,开发者还可以通过拓展其他相关的属性和方法,实现更多好玩的、高性能的样例。

为了帮助到大家能够更有效的学习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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/638969.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java web应用性能分析之【高并发之缓存-多级缓存】

说到缓存,作为java开发第一时间想到的是不是上图所示的Redis,又或者是Guava Cache、Caffeine、EhCache这些;Redis作为分布式缓存、其他的可以作为本地缓存。但是作为一名资深开发人员,着眼的层面应该再提升一个级别,从…

LLM多模态——GPT-4o改变人机交互的多模式 AI 模型应用

1. 概述 OpenAI 发布了迄今为止最新、最先进的语言模型 – GPT-4o也称为“全“ 模型。这一革命性的人工智能系统代表了一次巨大的飞跃,其能力模糊了人类和人工智能之间的界限。 GPT-4o 的核心在于其原生的多模式特性,使其能够无缝处理和生成文本、音频…

微信小程序开发环境的搭建

一、注册微信小程序账号 二、安装微信开发者工具 1.下载微信开发者工具。 官网下载地址:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/downloads.html 2、选择稳定版Window64下载安装 3、下载完毕后,点击下一步安装 三、使用微信开发者工具…

slam14讲(第8讲、前端里程计)LK光流、直接法

直接法的引出 因为第7讲大部分都是讲特征点法,通过提取orb特征点和点的描述子,来构建两帧图像之间的特征点对应关系。这种方法会有缺点: 关键点和描述子提取计算耗时,如果相机的频率高,则slam算法大部分耗时被占。特…

2种方法将集合数据List构建成树形结构

文章目录 递归循环构建树结构hutool.TreeUtil.build构建树结构 递归循环构建树结构 先查最外层树节点数据&#xff0c;再递归遍历每一层子节点数据 public ApiResultDto<List<LocationDto>> getTreeByParams(LocationSearchDto searchDto, SecurityUser user) {// …

代码随想录算法训练营第三十六天|860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

860.柠檬水找零 文档讲解&#xff1a;代码随想录 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 注意看提示&#xff1a; bills[i] 不是 5 就是 10 或是 20 场景较为固定 遇到了20&#xff0c;优先消耗10 class Solution:def lemonadeChange(self, bills: …

秋招突击——算法——模板题——区间DP——合并石子

文章目录 题目内容思路分析实现代码分析与总结 题目内容 思路分析 基本思路&#xff0c;先是遍历区间长度&#xff0c;然后再是遍历左端点&#xff0c;最后是遍历中间的划分点&#xff0c;将阶乘问题变成n三次方的问题 实现代码 // 组合数问题 #include <iostream> #in…

宝塔Linux下安装EMQX服务并设置匿名访问

简述 之前有在Windows和Linux下搭建过EMQX服务并且使用方面都没问题,但那都是使用的用户和密码方式访问,且前提都是通过浏览器进入EMQX的配置页面设置的属性; 但这次使用的是腾讯云租用的宝塔Liniux,由于没有浏览器只能通过命令行方式修改EMQX配置以达到目的;由于事先没看…

使用 CapSolver API 服务解决 Arkose Labs FunCaptcha 验证码

使用 CapSolver API 服务解决 Arkose Labs FunCaptcha 验证码 FunCaptcha 以其复杂的图像验证而闻名&#xff0c;对自动化系统构成了巨大的挑战。CapSolver 的 API 服务利用先进的 AI 技术轻松应对和解决 FunCaptcha 挑战。本指南探讨了 CapSolver 如何实现无缝自动化&#xff…

汇聚荣科技有限公司优点有哪些?

在当今快速发展的科技时代&#xff0c;企业之间的竞争愈发激烈。作为一家专注于科技创新与研发的公司&#xff0c;汇聚荣科技有限公司凭借其卓越的技术实力和创新能力&#xff0c;在业界树立了良好的口碑。那么&#xff0c;汇聚荣科技有限公司究竟有哪些优点呢?接下来&#xf…

XX数字中台技术栈及能力

XX数字中台技术栈及能力 1 概述 XX数字中台面向数据开发者、数据管理者和数据应用者&#xff0c;提供数据汇聚、融合、治理、开发、挖掘、共享、可视化、智能化等能力&#xff0c;实现数据端到端的全生命周期管理&#xff0c;以共筑数字基础底座&#xff0c;共享数据服务能力…

The Missing Semester of Your CS Education(计算机教育中缺失的一课)

Shell 工具和脚本(Shell Tools and Scripting) 一、shell脚本 1.1、变量赋值 在bash中为变量赋值的语法是foobar&#xff0c;访问变量中存储的数值&#xff0c;其语法为 $foo。 需要注意的是&#xff0c;foo bar &#xff08;使用空格隔开&#xff09;是不能正确工作的&…

llama-factory学习个人记录

框架、模型、数据集准备 1.llama-factory部署 # 克隆仓库 git clone https://github.com/hiyouga/LLaMA-Factory.git # 创建虚拟环境 conda create --name llama_factory python3.10 # 激活虚拟环境 conda activate llama_factory # 安装依赖 cd LLaMA-Factory pip install -…

Java 使用继承和重写父类方法写一个商品入库案例

package 练习.商品入库;import java.util.Scanner; // 抽象手机类 public abstract class Phone {//测试方法public static void main(String[] args){// 华为手机huawei h new huawei();h.setName("华为P40");h.setPrice(1999.99);h.setConfiguration("8128GB…

Go知识点复习

Go知识点复习 1.关于包的使用和GOPATH的配置 src:用于以代码包的形式组织并保存Go源码文件, 需要手动创建pkg目录&#xff1a;用于存放经由go install命令构建安装后的代码包&#xff08;包含Go库源码文件&#xff09;的“.a”归档文件bin目录&#xff1a;与pkg目录类似&…

kind: Telemetry

访问日志 访问日志提供了一种从单个工作负载实例的角度监控和理解行为的方法。 Istio 能够以一组可配置的格式为服务流量生成访问日志&#xff0c; 使操作员可以完全控制日志记录的方式、内容、时间和地点。 有关更多信息&#xff0c;请参阅获取 Envoy 的访问日志。 https:/…

ThingsBoard如何拆分前后端分离启动

后端启动 前端启动 注意事项 ThingsBoard是一个开源的物联网平台&#xff0c;它原本的设计就考虑到了现代Web应用的前后端分离架构。尽管其核心是一个后端服务&#xff0c;负责设备连接、数据处理和存储等&#xff0c;但其用户界面是作为单独的前端应用程序实现的&#xff0c…

Windows下部署Seata1.5.2,解决Seata无法启动问题

目录 1. 版本说明 2. Windows下部署Seata1.5.2 2.1 创建回滚日志表undo_log 2.2 创建Seata服务端需要的四张表 2.3 在nacos创建seata命名空间&#xff0c;添加seataServer.yml配置 2.4 修改本地D:/tool/seata-server-1.5.2/seata/conf/applicaltion.yml文件 2.5 启动Seat…

抖音运营_抖音电商介绍

截止20年8月&#xff0c;抖音的日活跃数高达6亿。 20年6月&#xff0c;上线抖店 &#xff08;抖音官方电商&#xff09; 一 抖店的定位和特色 1 一站式经营 帮助商家进行 商品交易、店铺管理、客户服务 等全链路的生意经营 2 多渠道拓展 抖音、今日头条、西瓜、抖音火山版…

markdown 文件渲染工具推荐 obsidian publish

背景 Markdown 是一种轻量级的标记语言&#xff0c;最开始使用它是觉得码字非常方便&#xff0c;从一开始的 word 排版到 markdown &#xff0c;还不太不习惯&#xff0c;用了 obsidian把一些文字发在网上后&#xff0c;才逐渐发现他的厉害之处。 让人更加专注于内容本身&…