首页 > 解决方案 > 我只能通过 Flutter Blue 向 Arduino 33 BLE 发送 4 个字节

问题描述

我正在尝试发送一个电话号码和一个代码(我正在使用解码代码在 Arduino 中读取它,并知道这个号码是给一个联系人还是另一个,因为我要保存不同的电话号码)来自Flutter 应用到 Arduino 设备(设备:BLE 33)。我正在使用 ArduinoBLE 库和 flutter_blue 库。

为了发送数字,我需要 6 个字节:例如,对于数字 112233445,一个字节代表 11,第二个字节代表 22,第三个字节代表 33,4º 字节 44 和 5º 字节是 5。代码 fe 4 在另一个字节。

在 Arduino 中,我用来读取的函数是 settingsCharacteristic.readValue(buffer, size_of_buffer)。而在 Flutter 中是characteristic.write(List)。

我想发送“04112233445”-> 4 是代码,其余的是数字。

问题是在 Arduino 中我只收到 4 个字节。

颤振代码:

  void sendTelephoneNumber(BluetoothCharacteristic characteristic) {
    String exampleCode = "01";
    characteristic
        .write(utf8
        .encode(exampleCode + myController.text));
  }

(myController 是我写数字的 TextField 的控制器)

Arduino代码:

void t5Callback()
{
  BLEDevice central = BLE.central();
  if (central && central.connected())
  {
    if (settingsCharacteristic.written())
    {
      byte buffer[6];
      settingsCharacteristic.readValue(buffer, 6);
      for (int i = 0; i < 6; i++)
      {
        Serial.println(buffer[i]);
      }
      int code = buffer[0];
      unsigned long telephone = 0;
      telephone = (buffer[1] + 512 << 32) | (buffer[2] << 24) | (buffer[3] << 16) | (buffer[4] << 8) | (buffer[5]);
      Serial.printf("Code: %d\n", code);
      Serial.printf("Telephone: %lu\n", telephone);
      switch (code) {
        case 7:
          saveTelephone1(telephone);
          break;
        case 8:
          saveTelephone2(message);
          break;
        default:
          //todo
          break;
      }
    }
  }
  yield();
}

标签: flutterarduinobluetooth-lowenergy

解决方案


最后,我尝试对特征使用事件处理程序,现在它可以工作了。

在此之前,我尝试过使用 LightBlue 和 nRF Connect 等应用程序,但我仍然收到不超过 4 个字节的数据。

我不知道为什么事件处理程序可以工作......


推荐阅读