我试图将BLE设备(Adafruit羽毛M0 Bluefruit LE)连接到Android应用程序。羽毛有一个传感器发送特殊传感器事件的UART文本。将BLE设备连接到Android发送数据(nUART)
我想
- 连接到该设备(静态MAC地址)
- 连接到北欧-UART服务
- 从羽毛
- 实现连接的监控接收文本
现在我想了解BLE是如何工作的。我理解它只要连接到设备,但在那之后我不明白。
- 如何连接到服务或自动连接到服务?
- 我需要什么来获取传入数据的数据或通知?
这是现在的代码。现在有检查,所以当事情没有按计划发生时,它会崩溃。但我试图了解BLE的事情。另外它不是一项服务,只是一项活动。我无法测试它,因为智能手机不到一周的时间。
package de.example.bluetoothletest;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCallback;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.content.Intent;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {
private BluetoothAdapter mBluetoothAdapter;
private BluetoothGatt mBluetoothGatt;
private String deviceaddress=("FC:57:1A:B7:22:AD");
public final static String ACTION_DATA_AVAILABLE = "de.example.BluetoothLETest.ACTION_DATA_AVAILABLE";
public static final UUID RX_SERVICE_UUID = UUID.fromString("6e400001-b5a3-f393-e0a9-e50e24dcca9e");
public static final UUID RX_CHAR_UUID = UUID.fromString("6e400002-b5a3-f393-e0a9-e50e24dcca9e");
public static final UUID TX_CHAR_UUID = UUID.fromString("6e400003-b5a3-f393-e0a9-e50e24dcca9e");
public static String EXTRA_DATA="de.example.BluetoothLETest.EXTRA_DATA";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//get the BluetoothAdapter
final BluetoothManager mbluetoothManager=(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter=mbluetoothManager.getAdapter();
}
public void connect(){
//connect to the given deviceaddress
BluetoothDevice device=mBluetoothAdapter.getRemoteDevice(deviceaddress);
mBluetoothGatt=device.connectGatt(this, false, mGattCallback);
//now we get callbacks on mGattCallback
}
//get callbacks when something changes
private final BluetoothGattCallback mGattCallback=new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
if (newState== BluetoothProfile.STATE_CONNECTED){
//device connected
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
if (status==BluetoothGatt.GATT_SUCCESS){
//all Services have been discovered
}
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
//we are still connected to the service
if (status==BluetoothGatt.GATT_SUCCESS){
//send the characteristic to broadcastupdate
broadcastupdate(ACTION_DATA_AVAILABLE, characteristic);
}
}
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
//send the characteristic to broadcastupdate
broadcastupdate(ACTION_DATA_AVAILABLE, characteristic);
}
};
//Get the 'real' data out of characteristic
private void broadcastupdate(final String action,final BluetoothGattCharacteristic characteristic){
final Intent intent= new Intent(action);
//only when it is the right characteristic?/service?
if (TX_CHAR_UUID.equals(characteristic.getUuid())){
//get the 'real' data from the stream
intent.putExtra(EXTRA_DATA, characteristic.getValue());
//send the extracted data via LocalBroadcastManager
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
}
}
此代码是否适用于智能手机接收的内容?如何连接到特定的服务,或者由于设备只提供一项服务,我该如何自动完成?
请等到您的智能手机到达,然后询问您的具体问题。 –