微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我只能通过 Flutter Blue 发送到 Arduino 33 BLE 4 字节

如何解决我只能通过 Flutter Blue 发送到 Arduino 33 BLE 4 字节

我正在尝试发送一个电话号码和一个代码(我正在使用 de code 在 Arduino 中读取它并知道这个号码是给一个联系人还是其他人的,因为我要保存不同的电话号码)通过ble 从 Flutter 应用程序到 Arduino 设备(设备:BLE 33)。我正在使用 ArduinoBLE 库和 Flutter_blue 库。

为了发送数字,我需要 6 个字节:例如,对于数字 112233445,一个字节是 11,第二个字节是 22,第三个字节是 33,4º 字节 44 和 5º 字节是 5。和代码 f.e. 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();
}

解决方法

最后我尝试使用 event handler for the characteristic,现在它可以工作了。

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

我不知道为什么事件处理程序有效...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。