Recalbox ist eine Retro-Gaming Plattform für den Raspberry Pi und andere Systeme.
Diese Seite beschreibt kurz die Einrichtung und Tricks zu Recalbox auf dem Raspberry Pi.
Nützliche Links:
Die Links dienen nur als Beispiel. Preis-Stand: 15.2.18
| Preis | Link | Bemerkung | |
|---|---|---|---|
| Raspberry Pi 3 | 32 € | Amazon | |
| SD Karte 32 GB SanDisk Ultra | 14 € | Amazon | |
| Netzteil 2,5A | 13 € | Amazon | |
| CSL BT Adapter | 8,99 € | Amazon | Für Raspi < 3 |
| 7,98 € | Amazon | Belüftung? | |
| 21,99 € | Amazon | Integrierter Lüfter wirkungslos! | |
| 15-20 € | BL-Shop | Preis inkl. Versand @ Bricklink |
Recalbox-Image auf die SD-Karte schreiben:
Installation vom Raspberry Pi über Ethernet:
Das Recalbox-os bietet verschiedene Möglichkeiten das System einzurichten.
Bildschirm-Menü: Wenn der Raspi am TV angeschlossen ist, lassen sich die Einstellungen auf dem Bildschirm erledigen. Das Einstellungs-Menü öffnet man per Tastatur mit ENTER, bestätigen mit A. Weitere Tastenzuordnungen sind weiter unten aufgeführt.
Webseite: Recalbox hat einen Webserver integriert. Über http://recalbox kommt man auf die Einstellungs-Seite. Hier lassen sich Einstellungen vornehmen und ROMs hochladen, welche bis 500 MB groß sind. Größere ROMs (z.B. bei PSX) können über das Netzwerk kopiert werden (s.u.).
Netzwerkfreigabe: Im Heimnetz stellt Recalbox eine Ordner-Freigabe zur Verfügung. Dort kann man bequem ROMs und BIOS Dateien kopieren. Die Freigabe ist über „\\recalbox“ oder die IP-Adresse im Netzwerk möglich. Windows 7 erkennt nach paar Minuten auch Automatisch die Freigabe und der Ordner auf dem RPI wird im Explorer angezeigt.
SSH Fernzugriff: Für Spezialsachen muss man in Config-Dateien von LINUX rumeditieren. Zugriff per SSH funktioniert mit PuTTy am einfachsten. Um sich in die Konsole einzuloggen: PuTTy starten, dann hiermit einloggen:
host: recalbox user: root pw: recalboxroot
Tastatur als Notlösung zur Eingabe Link zur Anleitung auf GitHub (DE)
| GamePAD | Tastatur |
|---|---|
| START | Enter |
| Select | Space |
| Back | S |
| Enter | A |
Einfachste Weg: Originaler PS3 Dualshock 3 oder Sixaxis Controller. Denn der ist voreingestellt bei Recalbox und läuft „out of the box“. Chinaklone benötigen unter umständen andere Treiber und haben komische Randeffekte, verbinden sich nicht automatisch nach einem reboot, … .
Bluetooth mit dem CSL BT-Stick (s.o.) klappt sehr gut. Ein China-möppel funktioniert nur teilweise bzw garnicht (Findet den Controller, kann aber nicht koppeln). Raspberry Pi internes Bluetooth ungetestet, da kein RPI 3 verfügbar → Durchgraben von Foren nötig → google.
PS3 Controller koppeln ist ganz simpel. Vorraussetzung ist ein aktivierter Bluetooth-Empfänger (Intern oder extern).
Danach reicht es nach dem Start des Raspis den Controller per PS-Taste einzuschalten. Er verbindet sich automatisch.
Voreingestellt sind diese Zuordnungen. Aber es lassen sich eigene Tasten-Mappings erstellen.
| Taste | Zuordnung | Funktion |
|---|---|---|
| B | X | Auswählen |
| A | ◯ | Zurück |
| Y | ⬜ | Favoriten wechseln |
| X | △ | Kodi starten |
| Start | Menü | |
| Select | Optionen | |
| R | Nächste Seite | |
| L | Vorherige Seite |
Infos aus dem offiziellen Wiki: Die „Playstation“-Taste ist der Hotkey.
| Taste | Funktion |
|---|---|
| Hotkey + Y / ⬜ | Spielstand speichern |
| Hotkey + X / △ | Spielstand laden |
| Hotkey + A / ◯ | Spiel neustarten |
| Hotkey + B / X | Retroarch Menü |
| Hotkey + L1 | Screenshot |
| Hotkey + Start | Spiel beenden und zum Hauptmenü zurückkehren |
| Hotkey + Oben | Save Slot -1 auswählen |
| Hotkey + Unten | Save Slot +1 auswählen |
| Hotkey + Rechts | Spiel beschleunigen |
| Hotkey + Links | Zurückspulen (wenn in Optionen aktiviert) |
| Hotkey + R2 | Nächste Shader Vorlage |
| Hotkey + L2 | Vorherige Shader Vorlage |
Bei vielen alten Konsolen gibt es nichts besonderes zu beachten. Einfach die ROM in das entsprechende Verzeichnis packen (übers Netzwerk) oder über die Webseite hochladen.
Anschließend die „Emulation Station“ oder den Raspi neustarten.
Playstation 1 (PSX) benötigt neben den ROMs noch ein BIOS. Das BIOS muss zwingend eine bestimmte Prüfsumme (MD5 Hash) erfüllen. Unter diesem Link sind die Prüfsummen aufgeführt:
BIOS im recalbox-Wiki (DE)
PSX BIOS installieren: Das BIOS „SCPH1001.BIN“ über das Netzlaufwerk auf den Raspi in das BIOS verzeichnis laden und fertig. Die Nummer 1001 scheint für die USA zu gelten, andere Länder scheinen andere Nummern zu haben, was das bedeutet ist noch unklar.
ROMs kopieren: Die Spiele müssen als CD-Image vorliegen. Das Image einfach in das ROM verzeichnis packen. Dafür beide Files kopieren, die .bin und die .cue. Beide müssen den gleichen Namen haben. Dieser taucht dann später im Spielemenü auf.
Im Anschluss immer die „Emulation Station“ oder den Raspi neustarten.
Eine Memory Card ist immer eingelegt und es kann drauf los gespeichert werden. Klappt bei Worms Armageddon uper.
ScummVm ist der Emulator für alte Point-And-Click Adventure Games. Die Spiele-Unterstützung ist auf der offiziellen Homepage aufgeführt. scummvm.org/compatibility
Spiele kopieren: Files einfach über Ethernet in den entsprechenden Ordner kopieren. Jedes Spiel bekommt seinen eigenen Ordner, der Name ist Beliebig.
Wichtig ist eine Datei <shortname>.scummvm im Verzeichnis des Spiels abzulegen. Bei Windows den Editor nutzen um die Datei anzulegen. Die leere Datei dann im Spieleverzeichnis under <shortname>.scummvm abspeichern. Nicht als *.txt! Die Dateiendung muss „scummvm“ heißen. Der „Shortname“ muss dem entsprechenden Spiel aus dieser Liste entnommen werden.
Im Anschluss immer die „Emulation Station“ oder den Raspi neustarten.
| System | Spiel | Status | Bemerkung |
|---|---|---|---|
| GB | Super Mario Land 3 - Wario Land | ✔ | |
| GB | Tetris | ✔ | |
| GB | Kirby's Dream Land | ✔ | |
| SNES | Worms | ✔ | |
| SNES | Dr. Mario & Tetris | ✔ | |
| N64 | Mario Kart 64 | ✔ | |
| N64 | Mario Party 3 | (✔) | Musik stockt auf RPI2, rest flüssig. Spieler auf Spielfeld nicht sichtbar → bekannt |
| PS1 | Worms World Party | (✔) | Crash in bestimmten Menüs (Map-Editor/Tournament) |
| PS1 | Worms Armageddon | ✔ | |
| PS1 | GTA | ✘ | startet erst garnicht. ROM defekt? |
| PS1 | GTA 2 | ✔ | |
| PS1 | Testdrive 4 | ✔ | |
| PS1 | Warcraft 2 | ✔ | Anmerkung: Steuerung über Pad ist dusselig! |
| ScummVm | Toonstruck | ✔ | kurz angespielt |
| ScummVm | Myst | ✘ | Stürzt nach wenigen Minuten ab! |
| ScummVm | Myst Masterpiece | ✔ | |
| ScummVm | The Secret of Monkey Island | ✔ | kurz angespielt |
| ScummVm | Indiana Jones and the Fate of Atlantis | ∅ | Cd wiederfinden (oder die Files …) Shortname: „ atlantis“ |
Legende: ✔ Ja, (✔) mit Einschränkungen, ✘ Nein, ∅ eines der nächsten „neuen“ Spiele
Was sonst so aufgefallen ist beim Umgang mit recalbox:
Praktischerweise bringt recalbox direkt das KODI Mediacenter mit. Es kann definiert werden, das dieses Standardmäßig sofort startet.
KODI unterstützt CEC, also die Herstellerübergreifende Bedienung. Bei mir kann ich so mit der TV-Fernbedienung (Vom SONY Bravia KDL55…) KODI steuern. Steuerung über den PS3 Controller läuft ebenfalls.
Ganz bequem ist die kostenlose Fernbedienungs-App YATSE. Damit kann man super einfach durch die Mediensammlung navigieren, zieht sich die Scraper-Infos aus dem KODI inkl. Cover-Art u.v.a.m.
Beim Test des Raspi 3 wurden alle ROMs und Savegames des Raspi 2 kopiert. Alle Spiele liefen wie gewohnt an gespeicherter Stelle weiter.
Alle Savegames liegen unter „\\recalbox\share\saves“ nach Konsolen geordnet.
Ein Umziehen auf eine andere Plattform oder das Sichern der Spielstände ist somit super einfach.
In Arbeit
Auf dem SoC („Prozessor“) des RPI3 klebt ein kleiner Kühlkörper, weil er gerade in Griffnähe lag…
Status:
Temp-Untersuchung: Raspi 3 mit passiven Kühlkörper (so groß wie der Chip) im LEGO Gehäuse.
Netzwerk über RJ45 mit USB Funkempfänger für Tastatur. Bedienung nur über Bluetooth Pad.
Auslesen der CPU-Temp alle 5 s. Zeitachse in Sekunden.
Scripte auf dem Raspi ablegen
Medium schreibbar machen und Pfad zu den scripten:
mount -o remount rw, / cd /recalbox/scripts
Dort eines der fan_ctrl…py scripte hinkopieren (pscp) oder neu anlegen und abtippen.
Mit pscp (putty secure copy) wenn das script „fan_ctrl_pwm.py“ unter d:\ liegt.
pscp d:\fan_ctrl_pwm.py pi@<RPI IP>:/recalbox/scripts/
Startup-Script anlegen Aktuelle Scripte mit „ls“ anzeigen. S+Zahl zeigt Startreihenfolge.
mount -o remount rw, / cd /etc/init.d ls nano S33StartTempCtrl.py
Im Script eintragen:
#!/usr/bin/python import subprocess try: subprocess.Popen(["python","/recalbox/scripts/fan_ctrl.py"]) except KeyboardInterrupt: print "Quit"
Danach noch die Datei ausführbar machen:
chmod +x S33StartTempCtrl.py
Bei Bedarf testen:
/etc/init.d/S32StartFanControl.py start
Anschluss an den Raspi:
(Mit vorwiderstand für den 5 V Lüfter. Muss bei PWM weg)
Standardmäßig läuft der Mauszeiger sehr träge beim Raspberry Pi. Um dies abzustellen wieder eine SSH-Verbindung aufbauen. Dann:
mount -o remount, rw /boot nano /boot/cmdline.txt
Die Datei besteht aus nur einer Zeile. Das muss so bleiben!
Am Ende dieser Zeile mit einem Leerzeichen getrennt das hier eintippen:
usbhid.mousepoll=0
Dann wieder Speichern (STRG+O), NANO beenden (STRG+X) und neustarten:
reboot
Sondereinstellung für Anschluss eines DVI Displays (Link):
Über SSH verbinden und config.txt bearbeiten:
mount -o remount, rw /boot nano /boot/config.txt
Nano ist ein minimalistischer Editor unter LINUX. Dort dann das hier auskommentieren:
hdmi_drive=2
Speichern mit STRG+O und beenden mit STRG+X. Anschließend den RPI neustarten:
reboot
Am Fernseher hat diese Einstellung keine auswirkungen.
ALT! → aktuelle Versionen haben ein zufälliges Bootvideo.
Im release (Stand 4.3.2018) wurde ein Weihnachts-Start-Video eingeführt. Etwas spät für Februar …
Infos aus dem Forum entnommen.
Als erstes das Filesystem umstellen, Standard ist read-only. Und die Animation löschen/umbenennen:
mount -o remount rw / cd /recalbox/system/resources/splash/ cp recalboxintro.mp4 recalboxintro_alt.mp4
Das neue Video dann von Youtube runterladen, umbenennen nach „recalboxintro.mp4“ und per pscp auf den Raspi kopieren:
pscp d:\pfad\recalboxintro.mp4 root@recalbox:/recalbox/system/resources/splash
Dann des Raspi neustarten. (Der Scheibzugriff wird wieder umgestellt!)
Dieses Script liest alle X (hier: 5) sekunden die CPU Temperatur aus und schreibt diese mit einem Zeitstempel in eine txt-Datei im csv Format. Bei Excel einfach über „Daten“ importieren und „.“ durch „,“ ersetzen.
# Templogging Script import os import time # Settings M_TIME = 5 # Measure time interval counter = 0 def getCPUtemp(): res = os.popen('vcgencmd measure_temp').readline() return (res.replace("temp=", "").replace("'C\n", "")) print "starting logging ..." print "press ctrl + c to exit" # this rewrite the file! f = open('temp_log.txt', 'w') # write file header line f.write('Temp LOG - time interval = {0} s\n'.format(M_TIME)) while True: temp_float = float(getCPUtemp()) try: #print temp_float # write lines with timestamps in csv format f.write('{0},{1}\n'.format(counter,temp_float)) counter = counter + M_TIME except: print "FEHLER" time.sleep(M_TIME) f.close()
Die super einfache Zweipunkt-Regelung schaltet den Lüfter an Pin X bei überschreiten der Temperatur Y ein und bei unterschreiten der Temperatur Z wieder aus.
Der Pin X schaltet natürlich einen Transistor durch, welcher den Lüfter schaltet…
# Fan bang-bang control import os import time import RPi.GPIO as GPIO # Settings M_TIME = 5 # Measure time interval ON_TEMP = 70 # upper temp value -> Fan turned on OFF_TEMP = 60 # lower temp value -> Fan turned off FAN_PIN = 14 # Transistor for the cooling fan is connected to pin 14 # setup GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(FAN_PIN, GPIO.OUT) GPIO.output(FAN_PIN, False) # funtion for reading the cpu temperatur and return it as float def getCPUtemp(): res = os.popen('vcgencmd measure_temp').readline() return (res.replace("temp=", "").replace("'C\n", "")) # main loop for the bang-bang control while True: # get temperature temp_float = float(getCPUtemp()) try: # if actual temp axceeded the upper value, turn fan on if (temp_float > ON_TEMP): GPIO.output(FAN_PIN, True) # if actual temp drop below the lower value, turn fan off elif (temp_float < OFF_TEMP): GPIO.output(FAN_PIN, False) except: # for debugging print "ERROR" # cycle time of the control. for temperature it dont have to be fast time.sleep(M_TIME)
Gleicher Ablauf wie oben, jedoch kann die Lüftergeschwindigkeit im ON-Zustand über den Parameter „DC“ eingestellt werden.
Getestet: funktioniert prinzipiell, macht aber Geräusche unabhängig von der Frequenz. Glättung für Lüfter nötig → mehr Teile → mehr Bauraum nötig. Aufwand für den Nutzen nicht sinnvoll.
# Fan bang-bang control with pwm import os import time import RPi.GPIO as GPIO # Settings M_TIME = 5 # Measure time interval ON_TEMP = 70 # upper temp value -> Fan turned on OFF_TEMP = 60 # lower temp value -> Fan turned off FAN_PIN = 14 # Transistor for the cooling fan is connected to pin 14 PWM_F = 1000 # PWM frequency in kHz. Change only when fan makes fancy noises DC = 50 # PWM duty cycle for the FAN (0 ... 100, where 100 is the maximum) # setup GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(FAN_PIN, GPIO.OUT) # Activate PWM on the FAN_PIN p = GPIO.PWM(FAN_PIN, PWM_F) # funtion for reading the cpu temperatur and return it as float def getCPUtemp(): res = os.popen('vcgencmd measure_temp').readline() return (res.replace("temp=", "").replace("'C\n", "")) # main loop for the bang-bang control while True: # get temperature temp_float = float(getCPUtemp()) try: # if actual temp axceeded the upper value, turn fan on if (temp_float > ON_TEMP): p.start(DC) # if actual temp drop below the lower value, turn fan off elif (temp_float < OFF_TEMP): p.stop() except: # for debugging print "ERROR" # cycle time of the control. for temperature it dont have to be fast time.sleep(M_TIME)