当前位置: 首页 > news >正文

LuatOS-SOC接口文档(air780E)--nimble - 蓝牙BLE库(nimble版)

示例

-- 本库当前支持Air101/Air103/ESP32/ESP32C3/ESP32S3
-- 用法请查阅demo, API函数会归于指定的模式-- 名称解释:
-- peripheral 外设模式, 或者成为从机模式, 是被连接的设备
-- central    中心模式, 或者成为主机模式, 是扫描并连接其他设备
-- ibeacon    周期性的beacon广播-- UUID       设备的服务(service)和特征(characteristic)会以UUID作为标识,支持 2字节/4字节/16字节,通常用2字节的缩短版本
-- chr        设备的服务(service)由多个特征(characteristic)组成, 简称chr
-- characteristic 特征由UUID和flags组成, 其中UUID做标识, flags代表该特征可以支持的功能

常量

常量

类型

解释

nimble.CHR_F_WRITE

number

chr的FLAGS值, 可写, 且需要响应

nimble.CHR_F_WRITE

number

chr的FLAGS值, 可读

nimble.CHR_F_WRITE

number

chr的FLAGS值, 可写, 不需要响应

nimble.CHR_F_WRITE

number

chr的FLAGS值, 可订阅, 不需要回复

nimble.CHR_F_WRITE

number

chr的FLAGS值, 可订阅, 需要回复

nimble.CFG_ADDR_ORDER

number

UUID的转换的大小端, 结合config函数使用, 默认0, 可选0/1

nimble.init(name)

初始化BLE上下文,开始对外广播/扫描

参数

传入值类型

解释

string

蓝牙设备名称,可选,建议填写

返回值

返回值类型

解释

bool

成功与否

例子

-- 参考 demo/nimble
-- 本函数对所有模式都适用

nimble.deinit()

关闭BLE上下文

参数

返回值

返回值类型

解释

bool

成功与否

例子

-- 仅部分设备支持,当前可能都不支持
-- 本函数对所有模式都适用

nimble.mode(tp)

设置模式

参数

传入值类型

解释

int

模式, 默认server/peripheral, 可选 client/central模式 nimble.MODE_BLE_CLIENT

返回值

返回值类型

解释

bool

成功与否

例子

-- 参考 demo/nimble
-- 必须在nimble.init()之前调用
-- nimble.mode(nimble.MODE_BLE_CLIENT) -- 简称从机模式,未完善

nimble.connok()

是否已经建立连接

参数

返回值

返回值类型

解释

bool

已连接返回true,否则返回false

例子

log.info("ble", "connected?", nimble.connok())
-- 从机peripheral模式, 设备是否已经被连接
-- 主机central模式, 是否已经连接到设备
-- ibeacon模式, 无意义

nimble.send_msg(conn, handle, data)

发送信息

参数

传入值类型

解释

int

连接id, 当前固定填1

int

处理id, 当前固定填0

string

数据字符串,可包含不可见字符

返回值

返回值类型

解释

bool

成功与否

例子

-- 参考 demo/nimble
-- 本函数对peripheral/从机模式适用

nimble.setUUID(tp, addr)

设置server/peripheral的UUID

参数

传入值类型

解释

string

配置字符串,后面的示例有说明

string

地址字符串

返回值

返回值类型

解释

bool

成功与否

例子

-- 参考 demo/nimble, 2023-02-25之后编译的固件支持本API
-- 必须在nimble.init()之前调用
-- 本函数对peripheral/从机模式适用-- 设置SERVER/Peripheral模式下的UUID, 支持设置3个
-- 地址支持 2/4/16字节, 需要二进制数据
-- 2字节地址示例: AABB, 写 string.fromHex("AABB") ,或者 string.char(0xAA, 0xBB)
-- 4字节地址示例: AABBCCDD , 写 string.fromHex("AABBCCDD") ,或者 string.char(0xAA, 0xBB, 0xCC, 0xDD)
nimble.setUUID("srv", string.fromHex("380D"))      -- 服务主UUID         ,  默认值 180D
nimble.setUUID("write", string.fromHex("FF31"))    -- 往本设备写数据的UUID,  默认值 FFF1
nimble.setUUID("indicate", string.fromHex("FF32")) -- 订阅本设备的数据的UUID,默认值 FFF2

