玩转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小灯的开闭。除了文中分享的样例,开发者还可以通过拓展其他相关的属性和方法,实现更多好玩的、高性能的样例。
代码地址:
https://gitee.com/isrc_ohos/led-contrller-device
https://gitee.com/isrc_ohos/led-controller-application
参考地址
设备端源码
https://gitee.com/isrc_ohos/led-contrller-device
应用端源码
https://gitee.com/isrc_ohos/led-controller-application
知识体系
https://gitee.com/openharmony-sig/knowledge

玩转OpenHarmony智能家居:如何实现树莓派“碰一碰”设备控制的更多相关文章
- Home Assistant + 树莓派:强大的智能家居系统 · 安装篇
Home Assistant + 树莓派:强大的智能家居系统 · 安装篇 转载:Home Assistant + 树莓派:强大的智能家居系统 · 安装篇 目录 1. 初始安装 3. Homebridg ...
- 自己动手实现智能家居之树莓派GPIO简介(Python版)
[前言] 一个热爱技术的人一定向往有一个科技感十足的环境吧,那何不亲自实践一下属于技术人的座右铭:“技术改变世界”. 就让我们一步步动手搭建一个属于自己的“智能家居平台”吧(不要对这个名词抬杠啦,技术 ...
- Home Assistant + 树莓派:强大的智能家居系统 · 设备接入篇
转载:Home Assistant + 树莓派:强大的智能家居系统 · 设备接入篇 目录 HASS 配置框架 主文件设置 Homebridge 设置 鹬蚌相争? 设备追踪设置 更新日志 作者的话 相信 ...
- 树莓派安装开源智能家居系统 Domoticz
前言 最近闲来无事开始折腾自己的智能家居系统,对比了几种比较流行的开源智能家居系统,觉得 Domoticz 更适合,Domoticz的官方中文文档,虽然不是很完善但还是可以参考一下.需要注意的是下文用 ...
- DIY智能家居——零基础入门篇
概要 本文主要根据笔者从零开始接触硬件,以小白视角开启IoT探索,根据相关资料DIY一个温湿度传感器.后经过探索发现新大陆--Home Assistant&Homebridge,最终实现了一个 ...
- 转载智能家居 作者:热情的沙漠 出处:http://www.cnblogs.com/buptzym/
理工男打造帝都89平智能家庭 毕业后的2016年年初,搬入新家,总算不用在出租屋里鬼混了,于是就想把之前童年的梦想:智能家居+家庭影院好好实现一下~ 相比帝都高昂的房价,这些东东还凑合玩得起,不过 ...
- 智能家居-3.基于esp8266的语音控制系统(软件篇)
智能家居-1.基于esp8266的语音控制系统(开篇) 智能家居-2.基于esp8266的语音控制系统(硬件篇) 智能家居-3.基于esp8266的语音控制系统(软件篇) 赞赏支持 QQ:505645 ...
- 一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino
大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说 ...
- zigbee智能家居基础扫盲
zigbee Zigbee是基于IEEE802.15.4标准的低功耗个域网协议.根据这个协议规定的技术是一种短距离.低功耗的无线通信技术.这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和&qu ...
- 入门智能家居,从 IFTTT 到 HomeKit 自动化(二)
入门智能家居,从 IFTTT 到 HomeKit 自动化(二) 目录 0. HomeKit.HomeBridge.HomeAssistant 分别是什么?关系是什么? 1. 开始前的准备 2. 整 ...
随机推荐
- Java JVM——7.本地方法栈
本地方法栈 Java虚拟机栈于管理Java方法的调用,而本地方法栈用于管理本地方法的调用. 本地方法栈,也是线程私有的. 允许被实现成固定或者是可动态扩展的内存大小.(在内存溢出方面是相同的) ✎ 如 ...
- collections模块下的defaultdict用法
defaultdict from collections import defaultdict s=[('yellow',1),('blue', 2), ('yellow', 3), ('blue', ...
- jupyterlab安装和优化
说明 JupyterLab(官网https://jupyter.org)是一个交互式的代码编辑器,打开它会打开一个网页,可以在其中编写代码,即时执行,快速得到结果(包括代码返回值.统计图和界面交互图) ...
- 【Azure 应用服务】NodeJS项目部署在App Service For Linux环境中,部署完成后应用无法访问
问题描述 NodeJS项目部署在App Service For Linux环境中,部署完成后应用无法访问,在启动日志中发现错误消息:ERROR - Container XXX_0 for site X ...
- Ubuntu20下安装NFS
安装nfs-kernel-server apt install nfs-kernel-server 想好自己要把哪个目录作为NFS共享目录,创建目录 mkdir /mydata vim /etc/ex ...
- MySql学习之初识SQLyog
•SQLyog安装与配置 [安装包,提取码:w6sj] [安装教程,提取码:cwqu] •MySQL的语法规范 不区分大小写,但建议关键字大写,表名.列名小写 每条命令最好用分号结尾 每条命令根据需要 ...
- SpringMVC简介 & 原理
特点 1.轻量级,简单易学 2.高效,基于请求响应的MVC框架 3.与Spring兼容性好,与之无缝接合(就是它的一部分) 4.约定优于配置(maven) 5.功能强大:支持RESTful 数据验证 ...
- history = his + story 男性史 = 历史 学单词
history = his + story 男性史 = 历史 早先还有 herstory 由于女性地位底下,就由 history 代表历史了. 然后 history 由拉丁文过来 story 从法语过 ...
- 跨域! dev: 'http://192.168.40.81:9090/xxx-api/' 平台和项目 两个都要改 要不会跨域!跨域!跨域!
跨域! dev: 'http://192.168.40.81:9090/xxx-api/' 平台和项目 两个都要改 要不会跨域!跨域!跨域!
- Java求解汉诺塔
汉诺塔 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗 ...