如何使用 Delphi 10.3 通过蓝牙 LE 从移动应用程序向 ESP32 设备发送短信
How to send text message from mobile app to ESP32 device via BLuetooth LE using Delphi 10.3
我正在尝试使用 Delphi 创建一个移动应用程序,它将通过低功耗蓝牙向 ESP32 设备发送短信。
我对 BLE 没有经验,所以尝试遵循 this official document and trying to edit this Delphi 示例应用程序(位于 ..\Embarcadero\Studio.0\Samples\Object Pascal\Multi-Device Samples\Device 传感器和 Services\Bluetooth\BLEScanner) 根据我的需要学习 Delphi 方面的结构。
在 ESP32 方面,我在 there 上找到了一个 DIY 项目。但是这个项目使用了一个 thunkable 应用程序,我无法理解如何使用 Delphi.
做同样的事情(在下面你可以找到应用程序的块视图)
有没有人有样本 app/code 可以用于此目的?马上谢谢。
我已经解决了以下结构的问题;
首先你应该(你也可以稍后再做)定义设备的服务和特性的 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.0\Samples\Object Pascal\Multi-Device Samples\Device 传感器和 Services\Bluetooth\BLEScanner)
访问所有权限(并发现设备)后,您需要写入要使用的特征;
FCharacteristic:= Device.GetService(SERVICE).GetCharacteristic(CHARACT);
FCharacteristic.SetValueAsString(RawByteString('command'));
Device.WriteCharacteristic(CHARACT);
IMOPRTANT :由于 Embarcadero 在移动编译器中禁用了 Ansichar 和 AnsiString。 (here and here) either you need to use TBytes or get Ansi support back with this magnificent library 中的附加信息(因此您可以向任何 8 位物联网设备发送任何命令(就像大多数设备一样))。其余的由 MCU 完成。
我正在尝试使用 Delphi 创建一个移动应用程序,它将通过低功耗蓝牙向 ESP32 设备发送短信。
我对 BLE 没有经验,所以尝试遵循 this official document and trying to edit this Delphi 示例应用程序(位于 ..\Embarcadero\Studio.0\Samples\Object Pascal\Multi-Device Samples\Device 传感器和 Services\Bluetooth\BLEScanner) 根据我的需要学习 Delphi 方面的结构。
在 ESP32 方面,我在 there 上找到了一个 DIY 项目。但是这个项目使用了一个 thunkable 应用程序,我无法理解如何使用 Delphi.
做同样的事情(在下面你可以找到应用程序的块视图)有没有人有样本 app/code 可以用于此目的?马上谢谢。
我已经解决了以下结构的问题;
首先你应该(你也可以稍后再做)定义设备的服务和特性的 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.0\Samples\Object Pascal\Multi-Device Samples\Device 传感器和 Services\Bluetooth\BLEScanner)
访问所有权限(并发现设备)后,您需要写入要使用的特征;
FCharacteristic:= Device.GetService(SERVICE).GetCharacteristic(CHARACT);
FCharacteristic.SetValueAsString(RawByteString('command'));
Device.WriteCharacteristic(CHARACT);
IMOPRTANT :由于 Embarcadero 在移动编译器中禁用了 Ansichar 和 AnsiString。 (here and here) either you need to use TBytes or get Ansi support back with this magnificent library 中的附加信息(因此您可以向任何 8 位物联网设备发送任何命令(就像大多数设备一样))。其余的由 MCU 完成。