flutter - 我只能通过 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();
}
解决方案
最后,我尝试对特征使用事件处理程序,现在它可以工作了。
在此之前,我尝试过使用 LightBlue 和 nRF Connect 等应用程序,但我仍然收到不超过 4 个字节的数据。
我不知道为什么事件处理程序可以工作......
推荐阅读
- java - Spring Boot 属性迁移器
- csv - 如何在 Jmeter 中将响应数据保存到 CSV
- asp.net-core - 如何在 ASP.NET Core MVC 中从 Bootstrap 添加轮播?
- python - Seaborn - 将x轴移动到顶部
- html - Flexbox 在折叠其他部分后不允许滚动区域
- react-native - 如何将气球(点)放入谷歌地图应用程序
- python - 使用 pytesseract 和 opencv 对删除文本进行 OCR
- android - 在android上创建对webservice的多个请求
- javascript - 使用javascript更改其他页面中复选框的选中状态时,DataTable会一直返回第一页
- angular - Angular - 存储永久用户信息的位置(本地存储除外)