Benutzer-Werkzeuge

Webseiten-Werkzeuge


public:recalbox

Recalbox Retro-Gaming Plattform & Media Center

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:


Teileliste

Die Links dienen nur als Beispiel. Preis-Stand: 15.2.18

PreisLinkBemerkung
Raspberry Pi 332 €Amazon
SD Karte 32 GB SanDisk Ultra14 €Amazon
Netzteil 2,5A13 €Amazon
CSL BT Adapter8,99 €AmazonFür Raspi < 3
:?: Offizielles Raspberry Gehäuse7,98 €AmazonBelüftung?
:?: NES Retro-Case / Lüftung mies21,99 €AmazonIntegrierter Lüfter wirkungslos!
:?: NES LEGO Case 15-20 €BL-ShopPreis inkl. Versand @ Bricklink

Software-Liste

Installation

Recalbox-Image auf die SD-Karte schreiben:

  • Win32 Diks Imager installieren
  • In den Installationspfad navigieren (z.B. /Programme (x86)/Imagewriter/ )
  • Rechtsklick → Als Administrator ausführen
  • Recalbox Image auswählen
  • SD-Karte auswählen
  • → write Image

Installation vom Raspberry Pi über Ethernet:

  • Raspberry Pi anschließen ;-)
  • Sobald der RPI Power hat, bootet er von der SD-Karte
  • Die erste Einrichtung erfolgt voll automatisch
    • Eine IP-Adresse zieht er sich über DHCP vom Router
    • Erreichbar ist er dann über „recalbox“ im Netzwerk
  • Sollte er nur über WLAN verbunden werden
    • Tastatur anschließen
    • WLAN über TV manuell einrichten (SSID und PW eingeben)
  • Weitere Einstellungen sind über Tastatur/Gamepad, Webseite und SSH-Zugriff möglich (s.u.)

Einrichten

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

Tastaturmapping

Tastatur als Notlösung zur Eingabe Link zur Anleitung auf GitHub (DE)

GamePADTastatur
STARTEnter
SelectSpace
BackS
EnterA

Controller (PS3)

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).

  • Controller per USB Kabel anschließen
  • ca. 10 s warten
  • Kabel abziehen
  • PS-Taste drücken

Danach reicht es nach dem Start des Raspis den Controller per PS-Taste einzuschalten. Er verbindet sich automatisch.

Tastenzuordnung PS3 Controller in Recalbox

Voreingestellt sind diese Zuordnungen. Aber es lassen sich eigene Tasten-Mappings erstellen.

TasteZuordnungFunktion
BXAuswählen
AZurück
YFavoriten wechseln
XKodi starten
Start Menü
Select Optionen
R Nächste Seite
L Vorherige Seite

Spezialfunktionen mit PS3 Controller

Infos aus dem offiziellen Wiki: Die „Playstation“-Taste ist der Hotkey.

TasteFunktion
Hotkey + Y / ⬜Spielstand speichern
Hotkey + X / △Spielstand laden
Hotkey + A / ◯Spiel neustarten
Hotkey + B / XRetroarch Menü
Hotkey + L1Screenshot
Hotkey + StartSpiel beenden und zum Hauptmenü zurückkehren
Hotkey + ObenSave Slot -1 auswählen
Hotkey + UntenSave Slot +1 auswählen
Hotkey + RechtsSpiel beschleunigen
Hotkey + LinksZurückspulen (wenn in Optionen aktiviert)
Hotkey + R2Nächste Shader Vorlage
Hotkey + L2Vorherige Shader Vorlage

NES, SNES, SEGA, ...

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

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

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.

Getestete Spiele

SystemSpielStatusBemerkung
GBSuper Mario Land 3 - Wario Land
GBTetris
GBKirby's Dream Land
SNESWorms
SNESDr. Mario & Tetris
N64Mario Kart 64
N64Mario Party 3(✔)Musik stockt auf RPI2, rest flüssig. Spieler auf Spielfeld nicht sichtbar → bekannt
PS1Worms World Party(✔)Crash in bestimmten Menüs (Map-Editor/Tournament)
PS1Worms Armageddon
PS1GTAstartet erst garnicht. ROM defekt?
PS1GTA 2
PS1Testdrive 4
PS1Warcraft 2Anmerkung: Steuerung über Pad ist dusselig!
ScummVmToonstruckkurz angespielt
ScummVmMystStürzt nach wenigen Minuten ab!
ScummVmMyst Masterpiece
ScummVmThe Secret of Monkey Islandkurz angespielt
ScummVmIndiana Jones and the Fate of AtlantisCd wiederfinden (oder die Files …) Shortname: „ atlantis“