nimble.mac()

获取蓝牙MAC

参数

返回值

返回值类型

解释

string

蓝牙MAC地址,6字节

例子

-- 参考 demo/nimble, 2023-02-25之后编译的固件支持本API
-- 本函数对所有模式都适用
local mac = nimble.mac()
log.info("ble", "mac", mac and mac:toHex() or "Unknwn")

nimble.sendNotify(srv_uuid, chr_uuid, data)

发送notify

参数

传入值类型

解释

string

服务的UUID,预留,当前填nil就行

string

特征的UUID,必须填写

string

数据, 必填, 跟MTU大小相关, 一般不要超过256字节

返回值

返回值类型

解释

bool

成功返回true,否则返回false

例子

-- 本API于 2023.07.31 新增
-- 本函数对peripheral模式适用
nimble.sendNotify(nil, string.fromHex("FF01"), string.char(0x31, 0x32, 0x33, 0x34, 0x35))

nimble.sendIndicate(srv_uuid, chr_uuid, data)

发送indicate

参数

传入值类型

解释

string

服务的UUID,预留,当前填nil就行

string

特征的UUID,必须填写

string

数据, 必填, 跟MTU大小相关, 一般不要超过256字节

返回值

返回值类型

解释

bool

成功返回true,否则返回false

例子

-- 本API于 2023.07.31 新增
-- 本函数对peripheral模式适用
nimble.sendIndicate(nil, string.fromHex("FF01"), string.char(0x31, 0x32, 0x33, 0x34, 0x35))

nimble.advParams(conn_mode, disc_mode, itvl_min, itvl_max, channel_map, filter_policy, high_duty_cycle)

设置广播参数

参数

传入值类型

解释

int

广播模式, 0 - 不可连接, 1 - 定向连接, 2 - 未定向连接, 默认0

int

发现模式, 0 - 不可发现, 1 - 限制发现, 3 - 通用发现, 默认0

int

最小广播间隔, 0 - 使用默认值, 范围 1 - 65535, 单位0.625ms, 默认0

int

最大广播间隔, 0 - 使用默认值, 范围 1 - 65535, 单位0.625ms, 默认0

int

广播通道, 默认0, 一般不需要设置

int

过滤规则, 默认0, 一般不需要设置

int

当广播模式为”定向连接”时,是否使用高占空比模式, 默认0, 可选1

返回值

返回值类型

解释

nil

无返回值

例子

-- 当前仅ibeacon模式/peripheral/从机可使用
-- 例如设置 不可连接 + 限制发现
-- 需要在nimble.init之前设置好
nimble.advParams(0, 1)
-- 注意peripheral模式下自动配置 conn_mode 和 disc_mode

nimble.setChr(index, uuid, flags)

设置chr的特征

参数

传入值类型

解释

int

chr的索引, 默认0-3

int

chr的UUID, 可以是2/4/16字节

int

chr的FLAGS, 请查阅常量表

返回值

返回值类型

解释

nil

无返回值

例子

-- 仅peripheral/从机可使用
nimble.setChr(0, string.fromHex("FF01"), nimble.CHR_F_WRITE_NO_RSP | nimble.CHR_F_NOTIFY)
nimble.setChr(1, string.fromHex("FF02"), nimble.CHR_F_READ | nimble.CHR_F_NOTIFY)
nimble.setChr(2, string.fromHex("FF03"), nimble.CHR_F_WRITE_NO_RSP)
-- 可查阅 demo/nimble/kt6368a

nimble.config(id, value)

设置chr的特征

参数

传入值类型

解释

int

配置的id,请查阅常量表

any

根据配置的不同, 有不同的可选值

返回值

返回值类型

