搜尋套件、儲存庫與 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 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。