导航:首页 > 源码编译 > 安卓蓝牙开发源码

安卓蓝牙开发源码

发布时间:2023-01-14 05:52:44

android_studio手机蓝牙串口通信源代码

初涉android的蓝牙操作,按照固定MAC地址连接获取Device时,程序始终是异常终止,查了好多天代码都没查出原因。今天改了一下API版本,突然就成功连接了。总结之后发现果然是个坑爹之极的错误。

为了这种错误拼命查原因浪费大把时间是非常不值得的,但是问题不解决更是揪心。可惜我网络了那么多,都没有给出确切原因。今天特此mark,希望后来者遇到这个问题的时候能轻松解决。

下面是我的连接过程,中间崩溃原因及解决办法。

1:用AT指令获得蓝牙串口的MAC地址,地址是简写的,按照常理猜测可得标准格式。

2:开一个String adress= "************" //MAC地址, String MY_UUID= "************"//UUID根据通信而定,网上都有。

3:取得本地Adapter用getDefaultAdapter(); 远程的则用getRemoteDevice(adress); 之后便可用UUID开socket进行通信。

如果中途各种在getRemoteDevice处崩溃,大家可以查看一下当前的API版本,如果是2.1或以下版本的话,便能确定是API版本问题,只要换成2.2或者以上就都可以正常运行了~ 这么坑爹的错误的确很为难初学者。 唉·········· 为这种小trick浪费很多时间真是难过。

(另外有个重要地方,别忘了给manifest里面加以下两个蓝牙操作权限哦~)

❷ Android-Ble蓝牙开发Demo示例–扫描,连接,发送和接收数据,分包解包(附源码)

万物互联的物联网时代的已经来临,ble蓝牙开发在其中扮演着举重若轻的角色。最近刚好闲一点,抽时间梳理下这块的知识点。

涉及ble蓝牙通讯的客户端(开启、扫描、连接、发送和接收数据、分包解包)和服务端(初始化广播数据、开始广播、配置Services、Server回调操作)整个环节以及一些常见的问题即踩过的一些坑。

比如
1、在Android不同版本或不同手机的适配问题,扫描不到蓝牙设备
2、如何避免ble蓝牙连接出现133错误?
3、单次写的数据大小有20字节限制,如何发送长数据

蓝牙有传统(经典)蓝牙和低功耗蓝牙BLE(Bluetooth Low Energy)之分,两者的开发的API不一样,本文主讲Ble蓝牙开发,传统蓝牙不展开,有需要的可以自行了解。

相对传统蓝牙,BLE低功耗蓝牙,主要特点是快速搜索,快速连接,超低功耗保持连接和数据传输。

客户端

服务端

Android4.3(API Level 18)开始引入BLE的核心功能并提供了相应的 API。应用程序通过这些 API 扫描蓝牙设备、查询 services、读写设备的 characteristics(属性特征)等操作。

BLE蓝牙协议是GATT协议, BLE相关类不多, 全都位于android.bluetooth包和android.bluetooth.le包的几个类:
android.bluetooth.
.BluetoothGattService 包含多个Characteristic(属性特征值), 含有唯一的UUID作为标识
.BluetoothGattCharacteristic 包含单个值和多个Descriptor, 含有唯一的UUID作为标识
.BluetoothGattDescriptor 对Characteristic进行描述, 含有唯一的UUID作为标识

.BluetoothGatt 客户端相关
.BluetoothGattCallback 客户端连接回调
.BluetoothGattServer 服务端相关
.BluetoothGattServerCallback 服务端连接回调

android.bluetooth.le.
.AdvertiseCallback 服务端的广播回调
.AdvertiseData 服务端的广播数据
.AdvertiseSettings 服务端的广播设置
.BluetoothLeAdvertiser 服务端的广播

.BluetoothLeScanner 客户端扫描相关(Android5.0新增)
.ScanCallback 客户端扫描回调
.ScanFilter 客户端扫描过滤
.ScanRecord 客户端扫描结果的广播数据
.ScanResult 客户端扫描结果
.ScanSettings 客户端扫描设置

BLE设备分为两种设备: 客户端(也叫主机/中心设备/Central), 服务端(也叫从机/外围设备/peripheral)
客户端的核心类是 BluetoothGatt
服务端的核心类是 BluetoothGattServer 和 BluetoothLeAdvertiser
BLE数据的核心类是 BluetoothGattCharacteristic 和 BluetoothGattDescriptor

下面详细讲解下客户端和服务端的开发步骤流程

安卓手机涉及蓝牙权限问题,蓝牙开发需要在AndroidManifest.xml文件中添加权限声明:

在搜索设备之前需要询问打开手机蓝牙:

注意: BLE设备地址是动态变化(每隔一段时间都会变化),而经典蓝牙设备是出厂就固定不变了!

通过扫描BLE设备,根据设备名称区分出目标设备targetDevice,下一步实现与目标设备的连接,在连接设备之前要停止搜索蓝牙;停止搜索一般需要一定的时间来完成,最好调用停止搜索函数之后加以100ms的延时,保证系统能够完全停止搜索蓝牙设备。停止搜索之后启动连接过程;

