历史上的今天

今天是:2024年11月19日(星期二)

2018年11月19日 | 单片机连接蓝牙4.0心得分享

发布者:boyhxz 来源: eefocus关键字:单片机  连接蓝牙4 手机看文章 扫描二维码
随时随地手机看文章

最近公司要搞一个智能硬件,通过APP连接硬件,发指令达到某些目的,对于从没有接触过蓝牙的小白,简直是两眼一抹黑,于是从网上找例子,找攻略,例子和代码都不是自己想要的,于是只能求助于谷歌API,拿着某翻译,一个个对着看,终于调试成功了,下面直接上思路及代码。


1、从谷歌官网下载一份demo(通用的),对于任何串口,只要符合规范,这个demo都能调试。


2、谷歌官方代码共有4个类,其中两个比较重要,如下:


BluetoothleService 蓝牙服务:里面有蓝牙的连接,写入命令后,蓝牙所返回的协议(这个协议是厂家给你的)


DeviceControlActivity 设备控制类:连上蓝牙后进入这个界面,会出现一大堆服务,及服务的特征


3、了解两个类,接下来我们要连上蓝牙给单片机发送指令,首先打开DeviceControlActivity类,找到如下代码:


//如果该char可写


if ((charaProp | BluetoothGattCharacteristic.PROPERTY_WRITE) > 0) {


LayoutInflater factory = LayoutInflater.from(parent.getContext());


final View textEntryView = factory.inflate(R.layout.dialog, null);


final EditText editTextName = (EditText) 


textEntryView.findViewById(R.id.editTextName);


final EditText editTextNumEditText = 


(EditText)textEntryView.findViewById(R.id.editTextNum);


AlertDialog.Builder ad1 = new AlertDialog.Builder(parent.getContext());


ad1.setTitle("WriteCharacteristic");


ad1.setView(textEntryView);


ad1.setPositiveButton("确定", new DialogInterface.OnClickListener() {


public void onClick(DialogInterface dialog, int i) {


byte[] value = new byte[20];


value[0] = (byte) 0x00;


if(editTextName.getText().length() > 0){


//write string


WriteBytes= editTextName.getText().toString().getBytes();


}else if(editTextNumEditText.getText().length() > 0){


WriteBytes= hex2byte(editTextNumEditText.getText().toString().getBytes());


}


characteristic.setValue(value[0],


BluetoothGattCharacteristic.FORMAT_UINT8, 0);


characteristic.setValue(WriteBytes);


mBluetoothLeService.writeCharacteristic(characteristic);


}


});


ad1.setNegativeButton("取消", new DialogInterface.OnClickListener() {


public void onClick(DialogInterface dialog, int i) {


}


});


ad1.show();


}


以上这段代码就是写入命令的代码,起初我在这里栽了跟头,发现一件事,直接输入命令,此处的返回和协议文档是对不上的,于是我做了如下修改:


if ((charaProp | BluetoothGattCharacteristic.PROPERTY_WRITE) > 0) {


byte[] bytes = hexStringToBytes("XXXXXXXXXXXX");


// characteristic.setValue(new byte[]{0xXX,0xXX,0xXX,0xXX,0xXX, (byte) 0xB2, (byte) 0xXX});


characteristic.setValue(bytes);


boolean status = mBluetoothLeService.writeCharacteristic(characteristic);


Log.e("shjysoft_info","状态:"+status);


}


先把协议的16进制的字符串变成字节,然后放到特征里面,写进去,然后就成功了,但是没有接触过蓝牙的朋友会有疑问,给哪个服务哪个特征写,这边我也遇到 过,我跑过去问前辈们,前辈们说了一句,一个一个试,没错,你一个一个点,哪个返回正确就是哪个


关键字:单片机  连接蓝牙4 引用地址:单片机连接蓝牙4.0心得分享

上一篇:单片机编程开发技巧经验分享
下一篇:学单片机,到底在学什么?

