Raspberry Pi als Spotify-Client [UPDATE]

Update Juli 2013: Besser ist die “Pi MusicBox

Der Prozessor des Raspberry ist mit seinen 700 MHz nicht eben schnell – bisher habe ich den Desktop noch nicht ausprobiert, aber ich habe mir sagen lassen, dass schon Surfen keinen Spaß macht. Habe ich aber auch nicht vor 🙂 Denn der Prozessor ist zum Beispiel explizit in der Lage, HD-Videos zu rendern – wohlgemerkt lüfterlos. Das prädestiniert ihn als Media Center. Gut, HD-Videos kann mein Bluray-Player auch, aber ich will mal ausprobieren, wie sich der Raspberry als Spotify-Client schlägt. Das kann mein Bluray-Player (oder irgendwas anderes in meinem Heimkino) nämlich nicht.

Also, ich habe Raspbian “wheezy” installiert, und setze funktionierendes LAN voraus:

Es gibt eine Anleitung von Hexxeh, die funktioniert aber nicht. Zuerst kann ich die angegebenen Pakete nicht installieren – irgendwo ist …/libmpg123-0_1.14.2+svn20120622-1_armhf.deb eingetragen, online ist aber (Stand 5.10.12) nur libmpg123-0_1.14.4-1_armhf.deb 🙁 Für die Akten: Man lade libmpg123-dev_1.14.4-1_armhf.deb und libmpg123-0_1.14.4-1_armhf.deb runter, schiebe sie per FTP-Programm (SFTP-Verbindung wählen; User “pi”/Passwort “raspberry”) auf das Gerät nach “/home/pi/”, und installiere sie manuell:

Aber das genügt nicht; ich einen bekomme fehlende vcos_platform_types.h und vcos_platform.h und ilclient.h. Nach gut zwei Stunden (denn man beachte den Lösungsansatz für das erste Problem: zweistellig viele Files editieren; sowie die Unübersichtlichkeit des zweiten Links) gebe ich auf, und versuche einen anderen Weg – der geht zum Glück ziemlich straight forward:

Zuerst installiere ich Subversion (Quelle):

Dann ziehe ich mir die despotify-Sourcen (Quelle) plus einiger Libs (Quelle: README-Datei) direkt, und compiliere sie:

Im Wesentlichen war es das! Man sollte sich nun mittels

einloggen können.

Achtung #1: Die userid ist nicht der Username! Sondern die Nummer, die man unter anderem hier findet (man sieht sie auch, wenn man eine Support-Anfrage stellt) – Danke, @moritzmoro. Achtung #2: Laut FAQ von despotify geht das nur mit Premium-Accounts! Sowas habe ich nicht (mehr), deshalb breche ich hier bis auf Weiteres ab. In den kommenden Tagen werde ich zwei Dinge updaten: Ich werde mein Raspberry frisch aufsetzen, und die obige Anleitung prüfen – ich habe doch so einiges installiert heute, und möchte vermeiden, dass etwas davon wichtig war, aber hier vergessen wurde. Zweitens werde ich (hoffentlich) meinen Spotify-Account, der momentan mit meinem Facebook-Konto verbunden ist, in einen “richtigen” umwandeln können, und diesen auf Premium upgraden.

UPDATE: Richtig, mit einem Premium-Accoount kann man sich einloggen. Der Login dauert recht lange, aber es geht:

Anmerkungen:

  • Während ich als Nicht-Premium-User tatsächlich die User-ID benutzen musste, um wenigstens brauchbare Fehlermeldungen zu bekommen, kann ich als Premium-User ganz normal meinen Usernamen verwenden
  • Wenn das Passwort Sonderzeichen enthält, können diese mit Backslash (“”) escaped werden
  • Das ganze rockt! Das Raspberry hat überhaupt keine Probleme mit dem Decoding von 320kb
  • Man kann nur sehr unkomfortabel nach etwas anderem als Tracks suchen
  • Mein erster Song war standesgemäß “Tom’s Diner” von Suzanne Vega, dem ersten MP3 🙂
  • Sound geht über HDMI raus, Steuerung läuft nach wie vor über SSH – mit dem passenden Client geht das dann auch vom Handy (für’s Windows Phone nutze ich gerade The SSH Client Pro)
  • Als nächstes brauche ich trotzdem ein Webinterface oder so, für meine Freundin.
  • Außerdem steht ein Langzeit-Test an, mal sehen, wie warm das Raspberry wird
  • Das Raspberry spielt weiter, wenn man bsplw das Notebook mit dem SSH-Terminal in den Ruhezustand fährt. Kehrt man “zurück”, dauert es eine Weile, bis wieder der aktuelle Status angezeigt wird – aber er kommt!
  • UPDATE: Inzwischen gibt es eine Version vom Raspberry mit 512MB RAM – ich habe die mit 256, und es läuft prime. Wie oben erwähnt, habe ich den Desktop aber auch nie gestartet, und für eine Konsolenanwendung genügen 256 dicke
  • UPDATE Februar 2013: Offenbar gab es eine Protokolländerung, die den von Prime beschriebenen “segmentation fault” hervorruft 🙁

Raspberry Pi: Probleme mit USB-Tastatur und LAN

Wer seinen Raspberry grundsätzlich eingerichtet hat, will vermutlich bald in’s Internet. Bei mir stellte sich gerade das Problem, dass meine Tastatur nicht mehr geht, wenn ich LAN einstöpsel… keine Ahnung, woran das liegt, irgendwelche Vorschläge? Vielleicht zieht sie zu viel Strom oder so.

Aber wie dem auch sei: LAN-Kabel wieder ab. Über “sudo raspi-config” öffne ich den Config-Screen und aktivere den SSH-Server. LAN-Kabel wieder dran, Tastatur ab. Über die Heimnetzwerk-Übersicht meines Alice-Routers (ok, über Umwege geht es auch über’s Terminal) finde ich heraus, dass das Rasperry (Netzwerkname “raspberrypi”) die IP 192.168.1.53 hat. Von meinem Macbook aus rufe ich im Terminal “ssh pi@192.168.1.53” auf (und bestätige beim ersten mal den Fingerprint), und gebe das von mir nicht geänderte Passwort “raspberry” ein. Schon bin ich auf dem System, und kann von hier aus so weitermachen, wie ich es eigentlich über die USB-Tastatur machen wollte.

Stellt sich raus: Das muss ich erst mal gar nicht 🙂 Ein “ping www.google.de” funktioniert direkt. DHCP muss im Router natürlich aktiviert sein, sonst wäre hier manuelle Konfigurationsarbeit nötig. Trotzdem ist es nett zu wissen, dass man so einfach per SSH draufkommt, denn schliesslich will man ja irgendwas machen können im LAN, und ohne Tastatur wird das knifflig. Außerdem muss mein Fernseher nicht mehr eingeschaltet sein, und ich kann auf dem Sofa sitzen^^

Raspberry Pi einrichten

Vor inzwischen auch schon wieder einigen Monaten habe ich mir einen Raspberry Pi bestellt (Danke, Tobi!) – jetzt bin ich dazu gekommen, ihn auch mal anzuschließen 🙂 Für’s grundsätzliche Setup sind einige Dinge zu wissen:

Das Board kommt (bzw. kam in meinem Fall) ohne irgendeinen Zubehör. Man benötigt aber mindestens:

  • Eine SD-Karte. Es funktioniert wohl nicht jede, also Obacht. Laut Quick start guide tut es eine Class 4 Karte mit mindestens 4 GB. In meinem Fall funktionierte eine 8GB SanDisk Extreme (Class 10).
  • Stromversorgung über Micro USB (nicht zu verwechseln mit Mini-USB!), und wir reden bei “Stromversorgung” von “mindestens” 700 mA! Der Quick start guide sagt “Do not attempt to power your Raspberry Pi by plugging it into a computer”, und das würde ich unterschreiben, falls ihr euern Computer (bzw. dessen USB-Anschluss) nicht grillen wollt. Ich benutze ein USB-Netzteil vom Kindle meiner Freundin zusammen mit einem Ladekabel meines Handys.
  • eine USB-Tastatur, bei mir eine vom Mac.
  • Einen Monitor/TV/… mit HDMI-Eingang! Bei mir ein Panasonic TX-P42GW30.
  • ggf. eine USB-Maus.
  • ggf. eine LAN-Verbindung.
  • ggf. ein Gehäuse. Ich habe vorerst keines, aber wenn das alles wie gewünscht funktioniert, hole ich mir eins.

