将数据从我的应用程序发送到 Stm32 蓝牙设备 - Kotlin
Send data from my App to Stm32 bluetooth Device - Kotlin
我有一个应用程序,我的应用程序可以连接到蓝牙设备。
之后,我想将消息 (Int) 发送到我的低功耗蓝牙设备。
我有这段代码,但我不知道是什么问题。
如果你想要我有:特征UUID,服务UUID。
真的,我需要你的帮助...
我已经编辑了问题:
我的代码:
val filter = IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)
lateinit var bluetoothAdapter: BluetoothAdapter
val bluetoothManager = context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
bluetoothAdapter = bluetoothManager.adapter
settingViewModel.bluetooth(bluetoothAdapter = bluetoothAdapter)
val mReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent) {
val action = intent.action
if (action == BluetoothAdapter.ACTION_STATE_CHANGED) {
val state = intent.getIntExtra(
BluetoothAdapter.EXTRA_STATE,
BluetoothAdapter.ERROR
)
when (state) {
BluetoothAdapter.STATE_OFF -> {
settingViewModel.setIsConnected(false)
//settingViewModel.stopScan()
settingViewModel.setListDevices(null)
}
BluetoothAdapter.STATE_ON -> {
settingViewModel.setIsConnected(true)
//scan()
settingViewModel.setListDevices(bluetoothAdapter.bondedDevices)
context!!.unregisterReceiver(this)
}
}
}
}
}
context.registerReceiver(mReceiver, filter)
val SERVICE_UUID = "00000000-0001-11e1-9ab4-0002a5d5c51c"
val ConfigCharacteristic = descriptorOf(
service = SERVICE_UUID,
characteristic = "00E00000-0001-11e1-ac36-0002a5d5c51b",
descriptor = "00000000-0000-0000-0000-000000000000",
)
Button(
onClick = {
if (settingViewModel.isConnected.value == true) {
coroutine.launch(Dispatchers.IO) {
try {
settingViewModel.peripheral.write(ConfigCharacteristic, byteArrayOf(1))
} catch (e: Exception) {
Toast.makeText(context, e.message, Toast.LENGTH_SHORT).show()
}
}
}
// try {
// val Service =
// settingViewModel.deviceSocket.value.get .getService(UUID.fromString("0000ffe0-0000-1000-8000-00805f9b34fb"))
// val charac: BluetoothGattCharacteristic =
// Service.getCharacteristic(UUID.fromString("00E00000-0001-11e1-ac36-0002a5d5c51b"))
// settingViewModel.deviceSocket.value!!.outputStream.write("1".toByteArray())
// } catch (e: Exception) {
// Toast.makeText(context, e.message.toString(), Toast.LENGTH_LONG).show()
// }
}
) {
Text(text = "HelloWorld")
}
我已经有了我要连接的设备的 mac 地址、特征和服务 UUID。
再次强调,我真的需要你的帮助
首先:
在为 BLE 设备开发应用程序时,最好先使用通用 BLE 扫描仪应用程序来测试连接并找出需要发送的命令。如果您确认 BLE 设备按预期工作,您可以继续使用您自己的自定义应用程序。我建议 nRF Connect 完成此任务。
关于您的问题:
您的源代码中仍然缺少很多东西。您说您可以连接到设备,但在发送消息时遇到问题。您的代码不包含任何与 BLE 连接相关的内容,因此我只能假设您使用 phone 的蓝牙设置连接到设备。这对于经典蓝牙来说是正确的,但 BLE 要求您通过自己的自定义应用程序进行连接。
Ultimate Guide to Android Bluetooth Low Energy 解释了成功连接 BLE 所需的所有步骤。这些步骤是:
- 设置正确的权限
- 扫描附近的 BLE 设备
- 连接到您选择的 BLE 设备
- 扫描服务
- 读写您选择的特征
指南中使用 Kotlin 作为编程语言解释了所有这些步骤。
我有一个应用程序,我的应用程序可以连接到蓝牙设备。 之后,我想将消息 (Int) 发送到我的低功耗蓝牙设备。 我有这段代码,但我不知道是什么问题。 如果你想要我有:特征UUID,服务UUID。
真的,我需要你的帮助...
我已经编辑了问题:
我的代码:
val filter = IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)
lateinit var bluetoothAdapter: BluetoothAdapter
val bluetoothManager = context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
bluetoothAdapter = bluetoothManager.adapter
settingViewModel.bluetooth(bluetoothAdapter = bluetoothAdapter)
val mReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent) {
val action = intent.action
if (action == BluetoothAdapter.ACTION_STATE_CHANGED) {
val state = intent.getIntExtra(
BluetoothAdapter.EXTRA_STATE,
BluetoothAdapter.ERROR
)
when (state) {
BluetoothAdapter.STATE_OFF -> {
settingViewModel.setIsConnected(false)
//settingViewModel.stopScan()
settingViewModel.setListDevices(null)
}
BluetoothAdapter.STATE_ON -> {
settingViewModel.setIsConnected(true)
//scan()
settingViewModel.setListDevices(bluetoothAdapter.bondedDevices)
context!!.unregisterReceiver(this)
}
}
}
}
}
context.registerReceiver(mReceiver, filter)
val SERVICE_UUID = "00000000-0001-11e1-9ab4-0002a5d5c51c"
val ConfigCharacteristic = descriptorOf(
service = SERVICE_UUID,
characteristic = "00E00000-0001-11e1-ac36-0002a5d5c51b",
descriptor = "00000000-0000-0000-0000-000000000000",
)
Button(
onClick = {
if (settingViewModel.isConnected.value == true) {
coroutine.launch(Dispatchers.IO) {
try {
settingViewModel.peripheral.write(ConfigCharacteristic, byteArrayOf(1))
} catch (e: Exception) {
Toast.makeText(context, e.message, Toast.LENGTH_SHORT).show()
}
}
}
// try {
// val Service =
// settingViewModel.deviceSocket.value.get .getService(UUID.fromString("0000ffe0-0000-1000-8000-00805f9b34fb"))
// val charac: BluetoothGattCharacteristic =
// Service.getCharacteristic(UUID.fromString("00E00000-0001-11e1-ac36-0002a5d5c51b"))
// settingViewModel.deviceSocket.value!!.outputStream.write("1".toByteArray())
// } catch (e: Exception) {
// Toast.makeText(context, e.message.toString(), Toast.LENGTH_LONG).show()
// }
}
) {
Text(text = "HelloWorld")
}
我已经有了我要连接的设备的 mac 地址、特征和服务 UUID。
再次强调,我真的需要你的帮助
首先:
在为 BLE 设备开发应用程序时,最好先使用通用 BLE 扫描仪应用程序来测试连接并找出需要发送的命令。如果您确认 BLE 设备按预期工作,您可以继续使用您自己的自定义应用程序。我建议 nRF Connect 完成此任务。
关于您的问题: 您的源代码中仍然缺少很多东西。您说您可以连接到设备,但在发送消息时遇到问题。您的代码不包含任何与 BLE 连接相关的内容,因此我只能假设您使用 phone 的蓝牙设置连接到设备。这对于经典蓝牙来说是正确的,但 BLE 要求您通过自己的自定义应用程序进行连接。
Ultimate Guide to Android Bluetooth Low Energy 解释了成功连接 BLE 所需的所有步骤。这些步骤是:
- 设置正确的权限
- 扫描附近的 BLE 设备
- 连接到您选择的 BLE 设备
- 扫描服务
- 读写您选择的特征
指南中使用 Kotlin 作为编程语言解释了所有这些步骤。