v1.1.1-rp2040 — bot-thinking pulse + SSL stability
Pre-releasePatch release
Adds the bot-thinking breathing pulse on rank 8 (the bot's back rank) without breaking the WiFiSSL TLS handshake.
Why this matters
The earlier attempt at this animation (in v1.1) called clearAllLEDs() + showLEDs() ~20 times per second from inside the SSL read loop. Each NeoPixel show() disables interrupts for ~2.5 ms (bit-banging the WS2812 protocol), and the cumulative effect during the SSL handshake / read killed every Stockfish API call: Failed to connect to Stockfish API on EVERY move.
Fix: slow sine-wave breathing at ~5 fps (8 brightness buckets), with a redraw skip when the bucket hasn't changed. NeoPixel writes during the request drop by ~95 %.
Verified end-to-end
Played a real game on the physical board: e2-e4 → breathing pulse plays for ~2 s → Stockfish responds with e7e5 → bot move displayed correctly. Multiple subsequent moves including a capture, a castling attempt, and an invalid-move recovery all worked.
Known issue (deferred to v1.2)
The serial debug log still prints chess notation that's mirrored across the rank axis (a move from e2 to e4 is logged as from e7 to e5). Internally the firmware tracks the position correctly and Stockfish receives the right FEN — only the human-readable serial print has a row-axis mirror, the same kind of bug that was fixed for columns in v1.1. Will be fixed in v1.2 by aligning chess_bot.cpp and chess_moves.cpp print helpers with the standard FEN row convention.
Verified
Sketch uses 148200 bytes (0%) of program storage space.
Global variables use 44640 bytes (16%) of dynamic memory.
=== Self-tests complete: 10/10 passed ===
Tested on Arduino Nano RP2040 Connect, WiFiNINA firmware 3.0.1, Concept-Bytes PCB v1.
How to flash
Drag-and-drop OpenChess-v1.1.1-rp2040.uf2 onto the RPI-RP2 USB drive after double-tapping the white reset button. See the Quick Start for details.
Source
Branch fix/v1.1.1-thinking-pulse