精华内容
下载资源
问答
  • BLE是蓝牙4.0的核心Profile,主打功能是快速搜索,快速连接,超低功耗保持连接和传输数据,弱点是数据传输速率低,由于BLE的低功耗特点,因此普遍用于穿戴设备。Android 4.3才开始支持BLE API,所以请各位客官把本文...
  • 利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备因特网Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。蓝牙采用分散式网络结构以及快跳频和短包技术...
  • BLE是蓝牙4.0的核心Profile,主打功能是快速搜索,快速连接,超低功耗保持连接和传输数据,弱点是数据传输速率低,由于BLE的低功耗特点,因此普遍用于穿戴设备。Android 4.3才开始支持BLE API,所以请各位客官把本文...
  • BLE是蓝牙4.0的核心Profile,主打功能是快速搜索,快速连接,超低功耗保持连接和传输数据,弱点是数据传输速率低,由于BLE的低功耗特点,因此普遍用于穿戴设备。Android 4.3才开始支持BLE API,所以请各位客官把本文...
  • 利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备因特网Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。蓝牙采用分散式网络结构以及快跳频和短包技术...
  • CSR宣布AvantWave公司的蓝牙v2.0 + EDR(增强型数据速率)模块采用了CSR公司的BlueCore4-ROM芯片,实现的无线数据速率达到3Mbps。该获奖产品Bluetron:trade_mark: BTR300S蓝牙SiP(系统级封装)现已上市销售,它一...
  • 可提供传统有线局域网的所有功能,它是计算机网络无线通信技术相结合的产物,它为通用无线接入的一个子集,它支持较高传输速率(2--54Mbit/s,甚至更高),利用射频无线电或红外线,借助直接序列扩频(DSSS)或跳频...
  • 个人生产设备的快速蔓延趋势正在不断加强,伴随着这个趋势,使用蓝牙的设备也在不断的增长。和其他流行的技术一样,蓝牙正日渐成为黑客的攻击目标。...而实际使用中的数据传输速率一般肯定会低于这个极限数
  • Android BLE开发之Android手机与BLE终端通信 程序文件

    千次下载 热门讨论 2014-04-21 20:06:20
    BLE是蓝牙4.0的核心Profile,主打功能是快速搜索,快速连接,超低功耗保持连接和传输数据,弱点是数据传输速率低,由于BLE的低功耗特点,因此普遍用于穿戴设备。Android 4.3才开始支持BLE API,所以请各位客官把本文...
  • 蓝牙基础知识

    2016-01-28 13:12:00
    从图 1-1 中可以看到不同的无线数据传输协议在数据传输速率利传输距离有各自的使用范围... ·传统蓝牙数据传输速率小于 3Mbps,典型数据传输距离为 2-10m,蓝牙技术的典型应用是在两部手机之间进行小量数据的传输。...

       从图 1-1 中可以看到不同的无线数据传输协议在数据传输速率利传输距离有各自的使用范围。Zigbee、蓝牙以及 WIFI 标准都是工作在 2.4GHz 频段的无线通信标准。下面将 BLE 与传统蓝牙、WIFI 标准进行简要的比较,帮助读者快速地了解。
        ·传统蓝牙数据传输速率小于 3Mbps,典型数据传输距离为 2-10m,蓝牙技术的典型应用是在两部手机之间进行小量数据的传输。
        ·WIFI 最高数据传输速率可达 50Mbps,典型数据传输距离在 30-100m,WIFI 技术提供了一种 Intemet 的无线接入技术。

     

        BLE 是一种标准,该标准定义了短距离、低数据传输速率无线通信所需要的一系列通信协议。基于 BLE 的无线网络所使用的工作频段为 868MHz、915MHz 和 2.4GHz,最大数据传输速率为 250kbps。

     

    ☆Smart Ready 可以和 Smart Ready、传统蓝牙,及 Smart 之间相互连接和通信。
    ☆传统蓝牙可以和 Smart Ready、传统蓝牙之间连接和通信
    ☆Smart 可以和 Smart、Smart Ready 之间连接和通信

    C2540 是 BLE 单模芯片,属于 Smart,所以只能和 Smart Ready 或者 Smart 之间连接和通信,CC2540是不兼容传统蓝牙的。

    (1)高可靠性

      对于无线通信而言,由于电磁波在传输过程中容易受很多因素的干扰,例如,障碍物的阻挡、天气状况等,因此,无线通信系统在数据传输过程中具有内在的不可靠性。蓝牙技术联盟 SIG 在指定蓝牙 4.0 规范时已经考虑到了这种数据传输过程中的内在的不确定性,在射频,基带协议,链路管理协议中采用可靠性措施,包括:差错检测和矫正,进行数据编解码,数据降噪等,极大地提高了蓝牙无线数据传输的可靠性,另外,使用自适应调频技术,能最大程度地减少和其他 2.4G 无线电波的串扰。

    (2)低成本、低功耗

       低功耗蓝牙支持两种部署方式:双模式和单模式,一般智能机上采用双模式,外设一般采用 BLE 单模,例如采用 CC254x 作为 BLE 从机的计步器血压计和iBeacon基站等等。BLE 技术可以应用于 8-bit MCU, 目前 TI 公司推出的兼容 BluetoothLE 协议的 SoC芯片 CC254X 每片价格在 7.6 元左右, 外接几个阻容器件构成的滤波电路和PCB 天线.低功耗设计:蓝牙 4.0 版本强化了蓝牙在数据传输上的低功耗性能,功耗较传统蓝牙降低了 90%。

    ☆传统蓝牙设备的待机耗电量一直是其缺陷之一,这与传统蓝牙技术采用 16至32个频道进行广播有很大关系,而低功耗蓝牙仅适用 3 个广播通道,且每次广播时射频的启时间也有传统的 22.5ms 减少到 0.6~1.2ms,这两个协议规范的改变,大幅降低了因为广播数据导致的待机功耗。

    ☆低功耗蓝牙设计用深度睡眠状态来替换传统蓝牙的空闲状态,在深度睡眠状态下,主机 Host 长时间处于超低的负载循环 Duty Cycle 状态,只在需要运作时由控制器来启动,由于主机较控制器消耗的能源更多,因此这样的设计也节省了更多的能源。

    (3)快速启动、瞬间连接此前蓝牙版本的启动速度非常缓慢,2.1 版本的蓝牙启动连接需要 6s 时间,而蓝牙4.0 版本仅需要 3ms 即可完成,几乎是瞬间连接。

    (4)传输距离极大提供传统蓝牙传输距离一般 2-10m,而蓝牙 4.0 的有效传输距离可以达到 60~100m,传输距离提升了 10 倍,极大开拓了蓝牙技术的应用前景。

    (5)高安全性

    为了保证数据传输的安全性,使用 AES-128 CCM 加密算法进行数据包加密认证,对于初学阶段,安全性问题可以暂时不考虑。即可实现网络节点的构建。Nodic的NRF51822也不过才10元人民币。

     

    转载于:https://www.cnblogs.com/yygsj/p/5165882.html

    展开全文
  • BlueMoon UniCellular芯片所具备的增强数据级特性,能够使手机实现无线多媒体功能,在长达10米的距离内,以超过当今传输速度两倍的速度其他个人电子设备交换数据。实际数据速率从721Kbps提高到2.
  • 在多个从设备需要一个主设备进行对话的无线通信应用中,蓝牙低功耗(BLE)协议已毫无疑问成为它们的理想选择。其它通信协议相比,BLE具备以下优势: ... 数据传输速率高达1Mbps。  这些优势让BLE成为物联网设备
  • 利用"蓝牙"技术,能够有效地简化掌上电脑、笔记本电脑和移动电话手机等移动通信终端设备之间的通信,也能够成功地简化以上这些设备因特网Internet之间的通信,从而使这些现代通信设备因特网之间的数据传输变得...
  • Android BLE开发之Android手机与BLE终端通信

    万次阅读 多人点赞 2014-04-21 20:22:28
    BLE是蓝牙4.0的核心Profile,主打功能是快速搜索,快速连接,超低功耗保持连接和传输数据,弱点是数据传输速率低,由于BLE的低功耗特点,因此普遍用于穿戴设备。Android 4.3才开始支持BLE API,所以请各位客官把本文...

    本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

    最近穿戴设备发展得很火,把相关技术也带旺了,其中一项是BLE(Bluetooth Low Energy)。BLE是蓝牙4.0的核心Profile,主打功能是快速搜索,快速连接,超低功耗保持连接和传输数据,弱点是数据传输速率低,由于BLE的低功耗特点,因此普遍用于穿戴设备。Android 4.3才开始支持BLE API,所以请各位客官把本文代码运行在蓝牙4.0和Android 4.3及其以上的系统,另外本文所用的BLE终端是一个蓝牙4.0的串口蓝牙模块。

    PS:我的i9100刷了4.4系统后,竟然也能跟BLE蓝牙模块通信。


    BLE分为三部分Service、Characteristic、Descriptor,这三部分都由UUID作为唯一标示符。一个蓝牙4.0的终端可以包含多个Service,一个Service可以包含多个Characteristic,一个Characteristic包含一个Value和多个Descriptor,一个Descriptor包含一个Value。一般来说,Characteristic是手机与BLE终端交换数据的关键,Characteristic有较多的跟权限相关的字段,例如PERMISSION和PROPERTY,而其中最常用的是PROPERTY,本文所用的BLE蓝牙模块竟然没有标准的Characteristic的PERMISSION。Characteristic的PROPERTY可以通过位运算符组合来设置读写属性,例如READ|WRITE、READ|WRITE_NO_RESPONSE|NOTIFY,因此读取PROPERTY后要分解成所用的组合(本文代码已含此分解方法)。


    本文代码改自Android 4.3 Sample的BluetoothLeGatt,把冗余代码去掉,获取的BLE设备信息都通过Log,还有一些必要的读写蓝牙方法,应该算是简化到大家一看就可以懂了。本文代码可以到http://download.csdn.net/detail/hellogv/7228819下载。接下来贴出本文运行的结果,首先是连接BLE设备后,枚举出设备所有Service、Characteristic、Descriptor,并且手机会往Characteristic uuid=0000ffe1-0000-1000-8000-00805f9b34fb写入“send data->”字符串,BLE终端收到数据通过串口传到PC串口助手(见PC串口助手的截图):

    04-21 18:28:25.465: E/DeviceScanActivity(12254): -->service type:PRIMARY
    04-21 18:28:25.465: E/DeviceScanActivity(12254): -->includedServices size:0
    04-21 18:28:25.465: E/DeviceScanActivity(12254): -->service uuid:00001800-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.465: E/DeviceScanActivity(12254): ---->char uuid:00002a00-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.465: E/DeviceScanActivity(12254): ---->char permission:UNKNOW
    04-21 18:28:25.465: E/DeviceScanActivity(12254): ---->char property:READ
    04-21 18:28:25.465: E/DeviceScanActivity(12254): ---->char uuid:00002a01-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.470: E/DeviceScanActivity(12254): ---->char permission:UNKNOW
    04-21 18:28:25.470: E/DeviceScanActivity(12254): ---->char property:READ
    04-21 18:28:25.470: E/DeviceScanActivity(12254): ---->char uuid:00002a02-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.470: E/DeviceScanActivity(12254): ---->char permission:UNKNOW
    04-21 18:28:25.470: E/DeviceScanActivity(12254): ---->char property:READ|WRITE|
    04-21 18:28:25.470: E/DeviceScanActivity(12254): ---->char uuid:00002a03-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.470: E/DeviceScanActivity(12254): ---->char permission:UNKNOW
    04-21 18:28:25.475: E/DeviceScanActivity(12254): ---->char property:READ|WRITE|
    04-21 18:28:25.475: E/DeviceScanActivity(12254): ---->char uuid:00002a04-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.475: E/DeviceScanActivity(12254): ---->char permission:UNKNOW
    04-21 18:28:25.475: E/DeviceScanActivity(12254): ---->char property:READ
    04-21 18:28:25.475: E/DeviceScanActivity(12254): -->service type:PRIMARY
    04-21 18:28:25.475: E/DeviceScanActivity(12254): -->includedServices size:0
    04-21 18:28:25.475: E/DeviceScanActivity(12254): -->service uuid:00001801-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.480: E/DeviceScanActivity(12254): ---->char uuid:00002a05-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.480: E/DeviceScanActivity(12254): ---->char permission:UNKNOW
    04-21 18:28:25.480: E/DeviceScanActivity(12254): ---->char property:INDICATE
    04-21 18:28:25.480: E/DeviceScanActivity(12254): -------->desc uuid:00002902-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.480: E/DeviceScanActivity(12254): -------->desc permission:UNKNOW
    04-21 18:28:25.480: E/DeviceScanActivity(12254): -->service type:PRIMARY
    04-21 18:28:25.480: E/DeviceScanActivity(12254): -->includedServices size:0
    04-21 18:28:25.480: E/DeviceScanActivity(12254): -->service uuid:0000ffe0-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.480: E/DeviceScanActivity(12254): ---->char uuid:0000ffe1-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.480: E/DeviceScanActivity(12254): ---->char permission:UNKNOW
    04-21 18:28:25.480: E/DeviceScanActivity(12254): ---->char property:READ|WRITE_NO_RESPONSE|NOTIFY|
    04-21 18:28:25.490: E/DeviceScanActivity(12254): -------->desc uuid:00002902-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.490: E/DeviceScanActivity(12254): -------->desc permission:UNKNOW
    04-21 18:28:25.490: E/DeviceScanActivity(12254): -------->desc uuid:00002901-0000-1000-8000-00805f9b34fb
    04-21 18:28:25.490: E/DeviceScanActivity(12254): -------->desc permission:UNKNOW
    04-21 18:28:26.025: E/DeviceScanActivity(12254): onCharRead BLE DEVICE read 0000ffe1-0000-1000-8000-00805f9b34fb -> 00

    这里红字是由BluetoothGattCallback的onCharacteristicRead()回调而打出Log




    以下Log是PC上的串口工具通过BLE模块发送过来,由BluetoothGattCallback的 onCharacteristicChanged()打出Log
    04-21 18:30:18.260: E/DeviceScanActivity(12254): onCharWrite BLE DEVICE write 0000ffe1-0000-1000-8000-00805f9b34fb -> send data to phone
    04-21 18:30:18.745: E/DeviceScanActivity(12254): onCharWrite BLE DEVICE write 0000ffe1-0000-1000-8000-00805f9b34fb -> send data to phone
    04-21 18:30:19.085: E/DeviceScanActivity(12254): onCharWrite BLE DEVICE write 0000ffe1-0000-1000-8000-00805f9b34fb -> send data to phone
    04-21 18:30:19.350: E/DeviceScanActivity(12254): onCharWrite BLE DEVICE write 0000ffe1-0000-1000-8000-00805f9b34fb -> send data to phone
    04-21 18:30:19.605: E/DeviceScanActivity(12254): onCharWrite BLE DEVICE write 0000ffe1-0000-1000-8000-00805f9b34fb -> send data to phone
    04-21 18:30:19.835: E/DeviceScanActivity(12254): onCharWrite BLE DEVICE write 0000ffe1-0000-1000-8000-00805f9b34fb -> send data to phone
    04-21 18:30:20.055: E/DeviceScanActivity(12254): onCharWrite BLE DEVICE write 0000ffe1-0000-1000-8000-00805f9b34fb -> send data to phone
    04-21 18:30:20.320: E/DeviceScanActivity(12254): onCharWrite BLE DEVICE write 0000ffe1-0000-1000-8000-00805f9b34fb -> send data to phone
    04-21 18:30:20.510: E/DeviceScanActivity(12254): onCharWrite BLE DEVICE write 0000ffe1-0000-1000-8000-00805f9b34fb -> send data to phone
    04-21 18:30:20.735: E/DeviceScanActivity(12254): onCharWrite BLE DEVICE write 0000ffe1-0000-1000-8000-00805f9b34fb -> send data to phone
    04-21 18:30:21.000: E/DeviceScanActivity(12254): onCharWrite BLE DEVICE write 0000ffe1-0000-1000-8000-00805f9b34fb -> send data to phone

    接下来贴出本文核心代码:

    public class DeviceScanActivity extends ListActivity {
    	private final static String TAG = DeviceScanActivity.class.getSimpleName();
    	private final static String UUID_KEY_DATA = "0000ffe1-0000-1000-8000-00805f9b34fb";
    
        private LeDeviceListAdapter mLeDeviceListAdapter;
        /**搜索BLE终端*/
        private BluetoothAdapter mBluetoothAdapter;
        /**读写BLE终端*/
        private BluetoothLeClass mBLE;
        private boolean mScanning;
        private Handler mHandler;
    
        // Stops scanning after 10 seconds.
        private static final long SCAN_PERIOD = 10000;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getActionBar().setTitle(R.string.title_devices);
            mHandler = new Handler();
    
            // Use this check to determine whether BLE is supported on the device.  Then you can
            // selectively disable BLE-related features.
            if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
                Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
                finish();
            }
    
            // Initializes a Bluetooth adapter.  For API level 18 and above, get a reference to
            // BluetoothAdapter through BluetoothManager.
            final BluetoothManager bluetoothManager =
                    (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
            mBluetoothAdapter = bluetoothManager.getAdapter();
            
            // Checks if Bluetooth is supported on the device.
            if (mBluetoothAdapter == null) {
                Toast.makeText(this, R.string.error_bluetooth_not_supported, Toast.LENGTH_SHORT).show();
                finish();
                return;
            }
            //开启蓝牙
            mBluetoothAdapter.enable();
            
            mBLE = new BluetoothLeClass(this);
            if (!mBLE.initialize()) {
                Log.e(TAG, "Unable to initialize Bluetooth");
                finish();
            }
            //发现BLE终端的Service时回调
            mBLE.setOnServiceDiscoverListener(mOnServiceDiscover);
            //收到BLE终端数据交互的事件
            mBLE.setOnDataAvailableListener(mOnDataAvailable);
        }
    
    
        @Override
        protected void onResume() {
            super.onResume();
    
            // Initializes list view adapter.
            mLeDeviceListAdapter = new LeDeviceListAdapter(this);
            setListAdapter(mLeDeviceListAdapter);
            scanLeDevice(true);
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            scanLeDevice(false);
            mLeDeviceListAdapter.clear();
            mBLE.disconnect();
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            mBLE.close();
        }
        
        @Override
        protected void onListItemClick(ListView l, View v, int position, long id) {
            final BluetoothDevice device = mLeDeviceListAdapter.getDevice(position);
            if (device == null) return;
            if (mScanning) {
                mBluetoothAdapter.stopLeScan(mLeScanCallback);
                mScanning = false;
            }
            
            mBLE.connect(device.getAddress());
        }
    
        private void scanLeDevice(final boolean enable) {
            if (enable) {
                // Stops scanning after a pre-defined scan period.
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mScanning = false;
                        mBluetoothAdapter.stopLeScan(mLeScanCallback);
                        invalidateOptionsMenu();
                    }
                }, SCAN_PERIOD);
    
                mScanning = true;
                mBluetoothAdapter.startLeScan(mLeScanCallback);
            } else {
                mScanning = false;
                mBluetoothAdapter.stopLeScan(mLeScanCallback);
            }
            invalidateOptionsMenu();
        }
    
        /**
         * 搜索到BLE终端服务的事件
         */
        private BluetoothLeClass.OnServiceDiscoverListener mOnServiceDiscover = new OnServiceDiscoverListener(){
    
    		@Override
    		public void onServiceDiscover(BluetoothGatt gatt) {
    			displayGattServices(mBLE.getSupportedGattServices());
    		}
        	
        };
        
        /**
         * 收到BLE终端数据交互的事件
         */
        private BluetoothLeClass.OnDataAvailableListener mOnDataAvailable = new OnDataAvailableListener(){
    
        	/**
        	 * BLE终端数据被读的事件
        	 */
    		@Override
    		public void onCharacteristicRead(BluetoothGatt gatt,
    				BluetoothGattCharacteristic characteristic, int status) {
    			if (status == BluetoothGatt.GATT_SUCCESS) 
    				Log.e(TAG,"onCharRead "+gatt.getDevice().getName()
    						+" read "
    						+characteristic.getUuid().toString()
    						+" -> "
    						+Utils.bytesToHexString(characteristic.getValue()));
    		}
    		
    	    /**
    	     * 收到BLE终端写入数据回调
    	     */
    		@Override
    		public void onCharacteristicWrite(BluetoothGatt gatt,
    				BluetoothGattCharacteristic characteristic) {
    			Log.e(TAG,"onCharWrite "+gatt.getDevice().getName()
    					+" write "
    					+characteristic.getUuid().toString()
    					+" -> "
    					+new String(characteristic.getValue()));
    		}
        };
    
        // Device scan callback.
        private BluetoothAdapter.LeScanCallback mLeScanCallback =
                new BluetoothAdapter.LeScanCallback() {
    
            @Override
            public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mLeDeviceListAdapter.addDevice(device);
                        mLeDeviceListAdapter.notifyDataSetChanged();
                    }
                });
            }
        };
    
        private void displayGattServices(List<BluetoothGattService> gattServices) {
            if (gattServices == null) return;
    
            for (BluetoothGattService gattService : gattServices) {
            	//-----Service的字段信息-----//
            	int type = gattService.getType();
                Log.e(TAG,"-->service type:"+Utils.getServiceType(type));
                Log.e(TAG,"-->includedServices size:"+gattService.getIncludedServices().size());
                Log.e(TAG,"-->service uuid:"+gattService.getUuid());
                
                //-----Characteristics的字段信息-----//
                List<BluetoothGattCharacteristic> gattCharacteristics =gattService.getCharacteristics();
                for (final BluetoothGattCharacteristic  gattCharacteristic: gattCharacteristics) {
                    Log.e(TAG,"---->char uuid:"+gattCharacteristic.getUuid());
                    
                    int permission = gattCharacteristic.getPermissions();
                    Log.e(TAG,"---->char permission:"+Utils.getCharPermission(permission));
                    
                    int property = gattCharacteristic.getProperties();
                    Log.e(TAG,"---->char property:"+Utils.getCharPropertie(property));
    
                    byte[] data = gattCharacteristic.getValue();
            		if (data != null && data.length > 0) {
            			Log.e(TAG,"---->char value:"+new String(data));
            		}
    
            		//UUID_KEY_DATA是可以跟蓝牙模块串口通信的Characteristic
            		if(gattCharacteristic.getUuid().toString().equals(UUID_KEY_DATA)){        			
            			//测试读取当前Characteristic数据,会触发mOnDataAvailable.onCharacteristicRead()
            			mHandler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                            	mBLE.readCharacteristic(gattCharacteristic);
                            }
                        }, 500);
            			
            			//接受Characteristic被写的通知,收到蓝牙模块的数据后会触发mOnDataAvailable.onCharacteristicWrite()
            			mBLE.setCharacteristicNotification(gattCharacteristic, true);
            			//设置数据内容
            			gattCharacteristic.setValue("send data->");
            			//往蓝牙模块写入数据
            			mBLE.writeCharacteristic(gattCharacteristic);
            		}
            		
            		//-----Descriptors的字段信息-----//
    				List<BluetoothGattDescriptor> gattDescriptors = gattCharacteristic.getDescriptors();
    				for (BluetoothGattDescriptor gattDescriptor : gattDescriptors) {
    					Log.e(TAG, "-------->desc uuid:" + gattDescriptor.getUuid());
    					int descPermission = gattDescriptor.getPermissions();
    					Log.e(TAG,"-------->desc permission:"+ Utils.getDescPermission(descPermission));
    					
    					byte[] desData = gattDescriptor.getValue();
    					if (desData != null && desData.length > 0) {
    						Log.e(TAG, "-------->desc value:"+ new String(desData));
    					}
            		 }
                }
            }//
    
        }
    }

    展开全文
  • 在说“Wi-Fi模块与蓝牙模块”之前,...Wi-Fi广泛应用在家庭、商场、办公区域、用餐等场所,现在更是覆盖到了火车、小汽车上面,是现在应用最广的无线技术,Wi-Fi具有传输速率快,数据稳定,无资费的特点;目前最新Wi-F

    在说“Wi-Fi模块与蓝牙模块”之前,我们先聊一下三个概念一是“Wi-Fi”,二是“蓝牙”,三是“模块”;

    Wi-Fi

    Wi-Fi是一种允许设备接入无线局域网的技术;分布在2.4G和5G频段,本质上是将有线网络信号转换成为无线信号,以实现一定范围内的Wi-Fi设备不需要有线即可接入网络,如手机通过Wi-Fi连接路由器进行上网;Wi-Fi广泛应用在家庭、商场、办公区域、用餐等场所,现在更是覆盖到了火车、小汽车上面,是现在应用最广的无线技术,Wi-Fi具有传输速率快,数据稳定,无资费的特点;目前最新Wi-Fi6标准802.11.ax,最高传输速度达到9.6Gbps;能够进一步优化人们的上网体验;另外Wi-Fi设备也能够用作短距离无线数据传输;

    蓝牙

    蓝牙也是一种无线技术标准,使用2.4G频段,用于短距离蓝牙设备之间的数据传输,基于蓝牙功耗低,数据连接稳定,安全性高的特点,蓝牙技术广泛应用于无线穿戴、消费电子产品、智能化控制等领域,如蓝牙耳机、蓝牙音箱、智能门锁等;在蓝牙当中又分为经典蓝牙和蓝牙BLE。

    经典蓝牙:大数据传输的蓝牙;

    蓝牙BLE:低功耗、小数据传输的蓝牙;

    模块

    是能够完成一定功能的集合,具有连接外部环境的接口和内部的代码程序;模块的封装可以分为插针和贴片,插针测试和使用相对比较方便,贴片更适合于批量生产;可以根据自身的需求选择。

    在看完Wi-Fi、蓝牙、模块的介绍后,我相信大家已经对Wi-Fi、蓝牙、模块有了一个基本的概念,那么我们接下来再深入的了解一下我们的Wi-Fi模块以及蓝牙模块到底是什么呢?

    Wi-Fi模块

    集成Wi-Fi芯片、代码程序、基本电路的集合;将串口或TTL转为符合Wi-Fi无线标准的数据,内部有无线网络协议IEEE802.11b.g.n协议栈以及TCP/IP协议栈,能够将串口设备接入互联网;

    蓝牙模块

    集成蓝牙芯片、代码程序、基本电路的集合;能够mesh组网,进行数据传输;主要是完成设备与设备的数据交换;

    Wi-Fi模块与蓝牙模块的区别

    到了现在相信大家都已经知道什么是Wi-Fi模块,什么是蓝牙模块了,接下来我们再来聊一聊他们的区别;

    1、频率上

    ①、Wi-Fi的频率分为2.4G和5G频段;Wi-Fi 2.4G频段具有13个信道,2401~2423MHz;Wi-Fi 5G频段分为5.2G频段和5.8G频段,5.8G的频段为:149、153、157、161、165;5.2G的频段需要支持11ac,可用信道为:36、40、44、48、52、56、60、64;常规情况下建议避开52、56、60、64信道,因为与雷达信道冲突;

    ②、蓝牙仅有2.4G频段;2.402GHz到2480GHz,经典蓝牙具有76个信道,每个信道1MHz;蓝牙BLE具有40个信道,每个信道2MHz,其中37个信道属于数据信道,3个信道属于广播信道;

    2、应用上

    Wi-Fi能够直接接入网络,蓝牙需要转换处理,所以WiFi更适合1对多的局域组网,比如家庭和公司上网环境;而蓝牙更适合短距离高稳定性的传输,如智能耳机;以及蓝牙mesh的组网,特别适合智能家居无线控制应用场景。

    3、传输距离上

    Wi-Fi的传输距离更远,能够达到几百米,而蓝牙的传输距离一般在100米以内;

    4、传输速率上

    Wi-Fi:54Mbps;蓝牙:2Mbps;Wi-Fi更适合大数据的传输;

    总结

    从多个维度我们发现Wi-Fi和蓝牙其实各自有自己的优势和特性;Wi-Fi在联网的便捷性、传输的速率上、传输的距离上要优于蓝牙,蓝牙在数据的稳定性、安全性上、组网的便捷性上要优于Wi-Fi;用户可以根据自身的需求进行选择。

    展开全文
  • 蓝牙技术简介

    千次阅读 2016-05-08 21:25:53
    蓝牙技术的数据传输速率为1Mbit/s,采用时分双工传输方案实现全双工传输。 蓝牙无线技术是免费的,但是必须向手机提供商注册使用GSM或CDMA。 蓝牙技术是一项即时技术,可以连接至使用同一配置文件的另一蓝牙设备。 ...

    蓝牙技术基础


    概述

    • 蓝牙采用分散式网络结构以及快跳频和短包技术,支持点对点及点对多通信。
    • 蓝牙技术的数据传输速率为1Mbit/s,采用时分双工传输方案实现全双工传输。
    • 蓝牙无线技术是免费的,但是必须向手机提供商注册使用GSM或CDMA。
    • 蓝牙技术是一项即时技术,可以连接至使用同一配置文件的另一蓝牙设备。

    低功耗蓝牙

    • 低功耗蓝牙(BLE)是对传统蓝牙(BR/EDR)技术的补充,它虽与传统蓝牙共享射频,但是却是一个完全不一样的技术。
    • 低功耗蓝牙不具备和传统蓝牙的兼容性,是专为小数据率、离散传输的应用而设计的。
    • 低功耗蓝牙协议总体上分为3层,从下到上分别是控制器(Controller)、主机(Host)和应用端(APPs)。控制器用于处理射频数据解析、接收和发送数据;主机用于控制不同设备之间进行数据交换;应用端用于实现具体应用。

      • 控制器:用于实现射频相关的模拟和数字部分,完成最基本的数据发送和接收,控制器的对外接口是天线,对内接口是主机控制器接口(HCI)。控制器包括物理层(PHY)、链路层(LL)、直接测试模式(DTM)以及主机控制器接口。
        • 物理层:GFSK信号调制,2402MHz~2480MHz,40个通道,每两个通道间隔2MHz(经典蓝牙协议是1MHz),数据传输速率1Mbit/s。
        • 链路层:基于物理层,实现数据通道分发、状态切换、数据包校验、加密等功能;链路层分为2种通道:广播通道和数据通道。广播通道有3个:37ch(2402MHz)、38ch(2426MHz)、39ch(2480MHz)。每次广播都会往这3个通道同时发送(并不会在这个3个通道之间跳频)。目的是为了防止某个通道被其他设备阻塞,以至于设备无法配对或广播数据。还避开了Wi-Fi的1ch、6ch、11ch,避免被Wi-Fi影响。当低功耗蓝牙匹配后,链路层由广播通道切换到数据通道,数据通道有37个,数据传输的时候会在这37个通道间切换,切换规则在设备间匹配的时候约定。
        • 直接测试模式:为射频物理层测试接口,用于射频数据分析。
        • 主机控制器接口:作为一种接口存在于主机和控制器中,控制器通过控制器接口发送数据和事件给主机,主机通过控制器接口发送命令和数据给控制器。
    • 低功耗蓝牙的分类:

      • 单模蓝牙:在现实应用中,手表、运动传感器等小型设备通常是基于低功耗单模蓝牙的,可以实现极低的功耗效果。
      • 双模蓝牙:支持传统蓝牙和低功耗蓝牙。可以接受通过低功耗蓝牙或者传统蓝牙设备发送过来的数据。
    • 集成方式:模块(嵌入式)和芯片(集成)。
    • 低功耗蓝牙的特点:优化协议来实现极低的功耗效果,即在不必要射频的时候,彻底将空中射频关断。
      • 缩短无线开启时间。
      • 快速建立连接。
      • 降低收发峰值功耗(具体由芯片决定)。

    蓝牙规范

    • 规范的目的是要确保蓝牙设备间的互通性,但是蓝牙产品无需实现所有的蓝牙规范。

    常用规范

    • 1.蓝牙立体声音讯传输协议A2DP

    功能:播放立体声

    • 2.基本图像规范

    功能:在装置之间传送图像,分为:

    (1)Image Push
    (2)Image Pull
    (3)Advanced Image Printing
    (4)Automatic Archive
    (5)Remote Camera
    (6)Remote Display
    
    • 3.基本打印规范

    功能:可以将文件、电子邮件传至打印机打印,包含如下分类:

    (1)无线电话规范:设置了蓝牙无线电话之间沟通的规范
    (2)内通信规范:是另类的TCS(Telephone Control Protocol Specification)基层规范,两个蓝牙通信设备间沟通的规范
    (3)拨号网络规范
    (4)传真规范,能传输传真的资料
    (5)人机界面规范,可以支持鼠标和键盘功能
    (6)头戴式通话器规范,能够将声音传送到蓝牙耳机设备
    (7)序列埠规范,用来取代有线的RS-232 Cable
    (8)SIM卡存取规范,用于存取手机内的SIM卡
    (9)同步规范,简历在序列埠规范、泛用存取规范与generic access profile之上
    (10)档案传输规范,蓝牙可以利用OBEX通信协定来传送档案
    (11)泛用存取规范,用来建立连线
    (12)泛用物件交换规范,使用OBEX进行物件交换
    (13)物件交换规范,蓝牙利用OBEX通信协定在两个设备间交换资料
    (14)个人局域网络规范,可以支持蓝牙网络第三层协定
    (15)电话簿存取规范,可以在装置之间互换电话簿
    (16)影像分享规范,可以使用H.263编码算法来分享影像信息
    

    蓝牙协议体系机构

    • 底层硬件模块:

      • 链路管理层(LMP):负责连接的建立和拆除以及链路的安全和控制
      • 基带层(BBP):负责跳频和蓝牙数据及信息帧的传输
      • 蓝牙无线电信道

    低层模块是蓝牙技术的核心,蓝牙工作在2.4GHZ的ISM频段。

    蓝牙支持电路交换和分组交换两种技术,分别定义了两种链路类型,即面向连接的同步链路(SCO)和面向无连接的异步链路(ACL)。

    蓝牙规定了3种节能状态:停等(Park)状态、保持(Hold)状态和呼吸(Sniff)状态。

    蓝牙采用3种纠错方案:1/3前向纠错(FEC)、2/3前向纠错和自动重发(ARQ)。
    前向纠错:目的是减少重发的可能性,但同时也增加了额外开销。通常在信道的噪声干扰比较大时,蓝牙系统会使用前向纠错方案,以保证通信质量:对于SCO链路使用1/3前向纠错,对于ACL链路,使用2/3前向纠错。在无编号的自动请求重发方案中,一个时隙传送的数据必须在下一个时隙得到收到的确认。

    蓝牙系统的安全性问题:在链路层中,蓝牙系统提供了认证、加密和密匙管理等功能。

    • 中间协议层

      • 逻辑链路控制与适配协议(L2CAP):完成数据拆装、服务质量控制、协议复用和组提取等功能,是其他上层协议实现的基础,也是蓝牙协议栈的核心部分
      • 服务发现协议(SDP):为上层应用程序提供一种机制来发现网络中可用的服务及其特性的方法。
      • 串口仿真协议(RFCOMM):射频通信协议,可以仿真串行电缆接口协议,符合ETSI0710串口仿真协议,可以在无线环境下实现对高层协议,如PPP、TCP/IP、WAP等的支持,另外还可以支持AT命令集,从而可以实现移动电话机和传真机及调制解调器之间的无线连接。
      • 电话控制协议规范(TCS):基于ITU-T建议Q.931的采用面向比特的协议,定义了用于蓝牙设备间建立语音和数据呼叫的呼叫控制信令以及用于处理蓝牙TCS设备的移动性管理过程。
    • 高端应用层:对应于各种应用模型的剖面,是剖面的一部分,目前定义了13种剖面

    总结:底层硬件模块为上层软件模块提供了不同的访问入口,但是两个模块接口之间的消息和数据传递必须通过蓝牙主机控制器接口的解释才能进行,也就是要通过中间协议层。

    低功耗蓝牙协议

    低功耗蓝牙不再支持传统蓝牙的协议,所有的协议或服务都是基于GATT的。

    低功耗蓝牙中区分协议和服务,服务描述了特点(即它们的UUID),服务描述自身有什么特点和形式,并且描述清楚如何应用这些特点以及需要什么安全机制。而应用协议定义了其使用的服务,说明是传感器还是接收端,定义GATT的角色(Service/Client)和GAP的角色(Peripheral/Central)

    现有的基于GATT的协议/服务

    • ANP Alert Notification Profile
    • ANS Alert Notification Profile
    • BAS Battery Service
    • BLP Blood Pressure Profile
    • BLS Blood Pressure Service
    • CPP Cycling Power Profile
    • CPS Cycling Power Service
    • CSCP Cycling Speed and Cadence Profile
    • CSCS Cycling Speed and Cadence Service
    • CTS Current Time Service
    • DIS Device Information Service
    • FMP Find Me Profile
    • GLP Glucose Profile
    • IDS HID service
    • OGP HID over GATT Profile
    • HTP Health Thermometer Profile
    • TS Health Thermometer Service
    • HRP Heart Rate Profile
    • HRS Heart Rate Profile
    • IAS Immediate Alert Service
    • LLS Link Loss Service
    • LNP Location and Navigation Profile
    • LNS Location and Navigation Service
    • NDCS Next DST Change Service
    • PASP Phone Alert Status Profile
    • PASS Phone Alert Status Service
    • PXP Proximity Profile
    • RSCP Running Speed and Cadence Profile
    • RSCS Running Speed and Cadence Service
    • RTUS Reference Time Update Service
    • ScPP Scan Parameters Profile
    • ScPS Scan Parameters Service
    • TIP TIme Profile
    • TPS Tx Power Service

    低功耗蓝牙协议栈

    蓝牙协议栈就是SIG定义的一组协议的规范,目标是允许遵循规范的蓝牙应用能够进行相互间的操作。

    常用蓝牙核心协议类型

    • 基带协议

    基带和链路控制层确保微微网内各蓝牙设备单元之间由射频构成的物理连接。蓝牙的射频系统是一个跳频系统,其任一分组在指定时隙、指定频率上发送。

    • 连接管理协议

    连接管理协议(LMP)负责各蓝牙设备间连接的建立。

    • 逻辑链路控制和适配协议

    逻辑链路控制和适配协议(L2CAP)是基带的上层协议,可以认为它与LMP并行工作,它们的区别在于,当业务数据不经过LMP时,L2CAP为上层提供服务。

    • 服务发现协议

    服务发现协议(SDP)在蓝牙技术框架中起着至关紧要的作用,它是所有用户模式的基础。使用SDP可以查询到设备信息和服务类型,从而在蓝牙设备间建立相应的连接。

    • 电缆替代协议

    电缆替代协议(RFCOMM)是基于ETSI-07.10规范的串行线仿真协议。它在蓝牙基带协议上仿真RS-232控制和数据信号,为使用串行线传送机制的上层协议(如OBEX)提供服务。

    • 电话控制协议

    (1)二元电话控制协议(TCS-Binary或TCSBIN)。它是面向比特的协议,定义了蓝牙设备间建立语音和数据呼叫的控制信令,定义了处理蓝牙TCS设备群的移动管理进程。

    (2)AT命令集电话控制协议。SIG定义了控制多用户模式下移动电话和调制解调器的AT命令集,该AT命令集基于ITU TV.250建议和GSM07.07,它还可以用于传真业务。

    • 选用协议

    (1)点对点协议(PPP)。在蓝牙技术中,PPP位于RFCOMM上层,完成点对点的连接。

    (2)TCP/UDP/IP。该协议是由互联网工程任务组制定,广泛应用于互联网通信的协议。在蓝牙设备中,使用这些协议是为了与互联网相连接的设备进行通信。

    (3)对象交换协议(OBEX)。是由红外数据协会(IrDA)制定的会话层协议,它采用简单的和自发的方式交换目标。

    (4)无线应用协议(WAP)。该协议是由无线应用协议论坛制定的,它融合了各种广域无线网络技术,其目的是将互联网的内容和电话传送的业务传送到数字蜂窝电话和其他无线终端上。

    展开全文
  • 什么是低功耗蓝牙技术

    千次阅读 2020-02-11 19:08:33
    经典蓝牙的设计目的在于统一全球各地的计算和通信设备,让手机与笔记本电脑相互连接。不过事实证明,蓝牙最为广泛的应用还是音频传输,比如将音频从手机传到蓝牙耳机。 低功耗蓝牙选择了完全不同的方向:并非只是...
  • 物联网时代的“物”在对传感和连接的需求上与手机有很大的差别,所以也对蓝牙技术提出了更多、更高的要求。总结来说,BLE蓝牙模块在朝着低功耗、高传输速率、远传输距离等方向进化。低功耗:无线模块都需要上电才...
  • 低功耗蓝牙4.0

    2018-06-15 09:38:14
    景要求能耗非常低,传输速率要求也不高,对于这类设备, 可以仅实现4.0协议中低能耗蓝牙部分,通过支持双模的 主机设备进行通信或者跟同类设备通信。由于蓝牙4.0协议拥有极低的运行和待机功耗,使用一 粒纽扣...
  • 高清语音也被称为宽带语音,是一种能为蜂窝网络、移动电话和无线耳机传输高清、自然语音质量的音频技术。传统的窄带电话相比,高清语音很大程度上提高了语音质量,减少了听觉负担。 通信产业链上的所有网络和设备...
  • 常用在对数据传输速率有要求的设备上,如蓝牙音箱等 低功耗 (LE) 蓝牙 常用在低功耗、对续航有要求的设备上,智能穿戴设备、血糖仪等等 2.蓝牙的定义和工作 设备定义 对LE协议,对设备定义了若干角色,主要有外围...
  • 在多个从设备需要一个主设备进行对话的无线通信应用中,蓝牙低功耗(BLE)协议已毫无疑问成为它们的理想选择。其它通信协议相比,BLE具备以下优势: ... 数据传输速率高达1Mbps。  这些优势让BLE成为物联网设备
  • BLE是蓝牙4.0的核心Profile,主打功能是快速搜索,快速连接,超低功耗保持连接和传输数据,弱点是数据传输速率低,由于BLE的低功耗特点,因此普遍用于穿戴设备。Android 4.3才开始支持BLE API。 本文改自Android...
  • 物联网时代的“物”在对传感和连接的需求上与手机有很大的差别,所以也对蓝牙技术提出了更多、更高的要求。总结来说,BLE蓝牙模块在朝着低功耗、高传输速率、远传输距离等方向进化。5.0蓝牙模块低功耗:无线模块都...
  • 在3G手机的应用时代,其基本的改变包括能提供更高的传输速率,以及同时提供既有的「电路交换模式」(Circuit Switch Mode)和可移动上网的「封包交换模式」(Packet Switch Mode),进而能打打影像电话、使用多媒体...
  • BLE是蓝牙4.0的核心Profile,主打功能是快速搜索,快速连接,超低功耗保持连接和传输数据,弱点是数据传输速率低,由于BLE的低功耗特点,因此普遍用于穿戴设备。Android 4.3才开始支持BLE API,所以请各位客官把本文...

空空如也

空空如也

1 2 3 4
收藏数 63
精华内容 25
关键字:

蓝牙与手机传输速率