将数据从我的应用程序发送到 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 所需的所有步骤。这些步骤是:

  1. 设置正确的权限
  2. 扫描附近的 BLE 设备
  3. 连接到您选择的 BLE 设备
  4. 扫描服务
  5. 读写您选择的特征

指南中使用 Kotlin 作为编程语言解释了所有这些步骤。