当前位置:主页 > 查看内容

HaaS轻应用(JavaScript)低功耗蓝牙案例

发布时间:2021-09-06 00:00| 位朋友查看

简介:1、案例简介 HaaS100自带低功耗蓝牙功能,可以通过自带的蓝牙功能完成诸如与手机交互,蓝牙配网等功能。 本案例主要演示使用HaaS轻应用框架(JavaScript),在HaaS100上完成BLE的自定义GATT服务,并开启广播让手机可以扫描并连接,连接后将数据上报到手机。 2……
1、案例简介

HaaS100自带低功耗蓝牙功能,可以通过自带的蓝牙功能完成诸如与手机交互,蓝牙配网等功能。

本案例主要演示使用HaaS轻应用框架(JavaScript),在HaaS100上完成BLE的自定义GATT服务,并开启广播让手机可以扫描并连接,连接后将数据上报到手机。

2、物料清单

HaaS100开发板(需将蓝牙天线接好)。

image.png

安装NRF Connect软件的手机。

image.png

3、代码实现

编写app.js。

开启蓝牙功能

参考代码如下,调用bt_host模块中的open函数即可开启蓝牙功能。

bt_host.open的主要参数定义如下:

deviceName: 设备名

conn_num_max: 最大连接数

调用成功后,返回bt_host的实例。

import * as bt_host from 'bt_host' var bt_host_instant = bt_host.open({ deviceName: 'ble_test', conn_num_max: 2, success: function() { console.log('bt_host init success'); setTimeout(() = { app_add_service() app_start_adv(); }, 1000) }, fail: function() { console.log('bt_host init failed'); }});

蓝牙服务注册功能

蓝牙服务是BLE蓝牙的基础,通过服务来发现设备功能并交互数据,如下参考代码定义了一个自定义的服务。

add_service的主要参数如下:

service: 结构体,服务定义,需要包含一个服务的uuid,s_uuid。以及一个从属于此服务的属性列表,每个属性要包含属性uuid,属性的读写权限,如果属性包含描述项,也需要定义。关于服务的定义可参考蓝牙标准文档。

function app_add_service() { let add_service = { service: "{\ \"s_uuid\":\"0x1A1A\",\ \"chars_list\":[\ {\ \"char_uuid\":\"0x1B1B\",\ \"char_permit\":\"RW\",\ \"char_descr\":{\ \"descr_type\":\"CCC\",\ \"descr_uuid\":\"0x1C1C\"\ }\ },\ {\ \"char_uuid\":\"0x1D1D\",\ \"char_permit\":\"R\"\ }\ ]\ }" } bt_host_instant.add_service(service); }

蓝牙广播

蓝牙广播用于被主设备(如手机)发现并连接,可参考如下代码

start_adv的主要参数如下

type: 0代表可连接广播,3代表不可连接广播

adv_data:符合蓝牙规范的广播内容

scan_rsp_data:符合蓝牙规范的广播扩展内容(在type=3时无效)

interval_min: 最小广播间隔,单位0.625毫秒

interval_max: 最大广播间隔,单位0.625毫秒

channel_map:广播信道。

注意1,如果在open时设置了设备名,则不能在广播内容中添加设备名相关的字段,否则会报错。

注意2,蓝牙连接后,广播是自动关闭的,断开连接后如需继续广播,需要重新开启广播。

function app_start_adv() { bt_host_instant.start_adv({ type: 0, adv_data: '020106', scan_rsp_data: '', interval_min: 160, interval_max: 320, channel_map: 7, success: function() { console.log('bt_host start adv success'); }, failed: function() { console.log('bt_host start adv failed'); }, }); }

蓝牙连接断开指示

当设备开启可连接广播后,主设备(如手机)可以扫描到这个设备并连接。连接和断开可参考如下代码

接口on可用于接收蓝牙的连接和断开事件,参数

"connect":代表连接事件,可以在回调函数(第二个参数)中处理

"disconnect":代表断事件,可以在回调函数(第二个参数)中处理