BLE蓝牙的连接方法相对简单只需调用connectGatt方法;

参数说明

与设备建立连接之后与设备通信,整个通信过程都是在BluetoothGattCallback的异步回调函数中完成;

BluetoothGattCallback中主要回调函数如下:

上述几个回调函数是BLE开发中不可缺少的;

当调用targetdDevice.connectGatt(context, false, gattCallback)后系统会主动发起与BLE蓝牙设备的连接,若成功连接到设备将回调onConnectionStateChange方法,其处理过程如下:

判断newState == BluetoothGatt.STATE_CONNECTED表明此时已经成功连接到设备;

mBluetoothGatt.discoverServices();

扫描BLE设备服务是安卓系统中关于BLE蓝牙开发的重要一步,一般在设备连接成功后调用,扫描到设备服务后回调onServicesDiscovered()函数,函数原型如下:

BLE蓝牙开发主要有负责通信的BluetoothGattService完成的。当且称为通信服务。通信服务通过硬件工程师提供的UUID获取。获取方式如下:

具体操作方式如下:

开启监听,即建立与设备的通信的首发数据通道,BLE开发中只有当客户端成功开启监听后才能与服务端收发数据。开启监听的方式如下:

BLE单次写的数据量大小是有限制的, 通常是20字节 ,可以尝试通过requestMTU增大,但不保证能成功。分包写是一种解决方案,需要定义分包协议,假设每个包大小20字节,分两种包,数据包和非数据包。对于数据包,头两个字节表示包的序号,剩下的都填充数据。对于非数据包,主要是发送一些控制信息。
监听成功后通过向 writeCharacteristic写入数据实现与服务端的通信。写入方式如下:

其中:value一般为Hex格式指令,其内容由设备通信的蓝牙通信协议规定;

若写入指令成功则回调BluetoothGattCallback中的onCharacteristicWrite()方法,说明将数据已经发送给下位机;

若发送的数据符合通信协议,则服务端会向客户端回复相应的数据。发送的数据通过回调onCharacteristicChanged()方法获取,其处理方式如下:

通过向服务端发送指令获取服务端的回复数据,即可完成与设备的通信过程;

当与设备完成通信之后之后一定要断开与设备的连接。调用以下方法断开与设备的连接:

源码上传在CSDN上了,有需要的可以借鉴。

=====> Android蓝牙Ble通讯Demo示例源码–扫描,连接,发送和接收数据,分包解包

BLE单次写的数据量大小是有限制的,通常是20字节,可以尝试通过requestMTU增大,但不保证能成功。分包写是一种解决方案,需要定义分包协议,假设每个包大小20字节,分两种包,数据包和非数据包。对于数据包,头两个字节表示包的序号,剩下的都填充数据。对于非数据包,主要是发送一些控制信息。
总体流程如下:
1、定义通讯协议,如下(这里只是个举例,可以根据项目需求扩展)

2、封装通用发送数据接口(拆包)
该接口根据会发送数据内容按最大字节数拆分(一般20字节)放入队列,拆分完后,依次从队列里取出发送

3、封装通用接收数据接口(组包)
该接口根据从接收的数据按协议里的定义解析数据长度判读是否完整包,不是的话把每条消息累加起来

4、解析完整的数据包,进行业务逻辑处理

5、协议还可以引入加密解密,需要注意的选算法参数的时候,加密后的长度最好跟原数据长度一致,这样不会影响拆包组包

一般都是Android版本适配以及不同ROM机型(小米/红米、华为/荣耀等)(EMUI、MIUI、ColorOS等)的权限问题

蓝牙开发中有很多问题,要静下心分析问题,肯定可以解决的,一起加油;

❸ 谁能给一份开发基于蓝牙4.0的android的demo源码

请参考如下WIKI页面,基本上目前有提供的BLE的参考代码都集中到这个页面了:http://processors.wiki.ti.com/index.php/Category:BluetoothLE

❹ 如何实现Android蓝牙开发 自动配对连接,并不弹出提示框

