一、简介
“碰一碰”设备控制,依托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贴片是被动板用于保存信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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小灯的打开和关闭控制。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析