当前位置: 首页 > 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;正在不断努力填补技术短板。(如果…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...