Zum Hauptinhalt springen

ArmorLinkModule

ArmorLinkModule beschreibt ein Module innerhalb eines ArmorLink-Netzwerks.

Es definiert den Modulnamen, den Modultyp und die über ArmorLink bereitgestellte Funktionalität.

Für den konzeptionellen Überblick siehe Modules.

Grundlegende Verwendung

Jeder ArmorLink-Sketch beginnt mit der Erstellung einer ArmorLinkModule-Instanz.

ArmorLinkModule module(
"Helmet",
ArmorLinkModuleType::Helmet
);

Anschließend wird das Module an die ArmorLink Runtime übergeben.

ArmorLinkOptions options;
options.enableEspNow = true;

ArmorLink.begin(module, options);

Weitere Informationen zur Initialisierung findest du unter ArmorLink Runtime.

Konstruktor

ArmorLinkModule module(
"Module Name",
ArmorLinkModuleType::Generic
);

Der Konstruktor definiert:

  • Modulname
  • Modultyp

Modulname

Der Modulname identifiziert das Module innerhalb eines ArmorLink-Netzwerks.

Beispiel:

ArmorLinkModule module("Helmet", ArmorLinkModuleType::Helmet);

Der Name wird beim Senden von Commands verwendet.

ArmorLink.sendCommand(
"Helmet",
"Facemask",
"toggle"
);

Modulnamen sollten innerhalb eines ArmorLink-Netzwerks eindeutig sein.

Weitere Informationen findest du unter Commands.

Modultyp

Der Modultyp beschreibt, um welche Art von Module es sich handelt.

Beispiel:

ArmorLinkModule module("Helmet", ArmorLinkModuleType::Helmet);

Modultypen dienen ausschließlich der Beschreibung.

Sie beeinflussen weder Kommunikation, Routing noch Verhalten.

Ihr Hauptzweck besteht darin, Modules innerhalb der ArmorLink App leichter identifizieren und organisieren zu können.

Häufige Modultypen

ArmorLink stellt vordefinierte Modultypen für typische Anwendungsfälle bereit.

Beispiele:

  • ArmorLinkModuleType::Generic
  • ArmorLinkModuleType::Helmet
  • ArmorLinkModuleType::Chest
  • ArmorLinkModuleType::Back
  • ArmorLinkModuleType::Arm
  • ArmorLinkModuleType::Hand
  • ArmorLinkModuleType::Leg

Verwende Generic, wenn kein spezifischer Typ auf dein Module zutrifft.

Bereitgestellte Funktionalität

Ein Module kann Funktionalität bereitstellen über:

  • Actions
  • Configuration
  • Telemetry

Auf diese APIs wird über die Modulinstanz zugegriffen.

module.actions();
module.config();

actions()

actions() liefert die Action-Collection des Modules zurück.

Actions definieren Funktionalität, die über ArmorLink ausgeführt werden kann.

Beispiel:

module.actions()
.add("toggleFaceplate")
.label("Toggle Faceplate")
.command("Facemask", "toggle")
.onExecute([]{
toggleFaceplate();
});

Weitere Informationen findest du unter Actions und Actions API.

config()

config() liefert die Configuration-Collection des Modules zurück.

Configuration-Werte sind persistente Moduleinstellungen, die über die ArmorLink App angezeigt und verändert werden können.

Beispiel:

module.config()
.addInt("volume", &volume, 20)
.label("Volume")
.range(0, 30)
.step(1)
.onIntChange([](int value)
{
dfplayer.volume(value);
});

Weitere Informationen findest du unter Configuration und Configuration API.

Gateway-Module

Ein Module kann gleichzeitig die Gateway-Rolle übernehmen.

Dies wird über ArmorLinkOptions gesteuert und nicht über den Modultyp.

Beispiel:

ArmorLinkModule module("Chest", ArmorLinkModuleType::Chest);

ArmorLinkOptions options;
options.enableGateway = true;

ArmorLink.begin(module, options);

Das Gateway ist eine Rolle und kein eigener Gerätetyp.

Weitere Informationen findest du unter Gateway.

Projekte mit einem Modul

In Projekten mit nur einem Module kann dieses gleichzeitig die Gateway-Rolle übernehmen.

Beispiel:

ArmorLinkModule module("Arc Reactor", ArmorLinkModuleType::Generic);

ArmorLinkOptions options;
options.enableGateway = true;
options.enableEspNow = false;
options.enableBle = true;

ArmorLink.begin(module, options);

ESP-NOW wird nicht benötigt, wenn keine weiteren Modules vorhanden sind.

Vollständiges Beispiel

#include <ArmorLink.h>

ArmorLinkModule module("Helmet", ArmorLinkModuleType::Helmet);
ArmorLinkRuntime ArmorLink;

int volume = 20;

void setup()
{
Serial.begin(115200);

module.actions()
.add("toggleFaceplate")
.label("Toggle Faceplate")
.command("Facemask", "toggle")
.onExecute([]{
toggleFaceplate();
});

module.config()
.addInt("volume", &volume, 20)
.label("Volume")
.range(0, 30)
.step(1);

ArmorLinkOptions options;
options.enableEspNow = true;

ArmorLink.begin(module, options);
}

void loop()
{
ArmorLink.loop();
}

Zusammenfassung

ArmorLinkModule definiert ein Module innerhalb eines ArmorLink-Netzwerks.

Ein Module besitzt:

  • Einen Namen
  • Einen Typ
  • Actions
  • Configuration
  • Telemetry

Der Modulname wird für das Command-Routing verwendet.

Der Modultyp dient der Beschreibung und wird hauptsächlich von der ArmorLink App genutzt.

Gateway-Verhalten wird über ArmorLinkOptions aktiviert.