4.3 KiB
| name | description |
|---|---|
| usbtoggle-relay | Hardwarematige USB power-cycle via een relais (Wemos D1 Mini) — USB-module af/aan koppelen door het relais te schakelen. TRIGGER: module programmeren/ flashen (PlatformIO, ESP-IDF, MicroPython, esptool), module hangt of geen seriële poort, hardware reset / power cycle nodig, USB afkoppelen/aankoppelen, relais, usbtoggle, Wemos D1 vinden. Laatste redmiddel: alleen als softwarematige resets falen of niet bestaan. |
USB power-cycle via relais (usbtoggle)
Doel
Een via USB aangesloten module (bv. ESP32-C3) hardwarematig af- en aankoppelen door een relais te schakelen. Zo wordt een fysieke USB-handeling softwarematig uitgevoerd — handig als een module hangt of niet meer als seriële poort verschijnt.
Relais aan = USB afgekoppeld (module spanningsloos, verdwijnt van de USB-bus) Relais uit = USB aangekoppeld (module krijgt voeding, verschijnt terug)
Dit is een last resort: pas toepassen als alle softwarematige resets voor
de desbetreffende module falen of niet bestaan (bv. esptool hard reset,
machine.reset(), herflashen, pio device monitor herverbinden).
Hardware-opstelling
- Wemos D1 Mini (ESP8266) met relais-shield; relais-IN op D1/GPIO5. GPIO0 is bewust niet gebruikt (boot-strapping pin — laag houden boot het board in flash-modus).
- Het relais schakelt de voedingslijn van een andere USB-module (bv. ESP32-C3 via USB-hub). Relais aan → die module verliest voeding.
- Code:
/Users/eddy/src/usbtoggle(firmware +relay-script).
De Wemos D1 vinden
De poortnaam (/dev/cu.usbserial-XXXX) varieert per USB-poort en per
reboot — nooit hardcoden. Detectie:
-
Lijst seriële poorten met USB-identiteit:
python3 -c " import serial.tools.list_ports as p for x in sorted(p.comports()): print(x.device, '|', x.description, '|', x.hwid, '| serial=', x.serial_number) "De Wemos D1 (CH340) herken je aan
VID:PID=1A86:7523endesc='USB Serial'. De ESP32-C3 (native USB) aanVID:PID=303A:1001en een serienummer dat gelijk is aan het MAC-adres.LOCATION=...is het fysieke USB-pad (stabiel zolang de module in dezelfde poort blijft). -
Bevestiging via chip-ID (uniek per chip, onafhankelijk van poort):
/Users/eddy/src/usbtoggle/relay id /dev/cu.usbserial-XXXX # → ID usbtoggle-relay B52BBCBij meerdere modules: chip-ID per module noteren en per poort checken.
Relais bedienen
cd /Users/eddy/src/usbtoggle
./relay 1 # relais aan → USB afgekoppeld (module uit)
./relay 0 # relais uit → USB aangekoppeld (module aan)
./relay id # identificatie (chip-ID)
./relay 1 /dev/cu.usbserial-XXXX # poort expliciet opgeven (alleen als auto-detect faalt)
-
Zonder poortargument zoekt het script de module automatisch: het probeert alle CH340-poorten (
VID:PID=1A86:7523) met hetid-commando en gebruikt de eerste dieID usbtoggle-relayantwoordt. De module wordt dus gevonden waar die ook is aangesloten; de poortnaam hoeft nooit hardcoded te worden. -
Replies:
ON/OFF/ID ...; exit 0 = gelukt, exit 1 = fout (usage, poort niet te openen, geen geldige reply). -
Het script opent de poort met DTR/RTS gedeasserted (geen CH340 auto-reset); als het board toch reset, wordt de boot-banner weggegooid (max 2 s wachttijd).
Power-cycle workflow (module hangt)
- Zoek de poort van de Wemos D1 (zie boven), niet die van de hangende module.
./relay 1 <d1-poort>→ wacht 2–3 s tot de module van/dev/cu.*verdwenen is../relay 0 <d1-poort>→ wacht tot de module weer als seriële poort verschijnt (USB enumeration kan enkele seconden duren).- Controleer de poort van de module en ga verder met flashen/programmeren. Na een power-cycle is de module in fabrieksstaat wat betreft runtime-state: firmware opnieuw flashen als dat onderdeel van de flow is.
Waarschuwingen
- Het relais schakelt hardwarevoeding — nooit togglen tijdens een actieve flash/schrijfactie; alleen bij hang of als reset nodig is.
- Relais-stand na boot van de Wemos D1 is altijd uit (firmware zet GPIO5 laag
in
setup()). - Werkt alleen als de module daadwerkelijk via het relais gevoed wordt
(verifiëren: relais aan → device verdwijnt van
serial.tools.list_ports).