From 73dc2f188fa080dfe514334f049b474938f14c8e Mon Sep 17 00:00:00 2001 From: Eddy de Vink Date: Thu, 13 Aug 2026 12:08:15 +0200 Subject: [PATCH] Move relay to GPIO5, harden relay script, add monitor_speed --- README.md | 5 ++++- platformio.ini | 1 + relay | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- src/main.cpp | 2 +- 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e1a68b5..fde58ae 100644 --- a/README.md +++ b/README.md @@ -9,15 +9,18 @@ Sluit aan via USB en stuur commando's: ```bash ./relay 1 # relais aan ./relay 0 # relais uit +./relay 1 /dev/cu.usbserial-XXXX # poort opgeven als default afwijkt ``` ## Pinnen | Component | GPIO | |-----------|------| -| Relais | 0 | +| Relais (shield IN) | 5 (D1) | | LED | LED_BUILTIN | +Relais-IN zit op D1 (GPIO5): GPIO0 is bewust vermeden (boot-strapping pin — laag houden kan het board in flash-modus laten booten bij reset). + ## Build & Flash ```bash diff --git a/platformio.ini b/platformio.ini index 4fa4a6d..1cd49f1 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,3 +12,4 @@ platform = espressif8266 board = d1_mini framework = arduino +monitor_speed = 115200 diff --git a/relay b/relay index 9dc0ae8..9429222 100755 --- a/relay +++ b/relay @@ -1,3 +1,47 @@ -#!/bin/bash -[ $# -ne 1 ] || [ "$1" != "0" -a "$1" != "1" ] && { echo "Usage: relay 0|1"; exit 1; } -python3 -c "import serial; s=serial.Serial('/dev/cu.usbserial-2110',115200,timeout=2); s.write(b'$1'); print(s.read(10).decode())" +#!/usr/bin/env python3 +"""Toggle the USB relay via serial: ./relay 1|0 [serial_port].""" +import sys +import serial + +DEFAULT_PORT = "/dev/cu.usbserial-2110" + +def main() -> int: + if len(sys.argv) not in (2, 3) or sys.argv[1] not in ("0", "1"): + print(f"Usage: {sys.argv[0]} 0|1 [serial_port]", file=sys.stderr) + return 1 + command = sys.argv[1] + port = sys.argv[2] if len(sys.argv) == 3 else DEFAULT_PORT + try: + # dtr/rts expliciet uit vóór open: voorkomt (of beperkt) de CH340 + # auto-reset (DTR->RST) bij het openen van de poort. pyserial 3.5 + # accepteert geen dtr=/rts= kwargs in de constructor, maar de + # states worden wél geëerd door open(). + s = serial.Serial() + s.port = port + s.baudrate = 115200 + s.timeout = 2 + s.dtr = False + s.rts = False + s.open() + except serial.SerialException as exc: + print(f"ERROR: cannot open {port}: {exc}", file=sys.stderr) + return 1 + try: + # Als het board toch reset bij open: wacht op de boot-banner en + # gooi die weg, zodat de reply niet vervuild raakt. Geen banner + # binnen 2 s (timeout, readline geeft b"") = geen reset: door. + s.readline() + s.reset_input_buffer() + s.write(command.encode()) + s.flush() + reply = s.readline().decode(errors="replace").strip() + finally: + s.close() + if reply in ("ON", "OFF"): + print(reply) + return 0 + print(f"ERROR: no valid reply from board (got {reply!r})", file=sys.stderr) + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/main.cpp b/src/main.cpp index 6842ccd..dad1b9e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,6 @@ #include -#define RELAY_PIN 0 +#define RELAY_PIN 5 // D1 — relay shield IN; GPIO0 is a boot-strapping pin (must be HIGH at reset, else UART download mode) #define LED_PIN LED_BUILTIN void setup() {