实现android蓝牙开发 自动配对连接,并不弹出提示框: 源码 BluetoothDevice 类中还有两个隐藏方法:cancelBondProcess()和cancelPairingUserInput(),这两个方法一个是取消配对进程一个是取消用户输入 下面是自动配对的代码 Mainfest,xml注册 <receiver android:name="." > <intent-filter> <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" /> </intent-filter> </receiver> 自己在收到广播时处理并将预先输入的密码设置进去 public class extends BroadcastReceiver { String strPsw = "0"; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if (intent.getAction().equals( "android.bluetooth.device.action.PAIRING_REQUEST")) { BluetoothDevice btDevice = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // byte[] pinBytes = BluetoothDevice.convertPinToBytes("1234"); // device.setPin(pinBytes); Log.i("tag11111", "ddd"); try { ClsUtils.setPin(btDevice.getClass(), btDevice, strPsw); // 手机和蓝牙采集器配对 ClsUtils.createBond(btDevice.getClass(), btDevice); ClsUtils.cancelPairingUserInput(btDevice.getClass(), btDevice); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } <b>/************************************ 蓝牙配对函数 * **************/ import java.lang.reflect.Field; import java.lang.reflect.Method; import android.bluetooth.BluetoothDevice; import android.util.Log; public class ClsUtils { /** * 与设备配对 参考源码:platform/packages/apps/Settings.git * /Settings/src/com/android/settings/bluetooth/CachedBluetoothDevice.java */ static public boolean createBond(Class btClass, BluetoothDevice btDevice) throws Exception { Method createBondMethod = btClass.getMethod("createBond"); Boolean returnValue = (Boolean) createBondMethod.invoke(btDevice); return returnValue.booleanValue(); } /** * 与设备解除配对 参考源码:platform/packages/apps/Settings.git * /Settings/src/com/android/settings/bluetooth/CachedBluetoothDevice.java */ static public boolean removeBond(Class btClass, BluetoothDevice btDevice) throws Exception { Method removeBondMethod = btClass.getMethod("removeBond"); Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice); return returnValue.booleanValue(); } static public boolean setPin(Class btClass, BluetoothDevice btDevice, String str) throws Exception { try { Method removeBondMethod = btClass.getDeclaredMethod("setPin", new Class[] {byte[].class}); Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice, new Object[] {str.getBytes()}); Log.e("returnValue", "" + returnValue); } catch (SecurityException e) { // throw new RuntimeException(e.getMessage()); e.printStackTrace(); } catch (IllegalArgumentException e) { // throw new RuntimeException(e.getMessage()); e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return true; } // 取消用户输入 static public boolean cancelPairingUserInput(Class btClass, BluetoothDevice device) throws Exception { Method createBondMethod = btClass.getMethod("cancelPairingUserInput"); // cancelBondProcess() Boolean returnValue = (Boolean) createBondMethod.invoke(device); return returnValue.booleanValue(); } // 取消配对 static public boolean cancelBondProcess(Class btClass, BluetoothDevice device) throws Exception { Method createBondMethod = btClass.getMethod("cancelBondProcess"); Boolean returnValue = (Boolean) createBondMethod.invoke(device); return returnValue.booleanValue(); } /** * * @param clsShow */ static public void printAllInform(Class clsShow) { try { // 取得所有方法 Method[] hideMethod = clsShow.getMethods(); int i = 0; for (; i < hideMethod.length; i++) { Log.e("method name", hideMethod[i].getName() + ";and the i is:" + i); } // 取得所有常量 Field[] allFields = clsShow.getFields(); for (i = 0; i < allFields.length; i++) { Log.e("Field name", allFields[i].getName()); } } catch (SecurityException e) { // throw new RuntimeException(e.getMessage()); e.printStackTrace(); } catch (IllegalArgumentException e) { // throw new RuntimeException(e.getMessage()); e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }</b> 执行时直接使用: <b>public static boolean pair(String strAddr, String strPsw) { boolean result = false; BluetoothAdapter bluetoothAdapter = BluetoothAdapter .getDefaultAdapter(); bluetoothAdapter.cancelDiscovery(); if (!bluetoothAdapter.isEnabled()) { bluetoothAdapter.enable(); } if (!BluetoothAdapter.checkBluetoothAddress(strAddr)) { // 检查蓝牙地址是否有效 Log.d("mylog", "devAdd un effient!"); } BluetoothDevice device = bluetoothAdapter.getRemoteDevice(strAddr); if (device.getBondState() != BluetoothDevice.BOND_BONDED) { try { Log.d("mylog", "NOT BOND_BONDED"); ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对 ClsUtils.createBond(device.getClass(), device); remoteDevice = device; // 配对完毕就把这个设备对象传给全局的remoteDevice result = true; } catch (Exception e) { // TODO Auto-generated catch block Log.d("mylog", "setPiN failed!"); e.printStackTrace(); } // } else { Log.d("mylog", "HAS BOND_BONDED"); try { ClsUtils.createBond(device.getClass(), device); ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对 ClsUtils.createBond(device.getClass(), device); remoteDevice = device; // 如果绑定成功,就直接把这个设备对象传给全局的remoteDevice result = true; } catch (Exception e) { // TODO Auto-generated catch block Log.d("mylog", "setPiN failed!"); e.printStackTrace(); } } return result; }

❺ Android开发之蓝牙(Bluetooth)

在上一篇中有介绍了Wifi与网络连接处理
Android开发之WiFi与网络连接处理
下面,来继续说说Android中蓝牙的基本使用。

Bluetooth是目前使用的最广泛的无线通讯协议之一,主要针对短距离设备通讯(10米),常用于连接耳机、鼠标和移动通讯设备等。

值得一提的是:
android4.2新增了部分新功能,但是对于Bluetooth熟悉的人或许开始头疼了,那就是Android4.2引入了一个新的蓝牙协议栈针BLE。谷歌和Broadcom之间的合作,开发新的蓝牙协议栈,取代了基于堆栈的Bluez。因此市场上出现了老设备的兼容问题,很多蓝牙设备在android4.2手机上不能正常使用。

BluetoothAdapter简单点来说就是代表了本设备(手机、电脑等)的蓝牙适配器对象。