Legende: ✔ Ja, (✔) mit Einschränkungen, ✘ Nein, ∅ eines der nächsten „neuen“ Spiele

Tipps, Infos, Beobachtungen

Was sonst so aufgefallen ist beim Umgang mit recalbox:

  • Neues Release (18.03.16)
    • Neues Startvideo → Restored the original splash video + added a few new ones we hope you’ll enjoy ;) They are randomly selected at boot
    • Neues Design → new carousel model
  • Seit dem neuesten update (18.02.09) startet recalbox mit einem Christmas-Theme.
    • Ist beim nächsten update wieder raus.
    • Kann recht einfach ausgetauscht werden. (s.u.)
  • Wird der Raspi über die Spannungsversorgung eingeschaltet, startet er automatisch den Fernseher und stellt die Eingangsquelle entsprechend ein.
    • Steuerung passiert über CEC
  • KODI kann auch den TV abschalten. Ebenfalls über CEC
  • Neu hinzugefügte Spiele haben kein Cover
    • Der Versuch das manuell (über die Webseite) zu machen schlug fehl
    • Dafür ist der „Scraper“ da → Dieser durchsucht die Spiele und ergänzt diese um Cover, etc.
  • ROM Bezeichnungen unterliegen einem Namensschema
    • Manche ROMs haben ein [!] im Namen → Beudetet „Verified Good Dump: Getestete und empfohlene ROM“
  • Raspi 3
    • CPU ist im Idle schon wärmer als der Raspi 2 beim Spielen mit Kühlkörper
    • ROMs kopieren über WLAN ist langsam → ca. 1 MB/s statt 10 MB/s über Ethernet
  • Versionen-Schreibweise
    • früher™ gab es Versionen wie 4.0 und 4.1
    • Ab 4.1 wurde die Schreibweise 17.12.02 eingeführt
    • jetzt: JJ.MM.TT
  • Billig - willig'nicht
    • China-Bluetoothdongle machen Probleme
    • PS3 Klon-Controller können funktionieren, muss aber nicht. ggf. andere Treiber
    • billige Netzteile führen zu komischen Randeffekten
      • Dort sind meist keine richtigen Kupferkabel verbaut → billig und mist!
    • billige SD-Karten können Probleme machen

KODI

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.

Sichern / Kopieren

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.

Kühlung

:!: In Arbeit
Auf dem SoC („Prozessor“) des RPI3 klebt ein kleiner Kühlkörper, weil er gerade in Griffnähe lag…

Status:

  • 5 V Lüfter mit 3,3 Ohm Vorwiderstand
  • Zweipunkt-Regelung über Python-Script
  • Luftkanal 3D-gedruckt:
  • Beobachtungen:
    • Kein wahrnehmbarer Unterschied zwischen „ohne Kühlung“ und „mit passiven Kühlkörper“
    • Tempunterschied zwischen CPU-Sensor (Anzeige im Frontend) und Temp-Messgerät beträgt immer ca. 10 °C
    • Interessanterweise verursacht das Spielemenü die meiste Abwärme
      • wechselt man zurück ins Hauptmenü sinkt sofort die Temperatur
    • Maximale Temps lagen schon bei fast 78°C
      • Die Temperaturanzeige im Web-Frontend wird ab 75°C orange (warnung)

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)

Bekannte Probleme

Mauszeiger träge

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

DVI-Monitor zeigt kein Bild

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.

Boot-Video austauschen

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!)

Eigene Scripte

Temperatur-Logging

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.

temp_log.py
# 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()

Lüfterregelung

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_ctrl.py
# 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)

Lüfterregelung mit PWM

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_ctrl_pwm.py
# 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)
/hp/bi/ab/sf/www/wiki/data/pages/public/recalbox.txt · Zuletzt geändert: 15.05.2018 09:31 von se