Files
proxi-ai/firmware/build.sh
T
christian 3905647b7f Proxi AI — Spielzeug-Roboter mit natürlicher Sprache steuern
Firmware, Bluetooth-Brücke und Agent-Skill für den KOSMOS-Proxi: einmal
flashen, danach hört der Roboter über Bluetooth LE auf Textbefehle. Was die
Befehle schickt, ist ihm egal — ein Skript, ein curl, oder ein KI-Agent, der
aus "mach mal was Lustiges" eine Choreografie baut.

  firmware/   MakeCode-Projekt (TypeScript) und fertige .hex für V1 und V2
  bridge/     BLE-Brücke und HTTP-API, einzige Abhängigkeit ist bleak
  agent/      Skill-Definition: Alltagssprache -> Befehle
  tools/      Quelltext aus .hex extrahieren, Musik-Tabellen prüfen
  docs/       Protokoll, Einrichtung, Hardware, Lizenzen

Zwei Dinge, die sonst nirgends stehen und in docs/HARDWARE.md dokumentiert
sind: die Pin-Belegung des Roboters ist nicht öffentlich, sie wurde aus den
mitgelieferten .hex-Dateien rekonstruiert (tools/hex_source.py holt sie
heraus). Und der Ton braucht zwingend eine ganzzahlige Frequenz sowie Pin P0
— sonst kracht der Lautsprecher, der Aufruf hängt und die Bluetooth-
Verbindung stirbt.

Am echten Roboter durchgetestet: Verbindung, Sensoren, Display, 41 Sekunden
Musik am Stück, alle Bewegungsrichtungen, Musik und Fahren gleichzeitig,
Tanzfiguren, Not-Stopp mitten in der Bewegung, Autostart nach Neustart.

MIT-Lizenz. Die Hardware-Extension stammt von kaku111 (TobbieII) und die
Notendaten aus pxt-microbit, beide ebenfalls MIT — siehe THIRD-PARTY-NOTICES.
2026-08-22 11:41:00 +00:00

54 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Baut die Proxi-AI-Firmware zu einer flashbaren .hex.
#
# ./build.sh -> proxi-ai.hex
#
# Das Ergebnis ist ein "Universal Hex": es enthaelt den Code für micro:bit V1
# und V2 und läuft auf beiden.
#
# Erstmalige Einrichtung (einmalig, braucht Internet — der C++-Teil wird vom
# MakeCode-Build-Service kompiliert):
# npm install pxt
# ./node_modules/.bin/pxt target microbit
# ./node_modules/.bin/pxt install
set -euo pipefail
cd "$(dirname "$0")"
OUT="built/binary.hex"
if [[ ! -d node_modules/pxt-microbit ]]; then
echo "pxt-microbit fehlt. Erst einrichten:" >&2
echo " npm install pxt && ./node_modules/.bin/pxt target microbit && ./node_modules/.bin/pxt install" >&2
exit 1
fi
# Build-Kennung aus dem Quellstand erzeugen. Geflasht wird von Hand — ohne
# diese Kennung sieht man dem Roboter nicht an, welcher Stand auf ihm liegt.
# Der Hash läuft nur über die Quellen, version.ts selbst zählt nicht mit;
# gleicher Code ergibt also immer dieselbe Kennung.
BUILD_ID=$(cat main.ts proxi.ts pxt.json | sha256sum | cut -c1-7)
cat > version.ts <<EOF
// Erzeugt von build.sh — nicht von Hand ändern.
const FW_BUILD = "$BUILD_ID"
EOF
echo "Build-Kennung: $BUILD_ID"
# Musik-Tabellen prüfen, bevor überhaupt gebaut wird. Der Fehler, der das
# hier nötig gemacht hat, war am Schreibtisch unsichtbar und nur am Gerät zu
# sehen — dieser Test fängt ihn vorher ab.
python3 ../tools/check_melodies.py
rm -f "$OUT"
./node_modules/.bin/pxt build
cp "$OUT" proxi-ai.hex
# Gegenprobe: die eingebetteten Quellen aus der .hex zurückholen und vergleichen.
python3 ../tools/hex_source.py --check proxi-ai.hex main.ts
python3 ../tools/hex_source.py --check proxi-ai.hex proxi.ts
echo
echo "Fertig: $(pwd)/proxi-ai.hex"
echo "Auf das MICROBIT-Laufwerk kopieren — fertig."