first:we need permission
要操作蓝牙,先要在AndroidManifest.xml里加入权限

**下面来看看如何使用蓝牙。 **↓↓↓****
Demo已就绪:

返回值:如果设备具备蓝牙功能,返回BluetoothAdapter 实例;否则,返回null对象。

打开蓝牙设备的方式:
1.直接调用函数enable()去打开蓝牙设备 ;
2.系统API去打开蓝牙设备,该方式会弹出一个对话框样式的Activity供用户选择是否打开蓝牙设备。

注意: 1.如果蓝牙已经开启,不会弹出该Activity界面。2.在目前大多数Android手机中,是不支持在飞行模式下开启蓝牙的。如果蓝牙已经开启,那么蓝牙的开关 ,状态会随着飞行模式的状态而发生改变。

1. 搜索蓝牙设备
使用BluetoothAdapter的startDiscovery()方法来搜索蓝牙设备
startDiscovery()方法是一个异步方法,调用后会立即返回。该方法会进行对其他蓝牙设备的搜索,该过程会持续12秒。该方法调用后,搜索过程实际上是在一个System Service中进行的,所以可以调用cancelDiscovery()方法来停止搜索(该方法可以在未执行discovery请求时调用)。

系统开始搜索蓝牙设备
^( *  ̄(oo) ̄ ) ^ 系统会发送以下三个广播:

2.扫描设备

3.定义广播接收器接收搜索结果

4.注册广播

获取附近的蓝牙设备

第一步建立连接:首先Android sdk(2.0以上版本)支持的蓝牙连接是通过BluetoothSocket建立连接,服务端BluetoothServerSocket和客户端(BluetoothSocket)需指定同样的UUID,才能建立连接,因为建立连接的方法会阻塞线程,所以服务器端和客户端都应启动新线程连接。

(这里的服务端和客户端是相对来说的)
两个蓝牙设备之间的连接,则必须实现服务端与客户端的机制。
当两个设备在同一个RFCOMM channel下分别拥有一个连接的BluetoothSocket,这两个设备才可以说是建立了连接。

服务端设备与客户端设备获取BluetoothSocket的途径是不同的。
1,服务端设备是通过accepted一个incoming connection来获取的,
2,客户端设备则是通过打开一个到服务端的RFCOMM channel来获取的。

服务端
通过调用BluetoothAdapter的(String, UUID)方法来获取BluetoothServerSocket(UUID用于客户端与服务端之间的配对)

客户端
调用BluetoothService的(UUID)方法获取BluetoothSocket(该UUID应该同于服务端的UUID)。
调用BluetoothSocket的connect()方法(该方法为block方法),如果UUID同服务端的UUID匹配,并且连接被服务端accept,则connect()方法返回。

数据传递,通过以上操作,就已经建立的BluetoothSocket连接了,数据传递无非是通过流的形式
获取流

该类就是关于远程蓝牙设备的一个描述。通过它可以和本地蓝牙设备---BluetoothAdapter连接通信。

好多东西我也不知道怎么描述,下面给出Demo:
刚好有刚学习的小伙伴问我ListView怎么用,那我就用ListView。

源码:
RairDemo
GitHub: https://github.com/Rairmmd/android-demo
Coding: https://coding.net/u/Rair/p/RairDemo/git

❻ 谁能给一份开发基于蓝牙4.0的android的demo源码

这个就是蓝牙通信的demo

源代码给上传了,请采纳


❼ 如何实现android蓝牙开发 自动配对连接,并不弹出提示框

我就开始查找怎么关闭这个蓝牙配对提示框,后面还是伟大的android源码帮助了我。
在源码 BluetoothDevice 类中还有两个隐藏方法
cancelBondProcess()和cancelPairingUserInput()
这两个方法一个是取消配对进程一个是取消用户输入
下面是自动配对的代码
Mainfest,xml注册

1 <</code>receiver android:name="." >
2 <</code>intent-filter>
3 <</code>action android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
4 </</code>intent-filter>
5 </</code>receiver>
自己在收到广播时处理并将预先输入的密码设置进去

01 public class extends BroadcastReceiver
02 {
03
04 String strPsw = "0";
05
06 @Override
07 public void onReceive(Context context, Intent intent)
08 {
09 // TODO Auto-generated method stub
10 if (intent.getAction().equals(
11 "android.bluetooth.device.action.PAIRING_REQUEST"))
12 {
13 BluetoothDevice btDevice = intent
14 .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
15
16 // byte[] pinBytes = BluetoothDevice.convertPinToBytes("1234");
17 // device.setPin(pinBytes);
18 Log.i("tag11111", "ddd");
19 try
20 {
21 ClsUtils.setPin(btDevice.getClass(), btDevice, strPsw); // 手机和蓝牙采集器配对
22 ClsUtils.createBond(btDevice.getClass(), btDevice);
23 ClsUtils.cancelPairingUserInput(btDevice.getClass(), btDevice);
24 }
25 catch (Exception e)
26 {
27 // TODO Auto-generated catch block
28 e.printStackTrace();
29 }
30 }
31
32
33 }
34 }