解释

nil

无返回值

例子

-- 本函数在任意模式可用
-- 本API于 2023.07.31 新增
-- 例如设置地址转换的大小端, 默认是0, 兼容老的代码
-- 设置成1, 服务UUID和chr的UUID更直观
nimble.config(nimble.CFG_ADDR_ORDER, 1)

nimble.ibeacon(data, major, minor, measured_power)

配置iBeacon的参数,仅iBeacon模式可用

参数

传入值类型

解释

string

数据, 必须是16字节

int

主版本号,默认2, 可选, 范围 0 ~ 65536

int

次版本号,默认10,可选, 范围 0 ~ 65536

int

名义功率, 默认0, 范围 -126 到 20

返回值

返回值类型

解释

bool

成功返回true,否则返回false

例子

-- 参考 demo/nimble, 2023-02-25之后编译的固件支持本API
-- 本函数对ibeacon模式适用
nimble.ibeacon(data, 2, 10, 0)
nimble.init()

nimble.advData(data, flags)

配置广播数据,仅iBeacon模式可用

参数

传入值类型

解释

string

广播数据, 当前最高128字节

int

广播标识, 可选, 默认值是 0x06,即 不支持传统蓝牙(0x04) + 普通发现模式(0x02)

返回值

返回值类型

解释

bool

成功返回true,否则返回false

例子

-- 参考 demo/nimble/adv_free, 2023-03-18之后编译的固件支持本API
-- 本函数对ibeacon模式适用
-- 数据来源可以多种多样
local data = string.fromHex("123487651234876512348765123487651234876512348765")
-- local data = crypto.trng(25)
-- local data = string.char(0x11, 0x13, 0xA3, 0x5A, 0x11, 0x13, 0xA3, 0x5A, 0x11, 0x13, 0xA3, 0x5A, 0x11, 0x13, 0xA3, 0x5A)
nimble.advData(data)
nimble.init()-- nimble支持在init之后的任意时刻再次调用, 以实现数据更新
-- 例如 1分钟变一次
while 1 dosys.wait(60000)local data = crypto.trng(25)nimble.advData(data)
end

nimble.scan(timeout)

扫描从机

参数

传入值类型

解释

int

超时时间,单位秒,默认28秒

返回值

返回值类型

解释

bool

启动扫描成功与否

例子

-- 参考 demo/nimble/scan
-- 本函数对central/主机模式适用
-- 本函数会直接返回, 然后通过异步回调返回结果-- 调用本函数前, 需要先确保已经nimble.init()
nimble.scan()
-- timeout参数于 2023.7.11 添加

nimble.connect(mac)

连接到从机

参数

传入值类型

解释

string

设备的MAC地址

返回值

返回值类型

解释

bool

启动连接成功与否

例子

-- 本函数对central/主机模式适用
-- 本函数会直接返回, 然后通过异步回调返回结果

nimble.disconnect()

断开与从机的连接

参数

返回值

返回值类型

解释

nil

无返回值

例子

-- 本函数对central/主机模式适用
-- 本函数会直接返回

nimble.discSvr()

扫描从机的服务列表

参数

返回值

返回值类型

解释

nil

无返回值

例子

-- 本函数对central/主机模式适用
-- 本函数会直接返回,然后异步返回结果
-- 这个API通常不需要调用, 在连接从机完成后,会主动调用一次

nimble.listSvr()

获取从机的服务列表

参数

返回值

返回值类型

解释

table

服务UUID的数组

例子

-- 本函数对central/主机模式适用

nimble.discChr(svr_uuid)

扫描从机的指定服务的特征值

参数

传入值类型

解释

string

指定服务的UUID值

返回值

返回值类型

解释

boolean

成功启动扫描与否

例子

-- 本函数对central/主机模式适用

nimble.listChr(svr_uuid)

获取从机的指定服务的特征值列表

参数

传入值类型

解释

string

指定服务的UUID值

返回值

返回值类型

解释

table

特征值列表,包含UUID和flags