function onConnect() { // onConnect console.log('bt_host onConnect'); dev_connected = true setTimeout(() = { app_notify_data() }, 2000); } function onDisconnect() { // onDisconnect console.log('bt_host onDisconnect'); dev_connected = false app_start_adv(); } bt_host_instant.on('connect', function() { onConnect(); }); bt_host_instant.on('disconnect', function() { onDisconnect(); });

蓝牙数据上报

蓝牙数据上报用于将数据上报到已连接的主设备上,可以参考如下代码进行周期的数据上报。

update_char的主要参数如下:

arg: 结构体,需要包含需要上报的属性的uuid,以及需要上报的数据value。

注意1,只有在属性项中定义了CCC描述项的属性可以上报数据。

注意2,需要在主设备连接HaaS100后,在主设备上开启属性的Notify功能,HaaS100才能上报数据。

function app_notify_data() { cnt++; console.log('app_notify_data cnt = '+cnt) if (cnt%2) { let param = { arg: "{\ \"uuid\": \"0x1B1B\",\ \"value\": [31,32,33]\ }", } bt_host_instant.update_char(param); } else { let param = { arg: "{\ \"uuid\": \"0x1B1B\",\ \"value\": [33,32,31]\ }", } bt_host_instant.update_char(param); } if (dev_connected == true) { setTimeout(() = { app_notify_data() }, 2000); } }

4、使用流程4.1、轻应用代码生成与烧录

按以上章节的方式实现代码逻辑并生成app.js以及app.json(参考如下)

{ "version": "1.0.0", "io": { }, "debugLevel": "DEBUG" }

将app.js和app.json放入hardware/chip/haas1000/prebuild/data/jsamp中,重新编译并烧录进HaaS100,重启开发板,可看到如下日志打印

[16:56:56.182]收←◆srvc_cfg: { "s_uuid":"0x1A1A", "chars_list":[ { "char_uuid":"0x1B1B", "char_permit":"RW", "char_descr":{ "descr_type":"CCC", "descr_uuid":"0x1C1C" } }, { "char_uuid":"0x1D1D", "char_permit":"R" } ] } [ 6.427]BT_HOST native_bt_host_add_service enter [ 6.427]BT_HOST [native_bt_host_add_service] service_cfg: { "s_uuid":"0x1A1A", "chars_lr val uuid 0x1d1d[ 6.428]BT_GATTS_ADAPTER [bt_gatts_adapter_add_service] declare service done, total attr: 6(6)[ 6.429]BT_GATTS_ADAPTER [bt_gatts_adapter_add_service] add service done with ret 12[ 6.429]BT_HOST [native_bt_host_add_service] add service successadd_service result: 0bt host start adv[ 6.429]BT_HOST native_bt_host_start_adv enter[ 6.429]BT_HOST native_bt_host_start_adv: type = 0, ad = 020106, sd = , interval_min = 160, interval_max = 320, channel_map = 7[ 6.430]BT_HOST_ADAPTER bt_host_adapter_start_adv, ble_stack_adv_start, type = 0, min = 160, max = 320, ch = 7, ad_num = 1, sd_num = 0, ad[0].type = 1, ad[0].len = 101 06 20 0f a0 00 40 01 00 00 00 00 00 00 00 00 00 07 0004 0e 04 05 06 20 0001 08 20 20 03 02 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0004 0e 04 05 08 20 0001 09 20 20 0a 09 09 62 6c 65 5f 74 65 73 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0004 0e 04 05 09 20 0001 0a 20 01 0104 0e 04 05 0a 20 00[ 6.509]BT_HOST_ADAPTER ble_stack_adv_start ret = 0bt_host start adv success

4.2、手机扫描连接设备

打开手机安装好的NRF Connect软件,点击scan,可扫描到ble_test这台设备,如下图

image.png

点击CONNECT连接HaaS100,可看到服务列表,下图红色部分即为应用中注册的自定义服务。

image.png

4.3、设备上报数据

当设备连接后,可按照如下动态图的方式打开Notify(点击属性右侧的三个箭头),之后可看到设备以2秒的间隔上报数据。

image.png

开发者支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号。

image.png

更多技术与解决方案介绍,请访问HaaS官方网站https://haas.iot.aliyun.com


本文转自网络,原文链接:https://developer.aliyun.com/article/787774
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:HaaS低功耗IP Camera解决方案 下一篇:没有了

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