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.
54 lines
1.8 KiB
Bash
Executable File
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."
|