====== Recalbox Retro-Gaming Plattform & Media Center ====== {{ :public:recalbox_logo.png?nolink&150|}}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:** * Offizielle Seite: [[https://www.recalbox.com|www.recalbox.com]] * Offizielles Wiki auf GitHUB: [[https://github.com/recalbox/recalbox-os/wiki/Home-%28EN%29|Wiki (EN)]] * Mini HowTo: [[https://github.com/recalbox/recalbox-os/wiki/Mini-How-To-%28EN%29|How To (EN)]] * Peripherie kompatibilität: [[https://github.com/recalbox/recalbox-os/wiki/Compatibility-%28EN%29|Compatibility List]] * PC/Rechner kompatibilität: [[https://github.com/recalbox/recalbox-os/wiki/PC-compatibility-%28EN%29|PC compatibility]] * Welcher Emulator auf welcher Plattform: [[https://github.com/recalbox/recalbox-os/wiki/Board-Compatibility-%28EN%29|Board Compatibility]] \\ ===== Teileliste ===== Die Links dienen nur als Beispiel. Preis-Stand: 15.2.18 ^ ^Preis^Link^Bemerkung^ |Raspberry Pi 3|32 €|[[https://www.amazon.de/dp/B01CD5VC92|Amazon]]| |SD Karte 32 GB SanDisk Ultra|14 €|[[https://www.amazon.de/dp/B073S8LQSL|Amazon]]| |Netzteil 2,5A|13 €|[[https://www.amazon.de/dp/B01DP8O5A4|Amazon]]| |CSL BT Adapter|8,99 €|[[https://www.amazon.de/dp/B01N0368AY|Amazon]]|Für Raspi < 3| |:?: Offizielles Raspberry Gehäuse|7,98 €|[[https://www.amazon.de/dp/B01CCPKCSK|Amazon]]|Belüftung?| |:?: NES Retro-Case / Lüftung mies|21,99 €|[[https://www.amazon.de/dp/B076BJBLZD|Amazon]]|Integrierter Lüfter wirkungslos!| |:?: NES LEGO Case| 15-20 €|[[https://moc.bricklink.com/pages/moc/mocitem.page?idmocitem=3075|BL-Shop]]|Preis inkl. Versand @ [[https://www.bricklink.com/v2/main.page|Bricklink]]| ===== Software-Liste ===== * **Recalbox** Image: [[https://archive.recalbox.com/|archive @ recalbox.com]]. * **Image Writer**: [[https://www.heise.de/download/product/win32-disk-imager-92033|Win32 Disk Imager @ Heise]] * (Optional) Fernwartung mit **PuTTy**: [[https://www.putty.org/|www.putty.org]] ===== 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 [[https://github.com/recalbox/recalbox-os/wiki/Manual-(DE)#keyboardmapping|Link zur Anleitung auf GitHub (DE)]] ^GamePAD^Tastatur^ |START|Enter| |Select|Space| |Back|S| |Enter|A| ===== 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. ^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| ==== Spezialfunktionen mit PS3 Controller ==== [[https://github.com/recalbox/recalbox-os/wiki/Manual-%28DE%29#duringgame-special|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| ===== 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: [[https://github.com/recalbox/recalbox-os/wiki/F%C3%BCge-ein-System-BIOS-hinzu-(DE)|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. [[http://scummvm.org/compatibility/|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 .scummvm im Verzeichnis des Spiels abzulegen. Bei Windows den Editor nutzen um die Datei anzulegen. Die leere Datei dann im Spieleverzeichnis under .scummvm abspeichern. Nicht als *.txt! Die Dateiendung muss "scummvm" heißen. Der "Shortname" muss dem entsprechenden Spiel aus [[http://scummvm.org/compatibility/|dieser Liste]] entnommen werden. {{ :public:toon_scummvm.png?nolink |}} \\ Im Anschluss immer die "Emulation Station" oder den Raspi neustarten. ===== Getestete Spiele ===== ^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 ===== 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 [[https://de.wikipedia.org/wiki/Consumer_Electronics_Control|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 [[https://github.com/recalbox/recalbox-os/wiki/Bezeichnungen-in-ROM-Namen-%28DE%29|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: * {{:public:rpi_fan.jpg|}} * {{:public:rpi_fan_assembled.jpg|}} * 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. {{:public:tempversuch1.png?nolink|}} **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@:/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) {{ :public:fanctrlhw.png?nolink |}} ===== Bekannte Probleme ===== ==== Mauszeiger träge ==== Standardmäßig läuft der Mauszeiger sehr träge beim Raspberry Pi. Um dies abzustellen wieder eine [[#Einrichten|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 ([[https://github.com/recalbox/recalbox-os/wiki/Connect-your-recalbox-to-a-DVI-screen-%28EN%29|Link]]):\\ Über [[#Einrichten|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 [[https://forum.recalbox.com/topic/12671/recalbox-18-02-09-is-out/27|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. # 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 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 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)