Zuerst muss das Betriebssystem auf die SD-Karte installiert werden; im Folgenden die Anleitung für OS X (Sorry, Thore). Dazu gibt es auf der offiziellen Seite verschiedene Downloads; für’s erste habe ich das empfohlene Raspbian “wheezy” image in der Version vom 18.9.2012 verwendet. SD Karte eingesteckt, und im Terminal mittels

den mount point (“Einhängepunkt“) herausgefunden, der bei mir “/dev/disk2” ist. Nun muss man das Image auf diesen mount point schreiben – ich empfehle, hier Vorsicht walten zu lassen, und das Image nicht aus Versehen auf die Systempartition zu schreiben 🙂 Folgendes Kommande

sollte es tun (Quelle). Anmerkung: Eine “Resource busy”-Meldung umgeht man, indem man im “Festplatten-Dienstprogramm” die Partition auf der SD-Karte deaktiviert (Quelle). Nicht “auswerfen”, sonst bekommt man ein “Operation not supported”. Die Karte darf von OS X nicht verwendet werden, muss aber weiterhin unter “diskutil list” aufgeführt werden! Das Schreiben des Images wird eine Weile dauern, bei mir eine gute viertel Stunde.

Dann wird das gute Stück mit Tastatur (und Maus) bestückt, und an’s TV angeschlossen, schlussendlich kommt Strom. Das sollte es im Wesentlichen tun, um den Config-Screen zu sehen zu bekommen:

Dort gibt’s Folgendes zu tun (Quelle):

  • info: blabla 🙂
  • expand_rootfs: Per default werden nur 4 GB verwendet; dieses Tool vergrößert die Partition beim nächsten Reboot auf die volle verfügbare Größe, was durchaus einige Minuten dauern kann! [Anmerkung 1, 5]
  • overscan: Soll schwarze Balken auf dem Bildschirm vermeiden – führt bei einem Flachbild-Fernseher aber nur dazu, dass man die Bash (eigentlich am unteren Bildschirmrand) nicht mehr lesen kann^^ Ich musste das Seitenverhältnis des Fernsehers ändern, um die Bash sehen zu können. Beim nächsten Reboot ggf. einfach wieder disablen [Anmerkung 1, 4]
  • configure_keyboard: Achtung, das Erzeugen der Liste dauert ein paar Sekunden! Dann kann man Tastatur (“Apple Aluminium Keyboard (ANSI)”), plus -Layout (“Other”->”German”->”German”->”Right Alt”->”No compose key”->”No”) auswählen. Das Speichern dauert wieder einige Sekunden [Anmerkung 1, 2, 4]
  • change_pass: Wer das Passwort ändert will [default siehe Anmerkung 6]
  • change_locale: Voreingestellt ist “en_GB.UTF-8 UTF-8”. UTF-8 ist schon OK, aber spaßeshalber habe ich trotzdem mal “de_DE.UTF-8 UTF-8” gesetzt. Achtung, das Erzeugen der Liste und das Speichern dauern ein paar Sekunden!
  • change_timezone: “Europe”->”Berlin”
  • memory_split: Ändert das Verhältnis der Speicherzuweisung zwischen Hauptprozessor und Grafik. Bis auf Weiteres will ich keinen Desktop starten, deshalb wähle ich 240/16.
  • overclock: Will ich bis auf Weiteres nicht
  • ssh: (De-)Aktiviert SSH-Zugriff über’s Netzwerk. Klingt interessant, bis auf Weiteres aber deaktiviert
  • boot_behaviour: Desktop automatisch starten?
  • update: Erlaubt ein Update via Netzwerk.

