当前位置: 首页 > news >正文

玩转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 = 0prompt.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

http://www.lryc.cn/news/351944.html

相关文章:

  • 订餐系统总结、
  • 【因果推断从入门到精通二】随机实验3
  • 真实案例分享,终端pc直接telnet不到出口路由器。
  • YOLOv8_seg的训练、验证、预测及导出[实例分割实践篇]
  • Linux基础(四):Linux系统文件类型与文件权限
  • 本是梦中人,常作花下客。心中自往来,知我有几个。
  • 创新指南|利用电商产品视频进行渠道营销的最佳策略,不断提升销售额
  • 深度学习之基于YoloV5入侵检测系统
  • 【01】全面理解JVM虚拟机
  • CentOS7离线安装Nginx
  • 面试字节大模型算法实习岗,感觉有点崩溃。。。
  • k8s 1.24.x之后如果rest 访问apiserver
  • 深度解析:用 Python 爬虫逆向破解 solscan 的请求头加密参数 Sol-Aut
  • Flutter 中的 InputDecorator 小部件:全面指南
  • useTransition:开启React并发模式
  • Android 12系统源码_多窗口模式(二)系统实现分屏的功能原理
  • 字符函数:分类函数与转换函数
  • SpringBoot 集成Mybatis
  • C语言-atoi()库函数的模拟实现
  • 定时监测服务器磁盘是否超过阈值,超过就删除docker 镜像
  • UDP聊天室
  • LLM多模态——GPT-4o改变人机交互的多模式 AI 模型应用
  • 安卓手机APP开发__蓝牙功能概述
  • get和post的区别,二者是幂等的吗?
  • 农场--Kruskal应用--c++
  • 【Crypto】Rabbit
  • IRFB3207PBF TO-220 N沟道75V/180A 直插MOSFET场效应管
  • 基于单张图片快速生成Metahuman数字人(模型贴图绑定)的工作流演示
  • MySQL数据库下的Explain命令深度解析
  • 防火墙技术基础篇:基于IP地址的转发策略