百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

三行代码实现蓝牙设备和手机App的通信

wptr33 2025-01-21 21:58 36 浏览


本教程来源于 FlexLua 官网,降低 IoT 硬件开发难度,零门槛 Lua 低代码编程技术开发 IoT 硬件。

前言

基于 ShineBlink C1 实现蓝牙Ble通信功能。注意:只能用C1不能用C2,因为C2 不支持蓝牙。

一、实现功能

C1M(Core)芯片自带BLE蓝牙功能,所以只用Core就可以很轻松的实现和手机的相互通信。本篇章所实现的功能是和手机建立蓝牙连接后:(1)Core每隔0.2秒向手机发送一包数据,(2)我们在手机调试App上自定义任意数据包发送给Core,Core收到后通过 Print() 函数打印出来。

注意:由于Core内部自带2.4G无线功能,所以无需外部器件或模块即可实现本章节的蓝牙通讯功能。但如果用了Ble蓝牙功能,Core的2.4G单点或多点通信功能就无法使用了,这一点开发者需要注意。

手机调试App这里我们选择使用苹果IOS上知名的LightBlue,安卓手机下载安装BleTool或安卓版LightBlue也可以。

二、实现机制

Core的ble低功耗蓝牙提供两个特性,一个是Write特性,一个是Notify特性。其中:

  • Write特性:可以看成是手机发送数据给Core的通道,手机通过蓝牙连接发送给Core的数据就是存放在Write特性中。
  • Notify特性:可以看成是Core发送数据给手机的通道,Core通过蓝牙发送给手机的数据就是存放在Notify上。但是需要注意,手机要想收到来自Core的数据,需要手机端主动使能这个Notify(在下面的演示中会提及)。

下面是对Core的Ble所提供的service描述,如果您看不懂这段也没关系,只需按上面讲的理解即可

service(UUID: 0x0001)描述:
service包含两个特性(Characteristic): 一个用来发送数据,一个用来接收数据

  • Rx Characteristic (UUID: 0x0002)用来接收手机的数据
    手机蓝牙可以通过ATT Write方式向Rx Characteristic发送数据
  • Tx Characteristic (UUID: 0x0003)用来向手机发送数据
    如果手机蓝牙为Tx Characteristic使能了notification,那么设备就可以通过发送notification的方式向手机蓝牙发送数据

三、完整代码

--配置低功耗蓝牙以默认参数工作,设备名称为"MyBle002"
--该设备名称就是手机扫描蓝牙设备时列表中所呈现的名称。
LIB_NrfBleDefaultConfig("MyBle002")
--开始大循环
while(GC(1) == true)
do
LIB_DelayMs(200)
send_tab = {0,1,2,3,4,5,6,7,8,9}
--将send_tab数组内的10个元素发给手机
LIB_NrfBleSend(send_tab)
--查询是否收到手机发来蓝牙数据,如果收到就print打印出来
recv_flag, recv_tab = LIB_NrfBleRecv()
if recv_flag == 1 then
--打印接收到的数据
for k,v in ipairs(recv_tab) do
print(k,v)
end
end
end


如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。另外LIBNrfBleDefaultConfig()是一种适合大部分应用场景配置函数,**如果你的Ble应用对功耗以及不同手机厂家的适配性比较关注,有更灵活的LIBNrfBleAdvanceConfig()函数可用**。

四、演示

1. 在苹果手机上打开LightBlue软件,并开始搜索附近的蓝牙设备,找到"MyBle002"后点击进入

2. 找到properties notify特性,点击进入

3. 点击Listen for notification,这样就可以收到到Core发来的数据了

4.可以看到每隔0.2秒就会收到一包数据

5.再退回到步骤2的界面,点击properties write,然后点击write new value

6.设置要发送给Core的数据为AA BB CC DD EE FF

7.最后在Core的TF卡里LOG.TXT文件可以看到刚刚我们通过手机手动发给Core的AA BB CC DD EE FF数据

五、免开发蓝牙App

shineblink 已推出免开发安卓蓝牙App,开发者无需做任何App开发,即可以让自己的手机上拥有一款能够和C开发板通信的专业App。

