1

我正在尝试使用 Delphi 创建一个移动应用程序,它将通过蓝牙 LE 将文本消息发送到 ESP32 设备。

我对 BLE 没有经验,因此尝试遵循官方文档并尝试编辑Delphi 示例应用程序(位于 ..\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\ BLEScanner)基于我在Delphi端学习结构的需要。

在 ESP32 方面,我在那里找到了一个 DIY项目。但是一个用于这个项目的 thunkable 应用程序,我不明白如何用 Delphi 做同样的事情(你可以在下面找到应用程序的块视图)。

在此处输入图像描述

是否有人拥有我可以用于此目的的示例应用程序/代码?现在谢谢。

4

1 回答 1

1

我已经解决了以下结构的问题;

首先,您应该(您也可以稍后再做)定义设备的服务和特征的 UUID

const
  SERVICE : TGUID = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';
  CHARACT : TGUID = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';

并定义您想要使用的设备及其特性

Device         : TBluetoothLEDevice;
FCharacteristic: TBluetoothGattCharacteristic;

那么你需要访问粗略的位置才能让扫描工作(我在 FormCreate 上做了)

{$IFDEF ANDROID}
  FLocationPermission := JStringToString(TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION);
{$ENDIF}

然后,您需要执行 PermissionsService

PermissionsService.RequestPermissions([FLocationPermission], RequestPermissionsResult, DisplayRationale);

注意:您可以在 Delphi 示例应用程序中找到这些代码和更多信息(位于 ..\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\BLEScanner 下)

访问所有权限(并发现设备)后,您需要写入要使用的特征;

  FCharacteristic:= Device.GetService(SERVICE).GetCharacteristic(CHARACT);
  FCharacteristic.SetValueAsString(RawByteString('command'));
  Device.WriteCharacteristic(CHARACT);

重要提示:由于 Embarcadero 在移动编译器中禁用了 Ansichar 和 AnsiString 此处此处的其他信息)要么您需要使用 TBytes,要么通过这个宏伟的库获得 Ansi 支持(因此您可以将任何命令发送到任何 8 位 IoT 设备(如大多数设备))。其余部分由 MCU 完成。

于 2019-07-29T09:17:36.927 回答