001
002 import java.lang.reflect.Field;
003 import java.lang.reflect.Method;
004
005 import android.bluetooth.BluetoothDevice;
006 import android.util.Log;
007 public class ClsUtils
008 {
009
010
014 static public boolean createBond(Class btClass, BluetoothDevice btDevice)
015 throws Exception
016 {
017 Method createBondMethod = btClass.getMethod("createBond");
018 Boolean returnValue = (Boolean) createBondMethod.invoke(btDevice);
019 return returnValue.booleanValue();
020 }
021
022
026 static public boolean removeBond(Class btClass, BluetoothDevice btDevice)
027 throws Exception
028 {
029 Method removeBondMethod = btClass.getMethod("removeBond");
030 Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice);
031 return returnValue.booleanValue();
032 }
033
034 static public boolean setPin(Class btClass, BluetoothDevice btDevice,
035 String str) throws Exception
036 {
037 try
038 {
039 Method removeBondMethod = btClass.getDeclaredMethod("setPin",
040 new Class[]
041 {byte[].class});
042 Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice,
043 new Object[]
044 {str.getBytes()});
045 Log.e("returnValue", "" + returnValue);
046 }
047 catch (SecurityException e)
048 {
049 // throw new RuntimeException(e.getMessage());
050 e.printStackTrace();
051 }
052 catch (IllegalArgumentException e)
053 {
054 // throw new RuntimeException(e.getMessage());
055 e.printStackTrace();
056 }
057 catch (Exception e)
058 {
059 // TODO Auto-generated catch block
060 e.printStackTrace();
061 }
062 return true;
063
064 }
065
066 // 取消用户输入
067 static public boolean cancelPairingUserInput(Class btClass,
068 BluetoothDevice device)
069
070 throws Exception
071 {
072 Method createBondMethod = btClass.getMethod("cancelPairingUserInput");
073 // cancelBondProcess()
074 Boolean returnValue = (Boolean) createBondMethod.invoke(device);
075 return returnValue.booleanValue();
076 }
077
078 // 取消配对
079 static public boolean cancelBondProcess(Class btClass,
080 BluetoothDevice device)
081
082 throws Exception
083 {
084 Method createBondMethod = btClass.getMethod("cancelBondProcess");
085 Boolean returnValue = (Boolean) createBondMethod.invoke(device);
086 return returnValue.booleanValue();
087 }
088
089
093 static public void printAllInform(Class clsShow)
094 {
095 try
096 {
097 // 取得所有方法
098 Method[] hideMethod = clsShow.getMethods();
099 int i = 0;
100 for (; i < hideMethod.length; i++)
101 {
102 Log.e("method name", hideMethod[i].getName() + ";and the i is:"
103 + i);
104 }
105 // 取得所有常量
106 Field[] allFields = clsShow.getFields();
107 for (i = 0; i < allFields.length; i++)
108 {
109 Log.e("Field name", allFields[i].getName());
110 }
111 }
112 catch (SecurityException e)
113 {
114 // throw new RuntimeException(e.getMessage());
115 e.printStackTrace();
116 }
117 catch (IllegalArgumentException e)
118 {
119 // throw new RuntimeException(e.getMessage());
120 e.printStackTrace();
121 }
122 catch (Exception e)
123 {
124 // TODO Auto-generated catch block
125 e.printStackTrace();
126 }
127 }
128 }
执行时直接使用:

01 public static boolean pair(String strAddr, String strPsw)
02 {
03 boolean result = false;
04 BluetoothAdapter bluetoothAdapter = BluetoothAdapter
05 .getDefaultAdapter();
06
07 bluetoothAdapter.cancelDiscovery();
08
09 if (!bluetoothAdapter.isEnabled())
10 {
11 bluetoothAdapter.enable();
12 }
13
14 if (!BluetoothAdapter.checkBluetoothAddress(strAddr))
15 { // 检查蓝牙地址是否有效
16
17 Log.d("mylog", "devAdd un effient!");
18 }
19
20 BluetoothDevice device = bluetoothAdapter.getRemoteDevice(strAddr);
21
22 if (device.getBondState() != BluetoothDevice.BOND_BONDED)
23 {
24 try
25 {
26 Log.d("mylog", "NOT BOND_BONDED");
27 ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对
28 ClsUtils.createBond(device.getClass(), device);
29 remoteDevice = device; // 配对完毕就把这个设备对象传给全局的remoteDevice
30 result = true;
31 }
32 catch (Exception e)
33 {
34 // TODO Auto-generated catch block
35
36 Log.d("mylog", "setPiN failed!");
37 e.printStackTrace();
38 } //
39
40 }
41 else
42 {
43 Log.d("mylog", "HAS BOND_BONDED");
44 try
45 {
46 ClsUtils.createBond(device.getClass(), device);
47 ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对
48 ClsUtils.createBond(device.getClass(), device);
49 remoteDevice = device; // 如果绑定成功,就直接把这个设备对象传给全局的remoteDevice
50 result = true;
51 }
52 catch (Exception e)
53 {
54 // TODO Auto-generated catch block
55 Log.d("mylog", "setPiN failed!");
56 e.printStackTrace();
57 }
58 }
59 return result;
60 }