相关推荐

威信Chronosonic XVX全新旗舰全球首发 设计特点彻底公开

第一眼看到WilsonAudio新推出的ChronosonicXVX音箱,相信大家都会直觉认为它是两年前超级旗舰WAMMMasterChronosonic的缩小版,不过这个推测并不完全正确。C...

C#高精度Timer和Delay以及时间测量

在PCHMI7.0后在工具箱里会多一个MsTimer,以及Delay和Microsecond两个类。...

python教程从基础到精通,第9课—日期与时间

Hello,小伙伴们,祝大家五.一玩得快乐!刚学习完了七大数据类型,今天咱们来学习日期与时间的表示方法。Python标准库中提供了时间和日期的支持:calendar:日历相关;time、datetim...

软件测试|教你轻松玩转Python日期时间

Python基础之日期时间处理...

Go语言中互斥锁与读写锁,你知多少?

简述Golang中的锁机制主要包含互斥锁和读写锁互斥锁互斥锁是传统并发程序对共享资源进行控制访问的主要手段。在Go中主要使用sync.Mutex的结构体表示。一个简单的示例:funcmutex()...

变形金刚动画大电影——经典台词赏析

YOURDAYSARENUMBEREDNOW,DECEPTI-CREEPS你们活不了多久了,霸天虎小子。-{铁皮说的话,体现了铁皮的嫉恶如仇,可是后来铁皮在飞船上遇袭身亡,可谓是出师未捷身先...

Python时间日期模块使用教程(python3日期)

1.时间日期处理概述在日常编程中,时间日期处理是非常常见的需求,比如:记录日志时间...

亚马逊介绍AWS“无服务器”云服务改进:数据库可线上扩充容量等

IT之家11月29日消息,在今天于美国拉斯维加斯展开的亚马逊“AWSre:Invent2023”活动中,亚马逊计算部门资深副总裁PeterDeSantis,介绍了旗下三款云端服务,IT...

2.日期格式 datetime(日期时间显示格式)

fromdatetimeimportdatetime1.获取当前日期和时间now=datetime.now()#2025-05-3110:56:01.4687822.格式化日期...

【科普】时间单位大盘点(时间单位都有哪些?)

时间单位,是7种基本单位之一,长度、时间、质量、物质的量、光照度、电流和(热力学)温度是七种基本单位。本词条中时间单位以时间从大到小列。今天我们来盘点下时间的单位换算...

基于PHP的Laravel框架,盘点Github高星Web管理后台,效率为王!

在Web开发工作中,选择一个高效、稳定的后台管理系统是提高开发效率的关键。虽然PHP在近些年中的热度有所减退,但其上手简单、开源、灵活且被广泛应用的特点,仍然使其在编程语言排行榜中保持前十的位置。这表...

如何使用PHP编写一个简单的留言板?

留言板是一个常见的Web应用程序,允许用户在网站上发布和查看留言。在本文中,我们将使用PHP编写一个简单的留言板,介绍构建过程中的关键步骤和技巧。一、准备工作在开始编写留言板之前,我们需要准备好以下工...

产品经理提需求时要考虑的 15 个隐性需求

虽然世界充满未知的变化,但是有一些大的方向还是可以把握的,本文跟大家谈谈产品经理提需求时要考虑的15个隐性需求,enjoy~俗话说,计划赶不上变化快,无论需求文档做得如何细致,考虑得如何周全,总会...

关于 PHP 启动 MongoDb 找不到指定模块问题

前言:最近有一个小demo,需要通过PHP将用户行为记录储存到MongoDB,再用Spark做协同过滤。由于以前处理跨语言交互是通过消息中间件,这次本地使用MongoDB却弄出了几个问...

PHP程序员老鸟面试经历(php程序员怎么样)

在任何时代找任何工作都有面试这么一说的。特别是高端技术类的工种对技术理论和技术实操能力要求很严格。大部分公司招收技术员工的要求也越来愈高。至于PHP程序员也是如此,我估计大多数PHP老鸟已经不在意所...