1、案例简介

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

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

2、物料清单

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

安装NRF Connect软件的手机。

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() {// onConnectconsole.log('bt_host onConnect');dev_connected = truesetTimeout(() => {app_notify_data()}, 2000);}function onDisconnect() {// onDisconnectconsole.log('bt_host onDisconnect');dev_connected = falseapp_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]<D>BT_HOST native_bt_host_add_service enter[   6.427]<D>BT_HOST [native_bt_host_add_service] service_cfg: {         "s_uuid":"0x1A1A",         "chars_lr val uuid 0x1d1d[   6.428]<D>BT_GATTS_ADAPTER [bt_gatts_adapter_add_service] declare service done, total attr: 6(6)[   6.429]<D>BT_GATTS_ADAPTER [bt_gatts_adapter_add_service] add service done with ret 12[   6.429]<D>BT_HOST [native_bt_host_add_service] add service successadd_service result: 0bt host start adv[   6.429]<D>BT_HOST native_bt_host_start_adv enter[   6.429]<D>BT_HOST native_bt_host_start_adv: type = 0, ad = 020106, sd = , interval_min = 160, interval_max = 320, channel_map = 7[   6.430]<D>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]<D>BT_HOST_ADAPTER ble_stack_adv_start ret = 0bt_host start adv success

4.2、手机扫描连接设备

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

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

4.3、设备上报数据

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

开发者支持

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

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

HaaS轻应用(JavaScript)低功耗蓝牙案例相关推荐

  1. HaaS轻应用(JavaScript)总览

    2.0新版本发布: 来了!HaaS轻应用(JavaScript)2.0!It just works HaaS轻应用 (JavaScript) 介绍: 轻应用介绍 - 用JavaScript进行嵌入式开 ...

  2. 13.6.3 程序案例:BLE低功耗蓝牙调试助手

    13.6.3 程序案例:BLE低功耗蓝牙调试助手 (配套代码CH13-02) (1) mainwindow.cpp文件代码 #include "mainwindow.h" #inc ...

  3. 低功耗蓝牙模块智能门锁应用案例

    要说我们接触最多的智能产品应该就是手机吧,随着科技的不断发展,各种各样的智能产品现在都前赴后继的出现在我们眼前了,其中智能家居的迭代也如雨后春笋一般.层出不穷的产品除了让用户感受到科技感以外也便捷了生 ...

  4. HaaS轻应用(JavaScript)快速开始 @HaaS100

    1.HaaS100介绍 HaaS100开发板阿里云IoT团队推出的物联网通用性云端一体开发板,不但硬件资源丰富,而且还支持HaaS轻应用开发,可以方便的使用JavaScript或Python进行物联网 ...

  5. 【低功耗蓝牙】⑤ 蓝牙HID协议

    摘要 本文章主要介绍了蓝牙HID协议的实现方法,基于ESP32平台实现了蓝牙键盘,蓝牙鼠标,蓝牙自拍杆和蓝牙游戏手柄等设备,是初学者学习BLE HID协议很好的参考文章. HID设备 HID(Huma ...

  6. 使用低功耗蓝牙技术将可穿戴无线传感器连接到物联网---凯利讯半导体

    工业物联网 (IIoT) 在很大程度上要依赖传感器从便携式可穿戴系统收集数据,以便监控运动.压力.湿度和其他众多特征,然后将这些数据馈送至云进行处理. 通过模块方式,我们可以快速轻松地将传感器添加到设 ...

  7. Uniapp低功耗蓝牙操作实例

    uniapp低功耗蓝牙在移动端使用较为平常,本文相较于官方文档介绍一下低功耗蓝牙的操作案例,即取即用.低功耗蓝牙虽工作原理与经典蓝牙类似,但是有着独特的架构体系,所以LE独立出来成为一种蓝牙形态.不过 ...

  8. 「低功耗蓝牙模块」主从一体 蓝牙嗅探-助力智能门锁

    一.BLE蓝牙的具体优势: 1.BLE蓝牙模块的待机时间超长 市面上的蓝牙智能锁基本都是使用干电池供电,而BLE低功耗蓝牙模块在广播.传输.待机和睡眠模式下均拥有超低的功耗,比如E104-2G4U04 ...

  9. HaaS轻应用(Python)总览

    在物联网方案多样化与场景碎片化等大背景下,基于阿里云物联网数亿设备落地经验,阿里云物联网团队推出了HaaS这个加速AIoT中小开发者的创新平台. HaaS(Hardware as a service) ...

最新文章

  1. Python之Python 安装环境搭建
  2. 金蝶API apiEnv.apiSession.Token = GetToken()报错
  3. Eclipse juno 中安装 JBoss Tools,集成Hibernate
  4. Android逆向之旅---Native层的Hook神器Cydia Substrate使用详解
  5. Oracle多行函数
  6. linux端口访问规则,linux 查看开发放端口号--iptables
  7. 1495: 蛇行矩阵
  8. SSL 1613——最短路径问题(最短路)
  9. 共享单车或开启了物联网的大门,新的变革即将开启
  10. 宋宝华: CPU是如何访问到内存的?--MMU最基本原理
  11. java我的世界显示合成表_我的世界:若从你的背包移除“合成表”,回到5年前,最原始状态...
  12. 一个遮罩层怎么遮罩两个图层_遮罩动画需要用两个图层,一个是遮罩层,另一个是()层...
  13. 万能命令:快捷直达你想要的在线工具
  14. 互联网创业盈利模式指南
  15. 用 200 行 Python 代码掌握基本音乐理论
  16. 使用canvas画折线图和曲线图
  17. 浙江大学计算机学院博士论文格式,浙江大学博士学位论文模板.doc
  18. OPenCV 图像透视变换矫正
  19. PHPCrawler抓取酷狗精选集歌单
  20. 开发APP的流程是怎样的

热门文章

  1. 运算器设计(计算机组成实验)1
  2. 23北大软微408经验贴(含初试+复试)
  3. 计算机win7快捷键,快捷键,教您win7最常用的十大快捷键有哪些
  4. 欧拉计划问题四 学习笔记 matlab 回文字符串+length()+floor()
  5. 成人高等教育本科生学士学位日语水平考试大纲
  6. 微生物组-宏基因组分析专题技术研讨会(2023.3)
  7. 招投标舞弊的22种方式及案例
  8. bzoj 1123: [POI2008]BLO (tarjan求点双+树形DP)
  9. 论文笔记:BING and BING++(论文+程序)
  10. python类中的魔方方法