例子

-- 本函数对central/主机模式适用

nimble.discDsc(svr_uuid, chr_uuid)

扫描从机的指定服务的特征值的其他属性

参数

传入值类型

解释

string

指定服务的UUID值

string

特征值的UUID值

返回值

返回值类型

解释

boolean

成功启动扫描与否

例子

-- 本函数对central/主机模式适用

nimble.writeChr(svr_uuid, chr_uuid, data)

往指定的服务的指定特征值写入数据

参数

传入值类型

解释

string

指定服务的UUID值

string

指定特征值的UUID值

string

待写入的数据

返回值

返回值类型

解释

boolean

成功启动写入与否

例子

-- 本函数对central/主机模式适用

nimble.writeChr(svr_uuid, chr_uuid)

从指定的服务的指定特征值读取数据(异步)

参数

传入值类型

解释

string

指定服务的UUID值

string

指定特征值的UUID值

返回值

返回值类型

解释

boolean

成功启动写入与否

例子

-- 本函数对central/主机模式适用
-- 详细用法请参数 demo/nimble/central

nimble.subChr(svr_uuid, chr_uuid)

订阅指定的服务的指定特征值

参数

传入值类型

解释

string

指定服务的UUID值

string

指定特征值的UUID值

返回值

返回值类型

解释

boolean

成功启动订阅与否

例子

-- 本函数对central/主机模式适用
-- 详细用法请参数 demo/nimble/central

nimble.unsubChr(svr_uuid, chr_uuid)

取消订阅指定的服务的指定特征值

参数

传入值类型

解释

string

指定服务的UUID值

string

指定特征值的UUID值

返回值

返回值类型

解释

boolean

成功启动取消订阅与否

例子

-- 本函数对central/主机模式适用
-- 详细用法请参数 demo/nimble/central

相关文章:

LuatOS-SOC接口文档(air780E)--nimble - 蓝牙BLE库(nimble版)

示例 -- 本库当前支持Air101/Air103/ESP32/ESP32C3/ESP32S3 -- 用法请查阅demo, API函数会归于指定的模式-- 名称解释: -- peripheral 外设模式, 或者成为从机模式, 是被连接的设备 -- central 中心模式, 或者成为主机模式, 是扫描并连接其他设备 -- ibeacon 周期性的be…...

医疗器械展示预约小程序的效果如何

医疗器械行业涵盖的内容非常广,市场中大小从业的品牌/门店也很多,比如我们常见的轮椅、康复器械、拐杖、血压仪等产品市场需求都非常高,当然还有医院里用的器械等。 医疗器械市场呈现多品牌、多门店的发展趋势,虽然这些东西不是必…...

【Vue原理解析】之异步与优化

引言 Vue是一款流行的JavaScript框架,它提供了一些强大的特性来提升应用程序的性能和用户体验。在本文中,我们将深入探讨Vue的异步更新机制和一些优化技巧,帮助您更好地理解和应用这些特性。 异步更新机制 Vue使用异步更新机制来提高渲染性…...

mybatis、mysql 创建时间(create_time)异常自动更新为当前时间

目录标题 一、问题二、原因三、解决 一、问题 bug: mybatis更新代码没有修改时间,但是时间会自动更新为当前时间。 。。。 被坑了挺久 二、原因 可能是创建表的时候, Navicat Premium 等可视化工具给你整活了。。。 三、解决 取消勾选。 注意&…...

shardingsphere 加载慢 优化

shardingsphere加载慢 优化 原因: 启动速度变慢(元数据扫描耗时较长) 占用内存增多(大量单表和元数据对象) 那是因为默认扫描1张表.一张一张加载巨慢,添加以下配置增加到20张表同时扫描 错误: 如果你数据库最大连接不到20就会报错,请按照数据…...

我这些年对于自动化测试的理解

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…...

Java安全架构 JCA、JCE、JSSE、JAAS