❽ 蓝牙芯片最大支撑多大的分辨率

经过几年的发展,蓝牙的应用已经很普遍,电脑、手机、汽车等等都有用到,蓝牙使短距离的通信变得简单,能实现的功能也渐渐变得复杂,网罗各色蓝牙相关制作,蓝牙耳机、蓝牙音响...........有基础有创新,读透便能更全面了解蓝牙技术。

智能WiFi小车开发技术大揭秘_智能WiFi小车_物联网开发工程师-创客学院

1、便携式手机移动蓝牙、wifi通讯MPOS机电源设计方案(原理图+PCB+bom等

MPOS机电源设计方案功能概述:

a) 该手机移动MPOS机电源通过采用1S1P锂电池来缩小其体积大小和设计成本,这样设计,有利于用户便于携带方便;

b) MPOS机电源采用负荷集成开关用于降低待机功耗,确保最大化电池使用寿命;

c) MPOS机电源电路采用USB c型充电端口,支持更高的功率输出和减少充电时间。

2、基于STM32蓝牙控制小车系统设计(硬件+源代码+论文)

该蓝牙控制小车是一个基于意法半导体与ARM公司生产的STM32F4 DISCOVERY开发板完成,外接集电机驱动模块、电源管理模块、stm32f4主控模块、蓝牙串口通信模块、android控制端模块。

电机驱动模块使用了两个L298N芯片来驱动4路电机,使能端连接4路来自主控板的PWM波信号,8个输入端接主控板的8个输出端口;

电源管理模块使用了LM2940-5.0芯片进行12V到5V的转换,12V用于电机模块的供电,5V用于蓝牙模块、传感器等的供电;

主控模块采用了MDK编辑程序,然后下载到主控板,实现硬件与软件的交互;

蓝牙串口通信模块则是采用了FBT06_LPDB针插蓝牙模块,与主控板进行串口通信,同时与android手机进行通信;

android控制端模块是一个集开启蓝牙、搜索蓝牙、控制小车等功能。

用户可以通过android控制端进行控制小车的运动,实现一些用户需要的功能和服务。

3、支持蓝牙4.0的智能恒温箱(半导体致冷)

1) 蓝牙芯片采用TI CC2541

2) 温度传感器用的是DS18B20

3) 制冷模块用的是半导体制冷片,就是饮水机里常用的那种

4) 外壳用的是亚克力切割的

5) 制冷效果还不错,我设置的恒定温度是4度,打开之后,温度迅速的降低到了4度。

6) 程序里设置了恒温功能,温度超过了指定温度,制冷片就开始工作。降到了指定温度,制冷片就停止了工作,够智能吧。欢迎各位同学直接拿去用。

4、软硬件开源制作Arino蓝牙智能手表,12864oled显示

闲暇时间试着用开源的arino做了一个蓝牙智能手表,简述过程把经验分享给大家,这个蓝牙手表可以显示时间,连接手机显示通知数量,电池,wifi等。

Arino蓝牙智能手表硬件如下:

Arino pro mini开发板一块

hc-06蓝牙模块

12864oled显示屏

锂电池

USB转TTL 调试器

导线,烙铁等

5、DIY制作智能蓝牙防丢定位器(详细制作教程+安卓app工程源码)

所谓智能蓝牙(Smart Bluetooth)防丢器,是采用蓝牙技术专门为智能手机设计的防丢器。其工作原理主要是通过距离变化来判断物品是否还控制在你的安全范围。主要适用于手机、钱包、钥匙、行李等贵重物品的防丢,也可用于防止儿童或宠物的走失。

蓝牙防丢器的主要构造:

目前比较成熟的产品一般是采用蓝牙4.0 技术,具有低功耗、双向防丢、自动报警等优点。虽然市场上该类产品种类繁多、层出不穷,但其核心构成一般包括:蓝牙4.0 芯片、蓝牙芯片辅助电路、蓝牙天线、蜂鸣器、开关、电源等。

该防丢器采用HC-05/06设计而成,并为之设计了配套的安卓应用。

6、蓝牙手机控制的懒人专用智能房间控制器设计资料(转载、开源原理图、源码)

硬件设计:使用的是单片机STC12C5A60S2,共有8路输入,其中4路是隔离的,低电平为开,输出也是8路,4个继电器,4个可控硅,为了简化可控硅的控制电路,采用5V的隔离电源隔开,有6个开关,开关1-5分别对应的4个可控硅及1个继电器输出,开关6是用于显示翻页及设置用,短按为翻页,长按为进入当前页的设置,再短按为改变设置项目,再长按为保存设置,开关5当处于设置时,就为调整参数,如不处于设置状态时,为继电器1控制。继电器2设置有一组定时开关功能,是采用触发方式的。显示用0.96寸的OLED显示器,温度湿度用DHT11模块。带有无线遥控功能……

7、蓝牙小车(摇杆控制)设计分享(原理图+源代码+制作教程等)

该小车基于arino开发环境,硬件组成包括BTboard开发板、摇杆扩展板、Mboard小车。

设计说明:

遥控方面的硬件很简单,BTboard是一款带蓝牙(兼容主从机模式)功能的uno开发板。摇杆扩展板,带按键,教程暂时没有使用到按键功能,小伙伴可以自行添加开发,控制灯光、打开摄像头等等。

给BTboard烧写控制代码,烧写前一定要把板子上的跳线帽拔掉,否则烧不进代码(board类型选择Arino Duemilanove),控制代码详见附件内容。

烧写完成,把跳线帽插到BTboard上的B的一边,开关拨到DAT的一边。(如截图)

最后把摇杆扩展板叠加上去,摇杆扩展板上的跳帽接到5V的一边,然后上电,USB供电用5V,适配器供电用9v-23V都可以。打开小车的开关,蓝牙就会自动配对,此时黄色指示灯常亮。试试转动摇杆吧!

8、安卓手机蓝牙通信源码+手机APP文件等

该设计是基于Kinetis开发板完成的安卓手机蓝牙通信功能。

具体介绍如下:

利用开发板的串口通信功能,实现开发板通过蓝牙与安卓手机进行通信的功能。蓝牙模块在淘宝上有很多,感兴趣的可以去淘宝上搜索,下面有我现在使用的蓝牙模块的资料以及配置蓝牙模块是的一写AT指令照片(包括修改蓝牙的串口通信波特率、奇偶校验模式等)。设计流程主要包括:蓝牙与开发板的连接,手机连接蓝牙模块,通信数据等等。附件内容包括手机APP文件及程序源码。

9、STM32实现的两轮自平衡车,蓝牙APP遥控(原理图、源代码、APP、视频)

两轮自平衡车特点:

小车底盘使用的是一体成型的钣金件,且表面做了黑色阳极化处理,更耐脏,更坚固,而非其他的使用亚克力固定电机座的做法。

上两层使用黑色亚克力,与底盘浑然一体,更加时尚美观。

电机光栅码盘有保护盖,避免了小车行进碰撞导致损坏光栅,如果光栅损坏了,小车想再站起来就不可能了。

使用的是减速电机而非步进电机,反应更迅速。

电路板完全自主设计成单板模式,而非模块拼凑。

使用安卓蓝牙APP进行遥控。

电路控制使用双主控,与现有市面上的载人两轮自平衡车方案相同,一颗用于运动控制,一颗用于姿态解算,具备更高的可靠性。

电路提供了2部分3.3V电源,一个用于姿态传感器单独供电,另一个用于除姿态传感器其他的所有部分3.3V电源,避免了电源交叉影响,给姿态解算带来了更高的精确度。

10、无线音频完整解决方案—蓝牙、兼备耳机和免提

描述 :此参考设计使用经过全面认证的 LMX9838 蓝牙模块提供完整的无线音频解决方案。实施了蓝牙耳机和免提模式,是单声道音频通信和控制的完美选择。由于支持可订购评估模块、内置蓝牙配置文件和免费支持软件,此经济高效且简单的设计可大幅加快产品上市步伐。TIDA-00186 设计基于 LMX9838DONGLE。

11、【PADS9.5】小钢炮蓝牙音箱BGA两层板设计

蓝牙模块使用的是RDA5850,是一个高度集成、低成本、低功耗的蓝牙立体声带通话功能+TF卡+FM+Line in全功能单芯片模块,符合Bluetooth2.1+EDR规范。同时预留有LCD点阵屏,还可以做mic录音,支持红外遥控等。

可以播放MP3/WMA/WAV/SBC;蓝牙立体声传输,蓝牙通话;TF/SD卡控制,支持USB(slave)功能,从而可以实现读卡器功能……其他更多详细功能可以参见数据书册(RDA5850数据手册)。

蓝牙音箱的市场价格大家都是知道的,不超过百元,硬件成本肯定不会超过50元,那么想想这个RDA5850的价格也如何低了,功能却如此强大。PCB是两层板,也省下了一笔成本。

12、智能蓝牙手表Oneda-Watch-2设计资料分享

Oneda-Watch-2智能手表采用联发科MTK6260设计方案

MTK6260特点:

1) 350MHz主频

2) 内置64M RAM,支持NAND FLASH,最大分辨率320*480

3) 内置128M FLASH,最大分辨率480*480

Oneda-Watch-2功能特点:1.54英寸240*240像素,支持音乐播放、通话、计步器、睡眠监测、久坐提醒,支持蓝牙3.0

13、手机蓝牙控制LED广告屏电路设计分享

该设计实现的功能是:

手机通过蓝牙连接方式控制LED广告屏,无需电脑,能够随时更改屏幕显示内容,显示方式等。LED屏是在网上淘的二手F3.75双色LED显示屏。自己做得是个基于LM3S811的LED屏控制驱动器。

14、分享蓝牙4.0防丢器源码+原理图+PCB源文件+视频讲解

蓝牙4.0防丢器概述:

该蓝牙4.0 防丢器基于GB2540模块设计。GB254X 是一款采用美国德州仪器 TI 蓝牙 4.0 CC2540 or CC2541作为核心处理器的高性能、超低功耗(Bluetooth Low Energy)射频收发系统模块,遵循低功耗蓝牙协议,适合单模式低功耗蓝牙应用。

