作品创意

NFC——近距离无线通讯技术目前已成为我们生活中随处可见、随手可用的技术,它可以提供轻松、安全、迅速的通信无线连接,被广泛地应用于各种场合,如公交一卡通、学生校园卡等。现在越来越多的智能手机都有NFC的功能,在这一强大的近场通讯技术的支持下,只需要一部手机轻轻一碰,就可以满足在购物、吃饭、交通等多场景下的便捷操作。
华为碰一碰能力(OneHop Engine)是多终端业务协同的解决方案技术,依托NFC短距通信协议,向手机端应用和三方设备开放多设备触碰交互能力,将手机和全场景设备连接起来,致力为用户提供手机到周边设备多种业务无缝切换的高效体验,解决了App跨设备接续难、设备配网难、传输难的问题。
我们基于BearPi-HM Nano开发套件和华为碰一碰功能开发了一款智能打卡机,支持NFC打卡和打卡结果上报到智能终端功能,拜托了传统的打卡方式,集成鸿蒙“碰一碰”功能,使打卡更加便捷。

作品技术方案

作品构思

对业务场景流程进行规划,最终确定通过碰一碰拉起打卡应用,登录实现打卡,然后通过日历展示提示打卡记录的方式进行打卡的操作。

实现过程

碰一碰拉起应用需要给标签进行信息配置与录入

①首先下载一个应用调测助手

androidNFC打卡demo 手机nfc签到打卡_androidNFC打卡demo


②切换到NFC栏

androidNFC打卡demo 手机nfc签到打卡_华为云_02


③点击选择按钮

androidNFC打卡demo 手机nfc签到打卡_数据_03


④然后点申请,这样就可以了。

androidNFC打卡demo 手机nfc签到打卡_androidNFC打卡demo_04

登录华为开发者联盟

①登陆后点击右上角管理中心:

androidNFC打卡demo 手机nfc签到打卡_华为云_05


②点击左边栏智慧服务,选择HarmonyOS服务开发平台:

androidNFC打卡demo 手机nfc签到打卡_JSON_06


③创建服务,详细步骤请参考:https://gitee.com/openharmony-sig/knowledge_demo_smart_home/blob/master/dev/docs/NFC_label_definition/README.md

此时申请的Product ID可以录入碰一碰标签,并且碰一碰的时候可以根据配置的标签信息拉起应用。

androidNFC打卡demo 手机nfc签到打卡_harmonyos_07


④首先要把华为云上的硬件数据通过数据转发给应用服务器,转发方式为进入华为云控制台:

androidNFC打卡demo 手机nfc签到打卡_harmonyos_08


⑤点击数据转发进行转发信息配置:

androidNFC打卡demo 手机nfc签到打卡_JSON_09


androidNFC打卡demo 手机nfc签到打卡_数据_10


androidNFC打卡demo 手机nfc签到打卡_JSON_11


androidNFC打卡demo 手机nfc签到打卡_数据_12


配置完信息后,启动就可以在应用服务器端收到华为云转来的数据了,对数据进行存储即可通过应用端访问。

应用服务器端接收转发数据并存储代码如下:

1.	exports.i***ta2=function(req,res){      
2.	    console.log("iot数据:",req)      
3.	    const url = new URL("http://**********"+req.url) //转发目标里边配置的地址      
4.	    let properties = JSON.stringify(req.body.notify_data.body.services)      
5.	    console.log("存储数据:",properties)      
6.	    let addArr = [properties]      
7.	    var addSql = 'INSERT INTO sesnor_Record(properties) VALUES (?)'      
8.	    var callBack = function(err,data){      
9.	        console.log("错误:"+err)      
10.	        console.log("属性插入结果::"+JSON.stringify(data))      
11.	        res.send(data)      
12.	    }      
13.	    sqlUtil.sqlContent(addSql,addArr,callBack)      
14.	}

应用服务端改变设备状态代码如下:其中参数project_id查询方式连接(https://support.huaweicloud.com/api-iothub/iot_06_v5_1001.html)。deviceId在主仓设备时由物联网平台分配。

1.	exports.iot***and=function(req,res){  
2.	    console.log("进入请求")  
3.	    var resData = {}  
4.	    const core = require('@huaweicloud/huaweicloud-sdk-core');  
5.	const iotda = require("@huaweicloud/huaweicloud-sdk-iotda");  
6.	  
7.	const ak = "L9HKGF4ZVS&&********O";  
8.	const sk = "JU0Q2********ZynWc51pxbNdlW3CuKygcSJ8";  
9.	const endpoint = "https://iotda.cn-north-4.myhuaweicloud.com";  
10.	const project_id = "0d5a*******14a6878dd1";  
11.	const securityToken = process.env.HWCLOUD_SECURITY_TOKEN;  
12.	const credentials = new core.BasicCredentials()  
13.	                     .withAk(ak)  
14.	                     .withSk(sk)  
15.	                     .withSecurityToken(securityToken) // 在临时aksk场景下使用  
16.	                     .withProjectId(project_id)  
17.	const client = iotda.IoTDAClient.newBuilder()  
18.	                            .withCredential(credentials)  
19.	                            .withEndpoint(endpoint)  
20.	                            .build();  
21.	const request = new iotda.CreateCommandRequest();  
22.	request.deviceId = "61e62*******78_19950118";  
23.	const body = new iotda.DeviceCommandRequest();  
24.	// body.withParas("{\"Light\":\"OFF\"}");  
25.	body.withParas({"Light":"OFF"});  
26.	body.withCommandName("Agriculture_Control_light");  
27.	body.withServiceId("Agriculture");  
28.	request.withBody(body);  
29.	const result = client.createCommand(request);  
30.	result.then(result => {  
31.	    console.log("JSON.stringify(result)::" + JSON.stringify(result));  
32.	    resData = {  
33.	        result:"success",  
34.	        message:result  
35.	    }  
36.	    res.send(resData)  
37.	}).catch(ex => {  
38.	    console.log("exception:" + JSON.stringify(ex));  
39.	     resData = {  
40.	        result:"fail",  
41.	        message:ex  
42.	    }  
43.	    res.send(resData)  
44.	});  
45.	}

这样就可以通过应用端给IoT云平台下发一条命令从而控制硬件状态的改变。

作品效果展示

碰一碰拉起打卡程序界面

androidNFC打卡demo 手机nfc签到打卡_华为云_13

用户在软件中进行打卡操作

androidNFC打卡demo 手机nfc签到打卡_harmonyos_14