Anmerkungen:

  1. “Finish” erreicht man über Pfeil links/rechts; danach wird man gefragt, ob man rebooten will.
  2. Mit ESC kann man den Config-Screen verlassen, und die bash öffnen – Achtung, dann wurde nicht gespeichert! Aber in der bash kann man das neue Tastaturlayout ausprobieren 🙂
  3. bash: Mit “sudo shutdown -r now” rebooted man, mit “sudo shutdown -h now” fährt man das System runter (Quelle). Auf der Default-Tastaturbelegung ist “-” auf dem deutschen “ß” 🙂
  4. bash: “sudo raspi-config” öffnet den config-screen erneut. Achtung: Man sollte später möglichst keine Einstellungen mehr ändern!
  5. bash: “df -h” zeigt die Partitionsgrößen an (Quelle)
  6. Default-Login ist “pi”/”raspberry”
  7. Der HDMI-Ausgang zeigt nur Bild, wenn das Kabel schon beim Booten angeschlossen war

Und last but not least: Neue Software kann man per apt-get installieren – wenn man LAN hat^^

Arduino mit Eclipse, zweiter Versuch

Nachdem der erste Versuch ziemlich zäh lief, hat mich Michael freundlicherweise auf ein neues Plugin hingewiesen. Und das funktioniert tatsächlich ziemlich gut (allerdings sind einige Kleinigkeiten zu beachten, wenn ihr auf dem Mac arbeitet):

  1. Man benötigt Eclipse in der C/C++-Version und die Arduino IDE (ich habe die 1.0 verwendet).
  2. Das Plugin gibt es unter “http://www.baeyens.it/eclipse/update site”. Wichtig: Das Leerzeichen darf nicht durch %20 ersetzt werden (macht Eclipse evt. automatisch)! Etwas unglücklich.
  3. In den Plugin-Einstellungen soll man den Pfad zur Arduino-IDE angeben. Auf dem Mac ist Folgendes einzutragen (Quelle): /Applications/Arduino.app/Contents/Resources/Java
  4. Der AVRDude-Pfad (siehe): /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf
  5. Unter Arduino/Paths sind folgende Pfade einstellen, siehe Screenshot und arduino.cc. (genaues Hinschauen lohnt sich – mich hat das doppelte “avr” der “AVR Header Files” 5 Minuten Fluchen gekostet^^)
  6. Beim Anlegen eines neuen Projektes muss man die Board-Version (zB “Uno”) auswählen und den Port angeben. Der Port ist das, was in der Arduino IDE unter Tools -> Serial Port ausgewählt wird – bei mir “/dev/tty.usbmodemfa131”
  7. Für diejenigen unter euch, die (wie ich) nicht vertraut mit der C++-Version sind: Kompiliert wird mit dem “Hammer” (dauert bei mir recht lange); auf’s Board geschoben wird das Ganze mit dem “AVR”-Button.

Wermutstropfen bisher:

  1. Den Eclipse-Debugger kann man auch hier nicht benutzen. Aber schon die Shortcuts, Templates usw sind der Hit!
  2. Importe sind manuell hinzuzufügen. So braucht man für ein simples “Serial.begin(9600);” schon ein “extern HardwareSerial Serial;” usw. 🙁

Danke an Michael für den Tipp, garretto für das tolle Tutorial (nachdem ich es entdeckt habe, war dieser Eintrag quasi überflüssig), und Jantje für das Plugin!

Gestensteuerung ist 2011

Arduino liest Deine Gedanken, und schickt sie an Siri:

und dann geht das ganze per Native Extension über’s Arduino an AIR. Nimm das, HTML5.

Projekthomepage; vor kurzem haben sie einen Investor gefunden^^ via

OK, evt. muss man noch eine App dazwischenschalten, für die Kommunikation von Siri zum Arduino:

via

Arduino mit Eclipse als IDE

Das ist leider einfacher gesagt als getan, siehe unten 🙁 Eclipse muss man natürlich nur einmal einrichten. Da das deutlich umfangreichere aber das Einrichten des Projektes ist, würde ich empfehlen, ein einmal lauffähig eingerichtetes Projekt als Template zu nutzen.

Anmerkung #1: Was momentan noch nicht funktioniert, ist die Ausgabe nach Serial 🙁 Ich habe bisher nur ein sehr rudiemntäres “Blink”-Projekt kompilieren können… offenbar fehlen da irgendwelche Includes, wobei die HardwareSerial eigentlich da ist. Ich bleibe dran.