具体功能是:

出围栏模式:当手机和防丢器连接时,如果信号强度小于手机设定值或无信号,手机响,防丢器响。

入围栏模式:当手机扫描到防丢器时,如果信号强度大于手机设定值,手机响,防丢器响。

来电提醒功能:当手机来电,防丢器蜂鸣器响,这样冬天手机放包包里,就不会听不到啦。

15、无线键鼠 蓝牙飞鼠 空中飞鼠 基于 Kinetis Cortex-M0+ MCU设计(源码开源)

蓝牙无线空中键鼠,能够同时实现传统的键盘和鼠标双功能。它的空中使用功能,可以将你从电脑、电视旁边彻底解放出来,只需要通过在空中挥动RC16空鼠,就迅速响应转换成在屏幕上的光标移动,使用3D陀螺仪完美结合,用户可以以360度随意精准操作。手持操作手感舒适、方便,完全避免了传统鼠标需要以静止的桌面为参照物操作或红外遥控器按键操作的弊端,让您躺着玩电脑、电视都不累,轻松休闲,完全 “掌”控你的电脑、电视娱乐

飞思卡尔蓝牙飞鼠以Kinetis KL16单片机、加速度计、陀螺仪和电子罗盘为基础,并通过蓝牙与目标主机通信。使用了蓝牙 HID/HFP/SSP配置文件,并可以将鼠标和键盘的输入数据和传感器数据发送至目标主机。

16、手感遥控车 蓝牙无线 51单片机控制

本制作以STC89C52RC单片机和ADXL345(ADXL345数据手册)加速度模块。加速度模块固定在手上时,当手向左倾斜,小车左转;手向右倾斜,小车右转;手向前倾斜,小车前进;手向后倾斜,小车倒退;手水平不动,小车停止任何动作。有效控制范围 10米(开阔地)。

原理:ADXL345加速度模块可以测量X Y Z三轴的加速度和倾角。人的手做动作时,势必会改变模块的加速度大小和倾角。由于测量加速度较繁琐,所以测量的是倾角数据。当倾角数据满足一定范围时,通过蓝牙模块传输控制指令到小车,实现小车的动作。

17、全彩LED灯时钟设计,蓝牙控制(硬件+APP+硬件驱动+BOM等)

探索者号智能自平衡车_嵌入式-创客学院
辉光管使用了 QS30-1,通过四个氖灯显示时间的冒号。每个辉光管下面各安装一个全彩 LED,可控制其显示颜色。该时钟使用MC34063ADR2G电源芯片,配合 MOS 管和电感等构成 DC-DC 升压电路,将 12V 电压升至 170V,供辉光管使用。通过 HV57708PG 驱动辉光管。LPD6803用于控制全彩 LED。主控芯片采用 STC15F2K60S2,时钟芯片采用 SD2405ALPI,蓝牙电路模块采用 RF-BM-S02(具体详见整个蓝牙控制控制全彩LED灯电路设计)。

18、(课程设计)自制蓝牙MP3电路+源程序+课程设计报告

本课程设计是基于MCS51系列单片机所设计的,用STC89C52芯片控制的智能数字音乐盒,整个系统可以由电路硬件控制,也可由Android手机客户端软件进行控制。本系统包括STC89C52单片机最小系统、按键电路、蜂鸣器及LCD1602显示电路、蓝牙模块、安卓手机客户端组成,共可以播放6首歌曲,按键电路可以实现进入蓝牙控制、播放、暂停、下一首等功能,手机客户端可以实现释放蓝牙控制、上一首、下一首、播放等功能;LCD1602可以显示正在播放的歌曲和时间,蜂鸣器播放音乐。其中手机客户端是由谷歌公司开发的手机编程软件AppInventor开发的。

❾ 安卓手机间蓝牙文件传输 源码

请在Eclipse的ADT中安装官方相关API的SDK,有若干个蓝牙demo。

❿ 谁能给一份开发基于蓝牙4.0的android的demo源码

android蓝牙串口通信的demo源码已经增加到附件啊,可以直接下载运行的。


阅读全文

与安卓蓝牙开发源码相关的资料

热点内容
gcc编译vi文件 浏览:61
安卓连airpods怎么找耳机 浏览:925
加密货币转账教程 浏览:227
程序员小灰hashmap 浏览:836
国语pdf版 浏览:182
少儿编程作品美丽的小房子 浏览:970
服务器卡在网页上怎么办 浏览:54
用python自制编译器 浏览:951
android分享新浪微博客户端 浏览:26
系统中服务器在哪里下载地址 浏览:1001
新a4安卓手机怎么投屏 浏览:173
pdftoemf 浏览:886
java接口可以实现接口吗 浏览:59
vb编程10个随机函数 浏览:21
程序员个人简介100 浏览:772
土木工程师算法工程师 浏览:92
javaexcel导入oracle 浏览:880
如何设置异地服务器 浏览:882
为什么安卓手机蓝牙耳机不会弹窗 浏览:547
linuxf77编译器安装教程 浏览:949