推荐阅读

  据悉,德国将宣布投资10亿欧元(约合12亿美元)来支持联盟生产电动车电池,此外德国政府也计划投资一家研发机构来支持其新一代固体电池的研发。   德国政府此举预计将于本周对外公布,主要是为了减少德国车企对亚洲电池供应商的依赖性,以及在从内燃机时代过渡到电动化时代期间,保障德国的就业环境。   但德国在电动车电池领域的投资可能比较...
  据外媒报道,加利福尼亚州日前发布了其2019~2020年综合资源计划(IRP)。根据该计划,到2030年,太阳能+储能项目将在该州能源结构中占据主导地位。   计划指出,到2030年,将部署装机容量11~19GW的电池储能系统,主要目的是将太阳能发电转移到夜间。   据悉,与之前的综合资源计划(IRP)相比,太阳能发电和储能系统大幅增加的部分原因是,这...
作为电力电子行业的专业展会平台,PCIM Asia 2020展会汇聚了国内外电子电子领域的诸多知名企业,泰克科技已经连续多年参加,今年也不例外,泰克带来了最新的电力电子相关测试产品和解决方案,现场为客户进行演示,倾听客户的声音和需求。 第三代半导体是5G、人工智能、工业互联网等多个“新基建”领域的重要材料,也是各国半导体研究领域的热点。根据Omd...
因受到制裁,华为手机业务遇到一些困难,但华为在折叠屏手机这一细分领域仍然保持了领先优势,是国产折叠屏手机中的领跑者。  今天,业内人士Ross Young发文指出,伴随着谷歌砍单折叠屏手机Pixel Fold,三星2021年的可折叠手机市场份额将会达到86%,高于去年的83%,而华为以10%的份额排名第二,是目前国产手机品牌中份额最多的品牌。  资料...

史海拾趣

问答坊 | AI 解惑

IM3、IIP3、OIP3等的计算

Pin:Input powerPout:Output powerIM3:3rd order intermodulation productIIP3:Input 3rd order intercept pointOIP3:Output 3rd order intercept pointG:GainP1dB:1dB&n ...…

查看全部问答∨

AT89c2051 中文资料

AT89c2051 中文资料…

查看全部问答∨

高频PCB学习资料

高频PCB学习资料…

查看全部问答∨

怎么把系统外界模块的驱动加到WinCE操作系统中?

我主板的操作系统准备用WinCE 6.0,外接了一个GPRS模块,还有几个其他模块。怎么把外接模块的驱动加到WinCE中啊?是像XP中那样安装呢?还是必须在定制系统的时候就把驱动程序加入进去呢?如果是后者,定制过程中,怎么把驱动加进去啊?我现在的驱动 ...…

查看全部问答∨

想找本已s3c44b0为例子的书入门,请推荐。

弄了块三星原厂的s3c44b0开发板,想找本书看下入门。…

查看全部问答∨

编译器的工作问题

问个基本问题:以S3C44B0X为例,在ADS编译环境下,编译器编译程序后自动将程序的代码和数据分开。代码和数据都放在FLASH里,。在启动程序44BINIT.S里,将数据段从FLASH拷贝SDRAM里,代码仍然留在FLASH里。 请问是这样的不? …

查看全部问答∨

触摸屏技术

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 “伸出手臂,触摸世界”。即使是对工程师来讲,如此简单的模拟通话也因此马上变得去繁变简。但是,有时电话交流还是不够,在这种情况下,一图胜千言,所以有了界面友好的触摸屏。   想象一 ...…

查看全部问答∨

试用报告4-关于人脸检测的具体操作步骤

前些帖子介绍了人脸检测的一些相关的资料,下面这个帖子就具体步骤进行介绍: 要实现人脸检测必须从硬件和软件入手: 硬件方面: 1、在开始菜单中启动xilinx platform studio 11.1(因为本实验板附带的edk就是11版本的,大家可以到xilinx官网中 ...…

查看全部问答∨

我的定时器启动后先进一次中断

大家好 我用的stm32单片机,我已经做了其他可能的排除,最好确定 定时器使能后先进入一次中断。 我感觉应该是有些标志位没有清除,希望各位大侠帮我看看。 void TIM_Configuration(void) { TIM_TimeBaseInitTypeDef  TIM_TimeB ...…

查看全部问答∨

为什么要删我的帖子的!!!!!!!!

                                 我看见网上有公司能破解STM8了,我也正在用STM8,所以想在这问一下,今天发现帖子被删除了…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved