Android应用程序,通过微控制器通过UART发送的BLE模块接收数据
我想创建一个android应用程序,它可以连接蓝牙低能模块,并可以接收数据。在我的系统中,微控制器通过UART向BT LE模块发送测量数据 我的问题是如何开始?我读了很多关于Android应用程序,通过微控制器通过UART发送的BLE模块接收数据,android,bluetooth-lowenergy,microcontroller,stm32,uart,Android,Bluetooth Lowenergy,Microcontroller,Stm32,Uart,我想创建一个android应用程序,它可以连接蓝牙低能模块,并可以接收数据。在我的系统中,微控制器通过UART向BT LE模块发送测量数据 我的问题是如何开始?我读了很多关于GATT和UART服务的书,但仍然不知道如何开始。请给我一些信息。您需要: 服务的UUID、特征和描述符 蓝牙的低能量 该计划必须: 可扫描设备 连接设备 设置回调的可恢复性 AndroidManifest.xml 注意事项: 在模块上设置的UUID必须相同 在您的程序中,必须有两个回调:ScanCallback和Ga
GATT
和UART
服务的书,但仍然不知道如何开始。请给我一些信息。您需要:
- 服务的UUID、特征和描述符
- 蓝牙的低能量
- 在模块上设置的UUID必须相同
- 在您的程序中,必须有两个回调:ScanCallback和GattCallback。扫描回调用于管理扫描结果,GattCallback用于管理数据输入/输出
- 这段代码是演示如何在Android上使用BLE的基本代码,对我来说很好
- 您可以在此处生成UUID:
BLE扫描仪中看到,我想那是:00002902-0000-1000-8000-00805F9B34FB
。到UUID 0x2902。
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
// Bluetooth's variables
BluetoothAdapter bluetoothAdapter;
BluetoothLeScanner bluetoothLeScanner;
BluetoothManager bluetoothManager;
BluetoothScanCallback bluetoothScanCallback;
BluetoothGatt gattClient;
BluetoothGattCharacteristic characteristicID; // To get Value
// UUID's (set yours)
final UUID SERVICE_UUID = UUID.fromString("ab0828b1-198e-4351-b779-901fa0e0371e");
final UUID CHARACTERISTIC_UUID_ID = UUID.fromString("1a220d0a-6b06-4767-8692-243153d94d85");
final UUID DESCRIPTOR_UUID_ID = UUID.fromString("ec6e1003-884b-4a1c-850f-1cfce9cf6567");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Bluetooth
bluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
bluetoothAdapter = bluetoothManager.getAdapter();
startScan();
}
// BLUETOOTH SCAN
private void startScan(){
Log.i(TAG,"startScan()");
bluetoothScanCallback = new BluetoothScanCallback();
bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
bluetoothLeScanner.startScan(bluetoothScanCallback);
}
// BLUETOOTH CONNECTION
private void connectDevice(BluetoothDevice device) {
if (device == null) Log.i(TAG,"Device is null");
GattClientCallback gattClientCallback = new GattClientCallback();
gattClient = device.connectGatt(this,false,gattClientCallback);
}
// BLE Scan Callbacks
private class BluetoothScanCallback extends ScanCallback {
@Override
public void onScanResult(int callbackType, ScanResult result) {
Log.i(TAG, "onScanResult");
if (result.getDevice().getName() != null){
if (result.getDevice().getName().equals(YOUR_DEVICE_NAME)) {
// When find your device, connect.
connectDevice(result.getDevice());
bluetoothLeScanner.stopScan(bluetoothScanCallback); // stop scan
}
}
}
@Override
public void onBatchScanResults(List<ScanResult> results) {
Log.i(TAG, "onBathScanResults");
}
@Override
public void onScanFailed(int errorCode) {
Log.i(TAG, "ErrorCode: " + errorCode);
}
}
// Bluetooth GATT Client Callback
private class GattClientCallback extends BluetoothGattCallback {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
super.onConnectionStateChange(gatt, status, newState);
Log.i(TAG,"onConnectionStateChange");
if (status == BluetoothGatt.GATT_FAILURE) {
Log.i(TAG, "onConnectionStateChange GATT FAILURE");
return;
} else if (status != BluetoothGatt.GATT_SUCCESS) {
Log.i(TAG, "onConnectionStateChange != GATT_SUCCESS");
return;
}
if (newState == BluetoothProfile.STATE_CONNECTED) {
Log.i(TAG, "onConnectionStateChange CONNECTED");
gatt.discoverServices();
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
Log.i(TAG, "onConnectionStateChange DISCONNECTED");
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
super.onServicesDiscovered(gatt, status);
Log.i(TAG,"onServicesDiscovered");
if (status != BluetoothGatt.GATT_SUCCESS) return;
// Reference your UUIDs
characteristicID = gatt.getService(SERVICE_UUID).getCharacteristic(CHARACTERISTIC_UUID_ID);
gatt.setCharacteristicNotification(characteristicID,true);
BluetoothGattDescriptor descriptor = characteristicID.getDescriptor(DESCRIPTOR_UUID_ID);
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
gatt.writeDescriptor(descriptor);
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
super.onCharacteristicRead(gatt, characteristic, status);
Log.i(TAG,"onCharacteristicRead");
}
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
super.onCharacteristicWrite(gatt, characteristic, status);
Log.i(TAG,"onCharacteristicWrite");
}
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
super.onCharacteristicChanged(gatt, characteristic);
Log.i(TAG,"onCharacteristicChanged");
// Here you can read the characteristc's value
// new String(characteristic.getValue();
}
@Override
public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
super.onDescriptorRead(gatt, descriptor, status);
Log.i(TAG,"onDescriptorRead");
}
@Override
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
super.onDescriptorWrite(gatt, descriptor, status);
Log.i(TAG,"onDescriptorWrite");
}
}
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCallback;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattDescriptor;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.le.BluetoothLeScanner;
import android.bluetooth.le.ScanCallback;
import android.bluetooth.le.ScanResult;