Java语言拥有三大特征:平台无关性、网络移动性和安全性,而Java安全体系结构对这三大特征提供了强大的支持和保证, Java安全体系结构总共分为4个部分: (1)JCA( Java Cryptography Architecture…...

面试经典(4/150)删除有序数组中的重复项 II

面试经典(4/150)删除有序数组中的重复项 II 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 , 返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原…...

使用WildCard充值ChatGPT Plus 会员

登录 wildCard官网 基于国内手机号注册账号,使用支付宝验证付款即可自动申请国外银行卡,WildCard的开卡费是9.9美元, 没有后续的月费用.订阅chatgpt plus会员服务的操作图文指南见链接 chatgpt plus会员订阅指南...

element-plus使用el-date-picker组件时,如何禁止用户选择当前时间之后的日时分秒

element-plus使用el-date-picker组件时&#xff0c;如何禁止用户选择当前时间之后的日时分秒 例&#xff1a; 当前时间为2023-11-15 14.24&#xff0c;不能选择这之后的时分秒。&#xff08;禁止用户选择2023-11-15 14.28&#xff09; <el-date-pickerv-model"form.s…...

keepalived安装配置(服务器主备、负载均衡)

系统拓扑 安装keepalived 主备服务器上都需要安装 在线安装 yum install -y keepalived 离线安装 # todo 服务器准备 虚拟机ip&#xff1a;192.168.11.56 主服务器&#xff1a;192.168.11.53 备服务器&#xff1a;192.168.11.54 配置文件修改 keepalived安装之后&…...

盘点一款制作电子杂志的网站,小白也能快速上手

​电子杂志作为一种时尚、环保、便捷的宣传形式&#xff0c;越来越受到各行各业的青睐。无论是企业宣传、产品推广&#xff0c;还是个人分享&#xff0c;电子杂志都能展现出独特的魅力。而制作电子杂志&#xff0c;不再是专业人士的专属&#xff0c;现在小白也能快速上手&#…...

全域全自主建设,亚信科技AntDB数据库助力广电5G业务上线运行

自2019年6月&#xff0c;中国广电成功获得5G牌照以来&#xff0c;迅速推进网络建设目标&#xff0c;成为5G网络覆盖广、应用场景多、用户体验出色的第四大运营商。其依托全球独有的700MHz频谱资源&#xff0c;具备覆盖能力强、容量足、速率高的优势。通过不断深化和中国移动的共…...

使用 SSH 密钥进行身份验证

使用 SSH 密钥进行身份验证可以提高安全性&#xff0c;并免去每次登录时输入密码的麻烦。以下是使用 SSH 密钥进行身份验证的步骤&#xff1a; 生成密钥对&#xff1a;在本地计算机上生成 SSH 密钥对。打开终端并执行以下命令&#xff1a; ssh-keygen -t rsa -b 4096这将生成…...

国内最受欢迎的电商API接口调用京东商品详情数据

国内实用的API接口 国内最受欢迎的7大API供应平台对比和介绍 本文将介绍7款API供应平台&#xff1a;电商API数据、百度e、Apix、数说聚合、通联数据、HaoService、datasift 。排名不分先后&#xff01; 免费实用的API接口 第一部分 1、电商数据&#xff08;API数据接口_开发者…...

windows远程桌面登录ubuntu,黑屏闪退,

首先需要安装xrdp以后才能远程登录&#xff0c;安装命令 sudo apt-get install xrdp 这里需要注意一个问题&#xff0c;如果在ubuntu 本地登录的情况下&#xff0c;windows远程登录会出现黑屏甚至闪退的问题。原因是本地登录和远程登陆是互斥的&#xff0c;本地登录了就不能远…...

12-使用vue2实现todolist待办事项

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章…...

微信小程序授权登录?

wxml <!-- 示例&#xff1a;在wxml中创建一个授权登录按钮 --> <button bindtap"getUserInfo">授权登录</button> js // 用户点击授权登录按钮时触发的事件处理函数getUserInfo: function (e) {wx.getUserProfile({desc: 用于完善会员资料, // 授…...

React 18 + Hooks +Ts 开发中遇到的问题及解决方案!

这篇文章是用来专门记录关于React 18 Hooks Ts 开发中遇到的问题及解决方案 Q1 问题描述&#xff1a; TS7016: Could not find a declaration file for module js-export-excel. /Users/zhangliangliang/WebstormProjects/daizhang-system-front/node_modules/js-export-exc…...

推荐一个非常好用的uniapp的组件库【TMUI3.0】

文章目录 前言官网地址如何使用&#xff1f;注意事项后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端系列文章 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果…...

LeetCode(19)最后一个单词的长度【数组/字符串】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 58. 最后一个单词的长度 1.题目 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 …...

使用Docker本地安装部署Drawio绘图工具并实现公网访问

目录 前言 1. 使用Docker本地部署Drawio 2. 安装cpolar内网穿透工具 3. 配置Draw.io公网访问地址 4. 公网远程访问Draw.io 前言 提到流程图&#xff0c;大家第一时间可能会想到Visio&#xff0c;不可否认&#xff0c;VIsio确实是功能强大&#xff0c;但是软件为收费&…...

IDEA导入jar包

通过maven导入本地包 mvn install:install-file -DfileD:\WebProject\ERP\zhixing-heyue-erp-server\zxhy-service-api\src\main\java\com\zxhy\service\api\invoice\baiwang\lib\com_baiwang_bop_sdk_outer_3_4_393.jar -DgroupIdcom.baiwang -DartifactIdbaiwang.open -Dver…...

使用flutter的Scaffold脚手架开发一个最简单的带tabbar的app模板

flutter自带的scaffold脚手架可以说还是挺好用的&#xff0c;集成了appBar&#xff0c;还有左侧抽屉&#xff0c;还有底部tabbar&#xff0c;可以说拿来就可以用了啊&#xff0c;所以我今天也体验了一下&#xff0c;做了一个最简单的demo&#xff0c;就当是学习记录了。 效果展…...

aws服务器配置密码登陆

在 AWS 上&#xff0c;EC2 实例默认使用密钥对进行身份验证&#xff0c;而不是密码登录。不过&#xff0c;你可以通过以下步骤在 EC2 实例上启用密码登录&#xff1a; 登录 AWS 管理控制台并导航到 EC2 服务。 选择要配置密码登录的目标 EC2 实例。 在底部的 “描述” 标签页…...

【命令行魔法:掌握Linux基础工具开发的独门技艺】

本节目标 1.Linux 软件包管理器 2.Linux开发工具 3.Linux编译器-gcc/g使用 4.Linux项目自动化构建工具-make/Makefile 5.Linux第一个小程序&#xff0d;进度条 1.Linux 软件包管理器 yum 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译…...

虚拟DOM的原理和理解

Virtual DOM前言 在传统的Web开发中&#xff0c;直接操作真实的DOM通常是一个昂贵且低效的操作。为了解决这个问题&#xff0c;Virtual DOM&#xff08;虚拟DOM&#xff09;被引入为一个中间层&#xff0c;允许开发者在内存中进行操作&#xff0c;从而避免频繁且不必要的真实DO…...

C# WPF Threads 和 Dispatchers 有什么区别

在C# WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;Threads&#xff08;线程&#xff09;和Dispatchers&#xff08;调度器&#xff09;之间的关系非常重要&#xff0c;因为WPF是一个基于STA&#xff08;单线程单元&#xff09;的UI框架。 Threa…...

【文末送书——数学经典著作】工科必备的数学思维培养

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…...

【云备份项目两万字总结】服务端篇 -----附源码

项目总结 整体回顾逐步实现utill.hppconfig.hppdata.hpphot.hppservice.hpp 代码 整体回顾 服务端的目标是&#xff1a; 对客户端的请求进行处理管理客户端上传的文件 于客户端进行数据交换&#xff0c;我们需要引入网络&#xff0c;所以我们引入第三方库----httplib.h库&am…...