11 KiB
HS-S43A Touch Migration + S3R Cleanup Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Remove internal pullups for HS-S43A touch sensors (invert logic), and purge all obsolete "Atom S3R Voice" references from code and docs.
Architecture: Two firmware files get identical pinMode+logic changes. Six documentation/config files get S3R→S3 Lite corrections. Compile verification via pio run for both environments.
Tech Stack: C++/Arduino, PlatformIO, Markdown docs, Bash scripts, YAML CI
Task 1: Firmware — remove pullups and invert touch logic
Files:
-
Modify:
src/main.cpp:400-401,561-562 -
Modify:
src/client.cpp:220-221,349-350 -
Step 1: Change pinMode from INPUT_PULLUP to INPUT in main.cpp
In src/main.cpp, change lines 400-401:
pinMode(TOUCH1_PIN, INPUT_PULLUP);
pinMode(TOUCH2_PIN, INPUT_PULLUP);
→
pinMode(TOUCH1_PIN, INPUT);
pinMode(TOUCH2_PIN, INPUT);
- Step 2: Change pinMode from INPUT_PULLUP to INPUT in client.cpp
In src/client.cpp, change lines 220-221:
pinMode(TOUCH1_PIN, INPUT_PULLUP);
pinMode(TOUCH2_PIN, INPUT_PULLUP);
→
pinMode(TOUCH1_PIN, INPUT);
pinMode(TOUCH2_PIN, INPUT);
- Step 3: Invert touch read logic in main.cpp
In src/main.cpp, change lines 561-562:
bool t1Raw = (digitalRead(TOUCH1_PIN) == LOW);
bool t2Raw = (digitalRead(TOUCH2_PIN) == LOW);
→
bool t1Raw = (digitalRead(TOUCH1_PIN) == HIGH);
bool t2Raw = (digitalRead(TOUCH2_PIN) == HIGH);
- Step 4: Invert touch read logic in client.cpp
In src/client.cpp, change lines 349-350:
bool t1Raw = (digitalRead(TOUCH1_PIN) == LOW);
bool t2Raw = (digitalRead(TOUCH2_PIN) == LOW);
→
bool t1Raw = (digitalRead(TOUCH1_PIN) == HIGH);
bool t2Raw = (digitalRead(TOUCH2_PIN) == HIGH);
- Step 5: Compile both firmware environments
Run: pio run
Expected: SUCCESS for both s3lite-server and s3lite-client
- Step 6: Commit firmware changes
git add src/main.cpp src/client.cpp
git commit -m "fix: remove pullups, invert touch logic for HS-S43A sensors"
Task 2: AGENTS.md — update board, pins, flash command
Files:
-
Modify:
AGENTS.md:3,7,8,9,16,23 -
Step 1: Update line 3 (project summary)
ESP32-S3-PICO-1-N8R8 (Atom S3R Voice), 2 relais, 2 touch sensors (JR223B), BLE, Android app USB OTG.
→
M5Stack Atom S3 Lite (ESP32-S3), 2 relais, 2 touch sensors (HS-S43A), BLE, Android app USB OTG.
- Step 2: Update line 7 (board spec)
- **Board:** Atom S3R Voice (ESP32-S3-PICO-1-N8R8), 16MB OPI flash
→
- **Board:** M5Stack Atom S3 Lite (ESP32-S3)
- Step 3: Update line 8 (pin definitions)
- **Pinnen:** G1=RELAY1, G2=RELAY2, G8+pullup=TOUCH1, G6+pullup=TOUCH2, G41=BUTTON (active low), G46=LED
→
- **Pinnen:** G1=RELAY1, G2=RELAY2, G8=TOUCH1, G6=TOUCH2, G41=BUTTON (active low), G46=LED
- Step 4: Update line 9 (touch sensor type)
- **Touch:** DC3-24V Capacitieve Touch Schakelaar JR223B (GEEN TTP223). Minder C op punt A = gevoeliger = meer false triggers.
→
- **Touch:** HS-S43A Digital Capacitive Switch Module (epenelab.io), actief HIGH, geen pullup nodig.
- Step 5: Update line 16 (workspace description)
`/home/eddy/src/Project_SylDa/` — S3R firmware + Android app
→
`/home/eddy/src/Project_SylDa/` — Atom S3 Lite firmware (server + client) + Android app
- Step 6: Update line 23 (manual flash command)
Replace the entire line 23 (manual flash command) to use s3lite-server build dir:
- **Direct flashen (handmatig):** `~/.platformio/packages/tool-esptoolpy/esptool.py --no-stub --chip esp32s3 --port /dev/ttyACM1 --baud 115200 --before default_reset --after hard_reset write_flash --flash_mode keep --flash_size keep 0x0 .pio/build/s3lite-server/bootloader.bin 0x8000 .pio/build/s3lite-server/partitions.bin 0xE000 ~/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin 0x10000 .pio/build/s3lite-server/firmware.bin`
- Step 7: Commit
git add AGENTS.md
git commit -m "docs: update AGENTS.md for S3 Lite + HS-S43A touch sensors"
Task 3: README.md — update all S3R references and touch sensor docs
Files:
-
Modify:
README.md:5,13,17,18,24,27,28,45,134,138,140,184,197,380 -
Step 1: Update line 5 (project description)
BLE-gestuurde relais-switch voor de Atom S3R Voice (ESP32-S3-PICO-1-N8R8, 16MB OPI flash) met een bijbehorende Android-app. De relais kunnen worden bediend via capacitieve touch-sensoren (JR223B) óf via Bluetooth Low Energy vanaf een Android-telefoon.
→
BLE-gestuurde relais-switch voor de M5Stack Atom S3 Lite (ESP32-S3) met een bijbehorende Android-app. De relais kunnen worden bediend via capacitieve touch-sensoren (HS-S43A) óf via Bluetooth Low Energy vanaf een Android-telefoon.
- Step 2: Update line 13 (board spec table)
| Board | Atom S3R Voice (ESP32-S3-PICO-1-N8R8) |
→
| Board | M5Stack Atom S3 Lite (ESP32-S3) |
- Step 3: Remove line 14 (SoC row — ESP32-S3-PICO-1-N8R8 detail)
Delete line 14: | SoC | ESP32-S3-PICO-1-N8R8 (8MB Flash, 8MB PSRAM, 16MB OPI flash) |
- Step 4: Update lines 17-18 (touch sensor table rows)
| Touch sensor 1 | DC3-24V Capacitieve Touch Schakelaar JR223B op **G8** (interne pullup) |
| Touch sensor 2 | DC3-24V Capacitieve Touch Schakelaar JR223B op **G6** (interne pullup) |
→
| Touch sensor 1 | HS-S43A Digital Capacitive Switch Module op **G8** (actief HIGH) |
| Touch sensor 2 | HS-S43A Digital Capacitive Switch Module op **G6** (actief HIGH) |
- Step 5: Update pinout diagram (lines 24-31)
G6 = TOUCH2 (INPUT_PULLUP)
G8 = TOUCH1 (INPUT_PULLUP)
→
G6 = TOUCH2 (INPUT)
G8 = TOUCH1 (INPUT)
- Step 6: Update line 44-45 (JR223B note)
Replace the JR223B note block:
> **JR223B touch sensor:** Minder C op punt A = gevoeliger = meer false triggers. Bij lange draden of elektrische ruis een externe pullup plaatsen.
→
> **HS-S43A touch sensor:** Digitale output (actief HIGH). Geen pullup nodig — de sensor geeft actief 0V of 3.3V.
- Step 7: Update relais logica tabel (lines 134, 138, 140)
| Relais 1 | Touch sensor 1 | G8 = LOW (aanraken) | Relais 1 aan |
→
| Relais 1 | Touch sensor 1 | G8 = HIGH (aanraken) | Relais 1 aan |
| Relais 2 | Touch sensor 2 | G6 = LOW (aanraken) | Relais 2 aan |
→
| Relais 2 | Touch sensor 2 | G6 = HIGH (aanraken) | Relais 2 aan |
- Step 8: Update serial monitor examples (lines 184, 197)
=== Atom VoiceS3R BLE Relay ===
→ (both occurrences)
=== SylDa BLE Relay ===
- Step 9: Update line 380 (technical notes)
- De Atom S3R Voice gebruikt de ES8311 audio codec op G45/G0/G48/G4/G3/G17/G11, IR TX op G47, en de knop op G41. Deze pinnen zijn niet beschikbaar voor eigen gebruik (behalve G41 als input).
→
- De Atom S3 Lite heeft GPIO G1, G2, G5-G8, G38, G39 beschikbaar op de headers. G41 is de interne knop (active low). G46 is de interne LED.
- Step 10: Commit
git add README.md
git commit -m "docs: update README for S3 Lite + HS-S43A, remove S3R references"
Task 4: CI and tools — fix build output paths
Files:
-
Modify:
.forgejo/workflows/ci.yml:25-27 -
Modify:
tools/copy_firmware.sh:4 -
Step 1: Fix ci.yml build paths
In .forgejo/workflows/ci.yml, change lines 25-27:
cp .pio/build/m5stack-atoms3r/firmware.bin /tmp/ci-artifacts/firmware/
cp .pio/build/m5stack-atoms3r/bootloader.bin /tmp/ci-artifacts/firmware/
cp .pio/build/m5stack-atoms3r/partitions.bin /tmp/ci-artifacts/firmware/
→
cp .pio/build/s3lite-server/firmware.bin /tmp/ci-artifacts/firmware/
cp .pio/build/s3lite-server/bootloader.bin /tmp/ci-artifacts/firmware/
cp .pio/build/s3lite-server/partitions.bin /tmp/ci-artifacts/firmware/
- Step 2: Fix copy_firmware.sh build path
In tools/copy_firmware.sh, change line 4:
BINARY_DIR="$(cd "$(dirname "$0")/.." && pwd)/.pio/build/m5stack-atoms3r"
→
BINARY_DIR="$(cd "$(dirname "$0")/.." && pwd)/.pio/build/s3lite-server"
- Step 3: Commit
git add .forgejo/workflows/ci.yml tools/copy_firmware.sh
git commit -m "fix: update build paths m5stack-atoms3r → s3lite-server"
Task 5: Historical docs — purge S3R references
Files:
-
Modify:
docs/superpowers/specs/2026-07-28-esp32-pico-d4-port-design.md -
Modify:
docs/superpowers/plans/2025-07-31-sylda-nimble-hmac-plan.md -
Modify:
docs/superpowers/plans/2026-07-30-ble-ota.md -
Modify:
docs/superpowers/plans/2025-07-28-esp32-pico-d4-port.md -
Modify:
docs/superpowers/plans/2026-07-28-esp32-pico-d4-port.md -
Step 1: Fix
docs/superpowers/specs/2026-07-28-esp32-pico-d4-port-design.md
S3R references in this file (lines 3, 7, 48, 50, 116):
-
Line 3:
Atom VoiceS3R→Atom S3 Lite -
Line 7:
Atom VoiceS3R with ESP32-S3-PICO-1-N8R8 (8MB Flash, 8MB PSRAM)→Atom S3 Lite (ESP32-S3) -
Line 48: BLE device name row — keep as-is (it documents the rename from S3R), no change needed
-
Line 50:
"Atom VoiceS3R BLE Relay"→ keep as-is (documents the rename) -
Line 116:
m5stack-atoms3r→s3lite-server -
Step 2: Fix
docs/superpowers/plans/2025-07-31-sylda-nimble-hmac-plan.md
Line 115: S3R pinmap + 1-client code → old pinmap + 1-client code
- Step 3: Fix
docs/superpowers/plans/2026-07-30-ble-ota.md
Line 331: m5stack-atoms3r → s3lite-server
- Step 4: Fix
docs/superpowers/plans/2025-07-28-esp32-pico-d4-port.md
Line 170: "AtomS3R-Relay" → keep as-is (documents the old name)
- Step 5: Fix
docs/superpowers/plans/2026-07-28-esp32-pico-d4-port.md
Line 140: "=== Atom VoiceS3R BLE Relay ===" → keep as-is (documents old serial banner)
Line 150: "AtomS3R-Relay" → keep as-is (documents old BLE name)
Line 160: 'AtomS3R-Relay' → keep as-is (documents old BLE name)
Line 168: S3-specific or AtomS3R references → S3-specific references
Line 171: "S3R\|S3\|Atom Voice\|46\|G38\|G1\b" → "S3\|Atom Voice\|46\|G38\|G1\b"
Line 195: m5stack-atoms3r → s3lite-server
- Step 6: Commit
git add docs/superpowers/
git commit -m "docs: purge S3R references from historical design docs and plans"
Task 6: Final verification
- Step 1: Verify no remaining S3R references
Run: grep -rPn '(?i)s3r|atoms3r|m5stack-atoms3r|Atom S3R|VoiceS3R' --include='*.md' --include='*.cpp' --include='*.yml' --include='*.sh' .
Expected: no output
- Step 2: Verify firmware compiles
Run: pio run
Expected: SUCCESS for both environments
- Step 3: Commit design doc and spec
git add docs/superpowers/specs/2026-08-01-hs-s43a-touch-migration-design.md docs/superpowers/plans/2026-08-01-hs-s43a-touch-migration.md
git commit -m "docs: add design spec and implementation plan for HS-S43A migration"