Steuern Sie die GPIO-Ausgangspins Ihres OSSM über Bluetooth Low Energy für Zubehör und Integrationen.
Das OSSM stellt vier GPIO-Pins zur Verfügung, die über Bluetooth Low Energy (BLE) gesteuert werden können. Verwenden Sie diese Pins, um externes Zubehör, Anzeigen, Relais oder andere Hardware-Integrationen auszulösen.
Die GPIO-Steuerung ist eine Entwickler-/Maker-Funktion. Zum Senden von Befehlen ist eine BLE-Clientanwendung erforderlich – es gibt keine Schnittstelle auf dem Gerät für die GPIO-Steuerung.
Überblick
Die GPIO-Charakteristik ermöglicht Ihnen:
- Einen der 4 Pins auf HIGH oder LOW setzen
- Aktuelle Fähigkeiten auslesen
- Externe Hardware in Ihr OSSM integrieren
Anwendungsfälle
- LED-Anzeigen – Den Gerätezustand an eine externe Beleuchtung signalisieren
- Relaissteuerung – Externe Geräte ein- und ausschalten
- Zubehörsynchronisierung – Mit anderer Hardware koordinieren
- Benutzerdefinierte Integrationen – Eigene Steuerungssysteme entwickeln
BLE-Charakteristik
| Eigenschaft | Wert |
|---|---|
| UUID | 522b443a-4f53-534d-4000-420badbabe69 |
| Eigenschaften | READ, WRITE |
| Namensraum | 0x4 (GPIO) |
Die GPIO-Charakteristik ist Teil des Haupt-OSSM-BLE-Dienstes (522b443a-4f53-534d-0001-420badbabe69). Stellen Sie zunächst eine Verbindung zum Dienst her und greifen Sie dann auf diese Charakteristik zu.
Pin-Zuordnung
Die Firmware stellt 4 logische Pins bereit, die ESP32-GPIO-Nummern zugeordnet sind:
| Logischer Pin | ESP32 GPIO | Position auf der Platine |
|---|---|---|
| 1 | GPIO 2 | Am Header verfügbar |
| 2 | GPIO 15 | Am Header verfügbar |
| 3 | GPIO 22 | Am Header verfügbar |
| 4 | GPIO 33 | Am Header verfügbar |
Diese GPIO-Pins sind direkt mit dem ESP32 verbunden. Sie geben 3,3-V-Logikpegel aus und haben eine begrenzte Strombelastbarkeit (~12 mA pro Pin). Verwenden Sie für Hochstromlasten geeignete Treiber.
Befehlsformat
Schreiben (Pin-Status festlegen)
Senden Sie eine Zeichenfolge im Format:
<pin_number>:<state>Pin-Nummer: 1, 2, 3 oder 4
Statuswerte:
highoder1– Pin auf HIGH (3,3 V) setzenlowoder0– Pin auf LOW (0 V) setzen
Beispiele:
| Befehl | Wirkung |
|---|---|
1:high | Pin 1 (GPIO 2) auf HIGH setzen |
2:low | Pin 2 (GPIO 15) auf LOW setzen |
3:1 | Pin 3 (GPIO 22) auf HIGH setzen |
4:0 | Pin 4 (GPIO 33) auf LOW setzen |
Schreibantworten
| Antwort | Bedeutung |
|---|---|
ok:1:high | Pin 1 erfolgreich auf HIGH gesetzt |
ok:2:low | Pin 2 erfolgreich auf LOW gesetzt |
error:invalid_format | Befehlsformat nicht erkannt |
error:pin_out_of_range | Pin-Nummer nicht 1-4 |
Lesen (Fähigkeiten)
Das Lesen der Charakteristik gibt einen Hinweis auf verfügbare GPIO-Fähigkeiten zurück:
pins:[1,2,3,4]Dies zeigt an, welche logischen Pins zur Steuerung verfügbar sind.
Beispielcode
// Connect to OSSM (assumes already connected to service)
const gpioChar = await service.getCharacteristic(
"522b443a-4f53-534d-4000-420badbabe69"
);
// Set pin 1 HIGH
await gpioChar.writeValue(new TextEncoder().encode("1:high"));
// Read the response
const response = await gpioChar.readValue();
console.log(new TextDecoder().decode(response));
// Output: "ok:1:high"
// Set pin 2 LOW
await gpioChar.writeValue(new TextEncoder().encode("2:low"));
// Read capabilities
const caps = await gpioChar.readValue();
console.log(new TextDecoder().decode(caps));
// Output: "pins:[1,2,3,4]"import asyncio
from bleak import BleakClient
GPIO_UUID = "522b443a-4f53-534d-4000-420badbabe69"
async def control_gpio():
async with BleakClient("OSSM") as client:
# Set pin 1 HIGH
await client.write_gatt_char(GPIO_UUID, b"1:high")
# Read response
response = await client.read_gatt_char(GPIO_UUID)
print(response.decode()) # "ok:1:high"
# Set pin 2 LOW
await client.write_gatt_char(GPIO_UUID, b"2:low")
# Set multiple pins
await client.write_gatt_char(GPIO_UUID, b"3:high")
await client.write_gatt_char(GPIO_UUID, b"4:low")
asyncio.run(control_gpio())Hardware-Integration
Einfache LED-Anzeige
Schließen Sie eine LED mit Strombegrenzungswiderstand an:
GPIO Pin → 220Ω Resistor → LED Anode (+)
LED Cathode (-) → GNDVerwenden Sie für Standard-LEDs einen Widerstand von 220 Ω bis 470 Ω. Der 3,3-V-Ausgang des ESP32 liefert ausreichend Spannung für die meisten LEDs.
Relaissteuerung
Für Lasten mit höherem Strom verwenden Sie ein optoisoliertes Relaismodul:
GPIO Pin → Relay Module Signal
3.3V → Relay Module VCC
GND → Relay Module GNDDie meisten optoisolierten Relaismodule arbeiten mit 3,3-V-Logik. Überprüfen Sie die Spezifikationen Ihres Moduls.
Schließen Sie niemals Netzspannung (120 V/240 V) direkt an das OSSM an. Verwenden Sie immer ordnungsgemäß ausgelegte Relaismodule mit entsprechenden Sicherheitsvorkehrungen.
Umsetzung von Logikpegeln
Wenn Sie einen 5-V-Logikausgang benötigen:
GPIO Pin → Level Shifter 3.3V Side
5V → Level Shifter 5V Side
GND → Level Shifter GND
Level Shifter 5V Output → Your 5V DeviceEinschränkungen
- Keine PWM-Unterstützung – Pins sind nur digital HIGH/LOW
- Kein Eingabelesen – GPIO kann über diese Schnittstelle nur als Ausgang verwendet werden
- Keine Persistenz – Pin-Zustände werden beim Neustart des Geräts auf LOW zurückgesetzt
- Keine Interrupts – Keine Auslösung anhand externer Signale möglich
- Stromgrenzen – ESP32-GPIO: maximal ~12 mA pro Pin, insgesamt 40 mA
Fehlerbehebung
- Stellen Sie sicher, dass die BLE-Verbindung aktiv ist
- Überprüfen Sie, ob das Befehlsformat genau mit
<pin>:<state>übereinstimmt - Stellen Sie sicher, dass die Pin-Nummer 1-4 ist
- Überprüfen Sie mit einem Multimeter, ob sich die Spannung ändert
Das Befehlsformat wurde nicht erkannt. Gültige Formate:
1:high,1:low,1:1,1:02:high,2:low,2:1,2:0- usw.
Die Groß-/Kleinschreibung spielt keine Rolle (HIGH und high funktionieren beide).
Die Pin-Nummer muss 1, 2, 3 oder 4 sein. Überprüfen Sie Ihren Befehl.
- Überprüfen Sie die Spannung mit einem Multimeter (sollte 0 V oder ~3,3 V betragen).
- Überprüfen Sie den Strombedarf – der ESP32-GPIO ist auf ~12 mA begrenzt
- Sorgen Sie für eine gemeinsame Masse zwischen OSSM und Ihrem Gerät
- Erwägen Sie die Verwendung eines Transistors oder Relais für höhere Stromlasten