Anmerkung #2: Im Folgenden werden OS X Lion und ein Uno verwendet

Einrichten von Eclipse:

  1. Eclipse IDE for C/C++ Developers installieren
  2. Das AVR-Plugin installieren
  3. Das AVR “Crosspack” installieren
  4. Sicherheitshalber die Pfade unter Preferences -> AVR -> Paths checken:
    AVR-GCC: /usr/local/CrossPack-AVR20100115/bin
    GNU make: /usr/local/CrossPack-AVR20100115/bin
    AVR Header Files: /usr/local/CrossPack-AVR20100115/avr-3/include
    AVRDude: AVR-GCC: /usr/local/CrossPack-AVR20100115/bin
  5. Dein(e) Arduino(s) unter Preferences -> AVR -> AVRDude einrichten. Anmerkung: Der default Port ist der, den man auch in der Arduino-IDE nutzt – und den man unter /dev/ findet (ls -la /dev/)
    Configuration Name: <irgendwas>
    Programmer Hardware: Arduino
    Override default port: /dev/tty.usbmodemfa131
    Override default baudrate: 115200

Einrichten eines ersten Projekts (dieses kann man hinterher kopieren, um diese Einstellungen nicht immer wieder vornehmen zu müssen):

  1. Neues “C” Projekt anlegen:
    Project name: <irgendwas>
    Project type: AVR Cross Target Application -> Empty
    Finish
  2. In den Project properties -> AVR -> AVR Dude -> Programmer -> “Programmer configuration” die Konfiguration von oben, Punkt 5, auswählen
  3. Das Arduino anschliessen
  4. In den Project properties -> AVR ->AVR Dude -> “Target Hardware” entweder “Load from MCU” versuchen, oder für den Uno “ATmega328P” auswählen. Anmerkung: Auch, wenn arduino.cc als Microcontroller für den Uno den ATmega328 angibt, so ist es in Wirklichkeit doch der ATmega328P
  5. Die Arduino IDE öffnen, ein neues Projekt anlegen, und kompilieren (“Verify” genügt) (es geht darum, einmal die Core Library anzulegen)
  6. “Irgendwo” unter /private/var/ die Datei core.a finden – bei mir war es /private/var/folders/8f/0zf3pf294rvbrybmwh7mq1bm0000gn/T/build1871947640038466426.tmp/core.a 🙂 – und in den Projektordner kopieren
  7. Diese “neue” core.a in libcore.a umbenennen
  8. Unter den Project properties -> C/C++ Build -> Settings -> Tool Settings -> “Additional Tools in Toolchain”: “Generate HEX for Flash Memory”, “Print Size” und “AVRDude” müssen angewählt sein; “Generate HEX file for EEPROM” und “Generate Extended Listing” müssen abgewählt sein
  9. Unter … -> AVR Compiler -> Command von “avr-gcc” in “avr-g++” ändern
  10. Unter … -> AVR Compiler -> Directories den Pfad /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino (oder analog) eintragen. Anmerkung: Rechtsklick auf die Arduino-App -> Paketinhalt anzeigen hilft 😉
  11. Unter … -> AVR Compiler -> Debugging -> “Generate Debugging info” “No debugging info” auswählen
  12. Unter … -> AVR Compiler -> Optimization -> “Optimization Level” “Size Optimization (-Os)” auswählen
  13. Unter … -> AVR Assembler -> Debugging -> “Generate Debugging Info” “No debugging info” auswählen
  14. Unter … -> AVR C Linker -> Libraries eine neue Library mit dem Namen “core” anlegen. Einen neuen Library Path mit “${workspace_loc:/${ProjName}}” anlegen – damit sollte er jetzt im aktuellen Projekt nach der corelib aus Schritt 6 und 7 suchen
  15. Eine neue Datei mit Namen main.c anlegen
  16. coden 😉

Kompilieren und flashen tut man das Projekt dann mit dem “Hammer”-Button in der Menüleiste – es muss dabei im Dropdown “Release” ausgewählt sein.

Mit Hilfe von, und, und, und.