Skip to content

v1.2.0-rp2040 — first stable release ⭐

Pre-release
Pre-release

Choose a tag to compare

@semichcsc-byte semichcsc-byte released this 11 May 17:47
· 6 commits to main since this release

⭐ The release to install

This is the canonical first stable release for the Concept-Bytes OpenChess PCB v1 + Arduino Nano RP2040 Connect (the kit shipped to Kickstarter backers).

It supersedes the four iteration releases from earlier today (v1.0.0-rp2040 through v1.1.2-rp2040) — they remain in the releases archive as a record but users should install v1.2.0 above.

How to flash

  1. Download OpenChess-v1.2.0-rp2040.uf2 (302 KB).
  2. Double-tap the white reset button on your Arduino Nano RP2040 Connect within ~500 ms.
  3. The board mounts as a USB drive named RPI-RP2.
  4. Drag the .uf2 onto that drive. The board reboots automatically into v1.2.0.

⚠️ The pre-built .uf2 does not include WiFi credentials. To use AI mode, compile from source with your WiFi configured. Human-vs-Human mode works out of the box.

What works

Working AI mode

  • 🌐 Stockfish via WiFi (Easy / Medium / Hard / Expert)
  • 🛡️ Local move validation rejects malformed API responses
  • 🟦 Bot-thinking breathing pulse on the bot's back rank
  • 🟥 Red flash on rank 8 if the API can't respond — turn returns to player
  • 🔌 Resilient AP→STA WiFi setup

Full chess rules

  • ✅ Check, checkmate, stalemate
  • ✅ Castling (kingside + queenside, FIDE legal)
  • ✅ En passant (pink LED hint, correct captured-pawn removal)
  • ✅ Pinned-piece detection
  • ✅ 50-move rule + insufficient material draws
  • ✅ Promotion choice via 4 LEDs (Q / R / B / N) in Human-vs-Human

UX

  • 💡 Setup hint at boot (white side glows white, black side red, dim as pieces are placed)
  • 🌈 Convergent rainbow explosion when all 32 pieces are in place
  • 🎯 Simplified 2-option menu: D5 = HvsH, E4 = AI
  • 📌 Sticky menu (lifting a piece to use as selector doesn't regress)
  • 🔄 Reset gesture (32 pieces in starting position for ≥1.5 s = back to menu)
  • 🆔 Versioned boot banner

Robustness

  • ✅ 10 chess engine self-tests at every boot (red flash 5× on failure)
  • ✅ Sensor debounce (3 consecutive scans required)
  • ✅ AP shutdown when not needed
  • ✅ Driver-layer column-mirror coordinate fix (the Concept-Bytes PCB wires file a to internal column 7; upstream never accounted for this, so chess notation in serial logs / FEN was mirrored across the a-h axis. Fixed in BoardDriver — 2 lines, 36 callers untouched.)

Bug fixes vs upstream Concept-Bytes (each is a real PR upstream)

# Bug Upstream PR
1 AI mode hangs at "Connecting to WiFi…" #9
2 "API request was not successful" on a successful response #10
3 Easy and Medium AI use identical depth #10
4 Bot move applied without local validation #10
5 MODE_GAME_3 placeholder spams serial #10
6 moves[27] vs moves[28] inconsistency #10
7 No chess rules (check, mate, castling, EP, draws) #11
8 Bot freezes silently on API timeout this fork only
9 Column-mirror coordinate bug this fork only (PCB-specific)

Verified

Sketch uses 148398 bytes (0%) of program storage space.
Global variables use 44640 bytes (16%) of dynamic memory.
=== Self-tests complete: 10/10 passed ===

End-to-end on Arduino Nano RP2040 Connect with WiFiNINA firmware 3.0.1, Concept-Bytes PCB v1: 15+ moves of an Italian Game with capture, castling, invalid-move recovery, and breathing-pulse-during-bot-thinking all verified working.

Known limitations (deferred to v1.3)

  • Serial debug print has a row-axis mirror (logs e2 to e4 as e7 to e5). Internally consistent, only the human-readable print is wrong.
  • AI mode promotion still auto-Q (5-char API parse not implemented).
  • Difficulty selection requires recompile.
  • 3-fold repetition not implemented (~2 KB RAM cost).

Source