搜索插件、代码仓与 APP 分类

插件详情v1.1.0

esp_provisioning_ble

一个 Flutter 插件,通过蓝牙低功耗 (BLE) 简化 ESP32 模块的配置设置。

AndroidiOS
近 30 天下载
606
喜欢数
27
Pub 分数
130

安装插件

flutter pub add esp_provisioning_ble

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个用于通过蓝牙低功耗(BLE)简化ESP32模块配置的Flutter插件。它通过提供简单且一致的接口,使设备能够发现、连接并配置ESP32单元,实现无缝的空中设置。非常适合需要快速部署和设备接入的物联网项目,无需复杂的布线或手动网络输入。该插件支持Android和iOS平台,确保在移动环境中的广泛兼容性。

适合场景

  • 物联网设备接入
  • 无线ESP32配置
  • 智能家居设备设置
  • 自动固件配置
  • 远程设备管理

主要特点

  • 基于BLE的设备配置
  • 跨平台支持(Android 和 iOS)
  • 设备发现的简单 API
  • 安全连接处理
  • 实时状态反馈

适合对象

  • 物联网开发者
  • 嵌入式系统工程师
  • 智能设备的移动应用开发者
  • 硬件初创公司
  • 现场技术人员部署连接设备

使用建议

  • 需要支持蓝牙低功耗的设备
  • 仅限具有兼容固件的ESP32模块
  • 后台模式可能需要额外配置
  • Android 上所需的网络权限
  • iOS 后台执行限制

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

esp_provisioning_ble

A library for provisioning a ESP32 with Bluetooth BLE

#IMPORTANT!!!!!!

#IMPORTANT!!!!!!

The officially repository is

https://github.com/ESP-Provisioning-BLE/esp_provisioning_ble

#IMPORTANT!!!!!!

#IMPORTANT!!!!!!

Getting Started

Create an EspProv Instance

The package has an abstract class called ProvTransport, that you need to implement using your preferred Bluetooth package. In the example

folder there is an implementation of ProvTransport using the package flutter_ble_lib_ios_15

prov = EspProv(
    transport: TransportBLE(peripheral),
    security: Security1(
        pop: pop,
    ),
);

The transport attribute accepts only the ProvTransport type, and the security attribute accepts only the ProvSecurity type, which has an implementation called Security1 that you will use to pass the Proof-of-Possession (PoP).

Establish a session with the device:

After that, you will need to establish a session with the device. You can do this using the establishSession function, which returns three types of EstablishSessionStatus:

  1. Connected: When the device establishes a connection successfully.
  2. Disconnected: When an error occurs while establishing a connection with the device.
  3. KeyMismatch: When the Proof-of-Possession (PoP) is incorrect.
var sessionStatus = await prov.establishSession();
log.d("Session Status = $sessionStatus");
switch (sessionStatus) {
    case EstablishSessionStatus.Connected:
        emit(BleWifiEstablishedConnectionState());
    case EstablishSessionStatus.Disconnected:
        emit(BleWifiEstablishedConnectionFailedState());
    case EstablishSessionStatus.Keymismatch:
        emit(BleWifiEstablishedConnectionKeyMismatch());
}
Scan networks from the device:

To scan Wi-Fi networks, use the startScanWifi function, which returns a list of WifiAp objects, each of which has the following attributes:

  1. String ssid
  2. int rssi
  3. bool active
  4. bool private
var listWifi = await prov.startScanWiFi();
log.d('Found ${listWifi.length} Wi-Fi networks');
for (var obj in listWifi) {
    log.d('Wi-Fi network: ${obj.ssid}');
}
Send and Apply WI-Fi Config:

To send and apply config use the sendWifiConfig and applyWifiConfig functions, respectively.

await prov.sendWifiConfig(ssid: event.ssid, password: event.password);
await prov.applyWifiConfig();
Get the status of applying Wi-Fi Config:

To retrieve the status, use the getStatus function, which returns a ConnectionStatus type. ConnectionStatus has the following attributes:

  1. WifiConnectionState state: WifiConnectionState has four types of states:

    • Connected.
    • Connecting.
    • Disconnected.
    • ConnectionFailed: When the state is ConnectionFailed, the WifiConnectFailedReason attribute indicates the type of error.
  2. String? deviceIp: This registers the device's IP after provisioning.

  3. WifiConnectFailedReason? failedReason: WifiConnectFailedReason has two types of failed reasons:

    • AuthError: When the Wi-Fi password was incorrectly typed.
    • NetworkNotFound: When the Wi-Fi SSID was incorrectly typed.
ConnectionStatus status = await prov.getStatus();
switch (status.state) {
    case WifiConnectionState.Connecting:
    {
        add(BleWifiLoadingEvent());
    }
    case WifiConnectionState.Connected:
    {
        log.d("Device IP: ${status.deviceIp}");
        add(BleWifiConnectedEvent());
    }
    case WifiConnectionState.Disconnected:
    {
        add(BleWifiDisconnectedEvent());
    }
    case WifiConnectionState.ConnectionFailed:
    {
        add(
            BleWifiConnectionFailedEvent(
                failedReason: status.failedReason!,
            ),
        );
    }
}

Send custom data:

To send and receive a custom data, use the sendReceiveCustomData function

var customAnswerBytes = await prov.sendReceiveCustomData(
    Uint8List.fromList(
        utf8.encode(customSendMessage),
    ),
);
var customAnswer = utf8.decode(customAnswerBytes);
log.i("Custom data answer: $customAnswer");

Check example application.

Protocol Communication Overview

The Protocol Communication (protocomm) component manages secure sessions and provides the framework for multiple transports. The application can also use the protocomm layer directly to have application-specific extensions for the provisioning or non-provisioning use cases.

Following features are available for provisioning:

  • Communication security at the application level

    • protocomm_security0 (no security)

    • protocomm_security1 (Curve25519 key exchange + AES-CTR encryption/decryption)

    • protocomm_security2 (SRP6a-based key exchange + AES-GCM encryption/decryption)

  • Proof-of-possession (support with protocomm_security1 only)

  • Salt and Verifier (support with protocomm_security2 only)

Protocomm internally uses protobuf (protocol buffers) for secure session establishment. Users can choose to implement their own security (even without using protobuf). Protocomm can also be used without any security layer.

Protocomm provides the framework for various transports:

  • Bluetooth LE

  • Wi-Fi (SoftAP + HTTPD)

  • Console, in which case the handler invocation is automatically taken care of on the device side. See Transport Examples below for code snippets.

Note that for protocomm_security1 and protocomm_security2, the client still needs to establish sessions by performing the two-way handshake. See Unified Provisioning for more details about the secure handshake logic.

Comparasion:

Comparison with esp_provisioning_softap package:

Repo softap support ble support cryptography protobuf
esp_provisioning_softap ✔️ ✖️ ✔️ (2.0.1) ✔️ (2.0.0)
esp_provisioning_ble ✖️ ✔️ ✔️ (2.5.0) ✔️ (3.0.0)

Last update: 10/06/2023 (Octorber 6, 2023).

TODOS:
  • Test and create examples of the package with others Bluetooth packages.

    • flutter_blue_plus
  • Implement security 0

  • Implement security 2

Credits

所属分类

依赖

依赖清单 3 项

源码仓库

使用此插件的项目

暂无相关数据。