App Inventor 2 低功耗蓝牙(BLE) 硬件接入、数据通信及IO控制

2024-01-31 18:12

本文主要是介绍App Inventor 2 低功耗蓝牙(BLE) 硬件接入、数据通信及IO控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ble5

BLE硬件

低功耗蓝牙(BLE)以低功耗、低成本、开发简便逐渐被广泛应用,本文主要介绍一款较为通用、价格低廉的BLE设备从零开始如何利用App Inventor 2开发一款自己专属的手机蓝牙App应用。

BLE与经典蓝牙的区别可参考:《低功耗蓝牙(BLE) 和 经典蓝牙(SPP) 的区别》。

本文主要通过一款常见的BLE硬件接入控制,介绍硬件接入App Inventor 2 的通用方法,类似的硬件接入都是大同小异的。

1、硬件接线(特别注意:VCC 3.3v 或 5v 请参阅说明书,不要弄错以免烧坏硬件)

一般来说,需要接线的端口有以下4个,无论哪款蓝牙硬件,也无论哪种其他硬件,这4个端口都是基本的存在:VCC(正极)、GND(接地负极)、TX、RX 交叉接线,接线图请看原文。

2、串口工具测试

接线完成后,我们必须先来测试一下蓝牙硬件的连通性,但是由于蓝牙硬件是孤立存在的,我们无法查看手机App向它发送的什么数据,也无法让它往手机App发送数据,这时我们就需要用到串口工具。

什么是串口工具?

串口工具一般是一款电脑上的软件,配合UART线,可以与硬件进行双向数据传输的工具,UART线如下:

UART

电脑端的串口工具软件非常之多,可自行下载。

请注意:使用串口工具软件之前,一般需要安装硬件厂商提供的驱动程序。


电脑端打开串口:

打开串口


UART上指示灯会开启,说明串口已打开:

UART串口打开成功

测试与BLE硬件通信(数据透传)

手机App端发送数据,BLE硬件(电脑串口)读取并打印数据;BLE硬件(电脑串口)发送数据,App手机端接收并打印数据。

使用厂商自带的测试App进行通信测试:

厂商App测试


电脑端串口工具查看通信数据:

发送和接收

AT控制指令

除了上面的数据透传之外,一般硬件还支持内部的控制指令(如设置连接密码、查询硬件地址、主模式连接其他蓝牙等)。

注意:BRTS接GND才能执行控制指令,如图:

BRTS-GND

AT开头是控制指令;非AT开头是透传数据:

AT指令


这里仅演示了需求硬件状态、MAC地址的指令,当然不同厂商会提供不同的AT指令,具体可查看厂商提供的硬件说明书。

BLE设备角色主要分为两种角色,主机(Master或Central)和从机(Peripheral),当主机和从机建立连接之后才能相互收发数据

  • 主机,主机可以发起对从机的扫描连接。例如手机,通常作为BLE的主机设备
  • 从机,从机只能广播并等待主机的连接。例如智能手环,是作为BLE的从机设备(以上的数据透传演示BLE硬件就是作为从机的)

IO口控制

硬件LED

可以使用厂商提供的App进行IO口控制,也可以使用App Inventor 2 编程实现控制IO口电平的高/低,对应LED的开/关。

3、App Inventor 2 开发自己的蓝牙App

主要用到 BlueToothLE 拓展,点此查看中文文档。BLE蓝牙的特点是无需配对,设备被扫描后直接连接即可通信。

ble拓展

蓝牙App开发示例

demo参考界面如下:

demo界面


扫描蓝牙设备,代码如下:

开始扫描


扫描完成后,设备列表展示到“列表显示框”组件中:

扫描完成


点击列表中的目标设备(一般硬件文档会有说明,名称会有特别的标识),连接蓝牙设备的代码如下:

连接设备

蓝牙App控制硬件

开始控制硬件相关IO端口,发送高/低电平,控制LED的开和关,代码如下:

硬件IO控制

其中:

  • values - 表示待发送的数据(这里是单字节0x01,表示高电平)
  • signed - 表示values数据是否是有符号的数值(表示无符号)
  • serviceUuid - 服务UUID,通俗来讲它就是硬件的唯一身份ID
  • characteristicUuid - 特性UUID,通俗来讲它是硬件中某一功能的唯一身份ID

UUID的获取途径:

上面代码中的两个UUID仅仅是我们测试对象的硬件的IO控制口的UUID,不同的硬件UUID是不同的,具体可以查看硬件提供的文档或厂商提供的java源码,一般会有提供。


一个硬件UUID示例如下:

UUID示例

UUID分为标准UUID和厂商自定义UUID

  • 标准UUID:由SIG发布,采用UUID基数 + 16位UUID的形式,如心率服务的UUID是0x180D,使用的UUID基数是:00000000-0000-1000-8000-00805F9B34FB
  • 厂商自定义UUID:同样采用UUID基数 + 16位UUID的形式,由厂商定义,如BLE串口服务的UUID是0x001,使用的UUID基数是:6E400001-B5A3-F393-E0A9-E50E24DCCA9E

原文链接:App Inventor 2 低功耗蓝牙(BLE) 硬件接入、数据通信及IO控制 · App Inventor 2 中文网

这篇关于App Inventor 2 低功耗蓝牙(BLE) 硬件接入、数据通信及IO控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/664638

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

IDEA接入Deepseek的图文教程

《IDEA接入Deepseek的图文教程》在本篇文章中,我们将详细介绍如何在JetBrainsIDEA中使用Continue插件接入DeepSeek,让你的AI编程助手更智能,提高开发效率,感兴趣的小... 目录一、前置准备二、安装 Continue 插件三、配置 Continue 连接 DeepSeek四

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用