Schnellstart: UESPA mit ESP32 / Mikrocontroller

Wrapper: uespa-embedded (C-ABI, no_std) · Ziele: ESP32-C3/C5/C6/P4 (ESP-IDF), STM32, RISC-V

1. Konto, App-ID und LicenseCert

Lege im Developer-Portal eine App mit der App-ID deiner Anwendung an und stelle ein LicenseCert aus. Das Zertifikat ist 294 Byte groß, wird offline geprüft und gilt nur für genau diese App-ID. Details: Lizenzen, App-IDs & Mandanten.

2. Einbinden

ESP-IDF-Komponente einbinden

bash
cp -r uespa-embedded/esp-idf/components/uespa  my-firmware/components/
# libuespa_embedded.a für das Ziel bauen, z. B. ESP32-C5:
cargo build -p uespa-embedded --release --target riscv32imac-unknown-none-elf

3. Initialisieren und senden

c
#include "uespa_embedded.h"

static const uint8_t LICENSE[294] = { /* aus dem Developer-Portal */ };
static const uint8_t LINKS[] = { UESPA_LINK_WIFI_DIRECT, UESPA_LINK_BLE, UESPA_LINK_INTERNET };

uespa_hal_t hal = { .user = NULL, .send = my_send, .recv = my_recv, .now_ms = my_ms,
                    .unix_secs = my_unix, .fill_random = my_rng, .battery_pct = my_batt };
int32_t st;
uespa_node_t *node = uespa_node_new(&hal, LINKS, sizeof LINKS, "com.example.doorbell",
                                    LICENSE, sizeof LICENSE, device_seed, &st);
if (st != UESPA_OK) { /* UESPA_ERR_LICENSE: Zertifikat/app_id prüfen */ }

uespa_node_bus_subscribe(node, "door/+/cmd");
for (;;) {
    uespa_node_tick(node);
    uespa_event_t ev;
    while (uespa_node_poll_event(node, &ev) == UESPA_OK) { /* ev.kind … */ }
    vTaskDelay(pdMS_TO_TICKS(20));
}

Hinweise

  • Heap kommt über malloc/free der Firmware; battery_pct < 0 meldet Netzteil (Full-Hop).
  • firmware_id muss der app_id des Zertifikats entsprechen.
  • Das Gerät leitet immer auch Pakete anderer Apps verschlüsselt weiter (Zwangs-Hop) – zugestellt wird nur im eigenen Namespace.
  • Rendezvous für Internet-P2P: rendezvous.uespa.io:47401 (UDP), Authority: https://uespa.io/v1/authority.