Dienstag, 16. Mai 2017

Raspberry Pi 3 commandline Verbindung zu Bluetooth Lautsprecher

Zielstellung

Einrichten des Raspberry Pi via commandline, um dieses mit einem Bluetooth Lautsprecher zu verbinden und Musik abzuspielen. Dazu werden folgende Schritte beschrieben.

  1. Bluetooth Konfiguration
  2. Audio Konfiguration
  3. Audioausgabe

Materialliste

  • Raspberry Pi 3
  • uSD Karte
  • Netzteil
  • raspbian light image (2017-04-10-raspbian-jessie-lite.zip)
  • Bluetooth Lautsprecher z.B. xq B20
  • PC/Notebook mit Linux Mint
  • Internet - Zugang
  • WiFi mit aktiven DHCP

Bluetooth Konfiguration

Im aktuellen Raspbian 2017-04-10-raspbian-jessie-lite.zip sind bereits die notwendigen Tools enthalten und der Bluetooth Service wird beim Start auch automatisch geladen. Zur Kontrolle kann man sich wie folgt die Version der Bluetooth Tools anzeigen lassen:

pi@raspberrypi:~ $ dpkg -l bluez
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
         Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name                    Version          Architektur      Beschreibung
+++-=======================-================-================-====================================================
ii  bluez                   5.23-2+rpi2      armhf            Bluetooth tools and daemons

Die Verbindung zum Bluetooth Lautsprecher lässt sich z.B. über das interaktive Tool bluetoohctl herstellen. Nach dem das Tool gestartet wurde, wechselt es in einen Eingabemodus. In diesem können dann diverse Kommandos (z.B. scan, pair, trust, connect, etc.) abgesetzt werden.

Am folgenden Beispiel zeige ich, wie ich das Raspberry Pi mit dem Lautsprecher verbunden habe. Dazu werden folgende Kommandos abgesetzt:

  1. Nach Bluethooth Geräten suchen mit scan on
  2. Beenden des Suchvorgangs mit scan off
  3. Pairen mit BT Lautsprecher mit pair MAC
  4. Dem BT Lautsprecher vertrauen mit trust MAC
  5. Verbindung mit BT Lautsprecher herstellen mit connect MAC
  6. BT Gerät Information anzeigen mit info MAC
  7. bluetoohctl verlassen mit exit

Anschließend ist der Lautsprecher mit dem System verbunden und kann verwendet werden. Mal abgesehen vom connect Kommando müssen die Kommandos nur einmalig abgesetzt werden.

pi@raspberrypi:~ $ bluetoothctl
[NEW] Controller B8:27:EB:6C:2A:67 raspberrypi [default]
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:6C:2A:67 Discovering: yes
[NEW] Device C9:F8:A7:A1:90:D0 C9-F8-A7-A1-90-D0
[NEW] Device BC:85:56:CC:3A:7F BRAVIA
[NEW] Device 10:B7:F6:18:B6:39 xqB20
[bluetooth]# scan off
[CHG] Device 10:B7:F6:18:B6:39 RSSI is nil
[CHG] Device BC:85:56:CC:3A:7F RSSI is nil
[CHG] Device C9:F8:A7:A1:90:D0 RSSI is nil
Discovery stopped
[CHG] Controller B8:27:EB:6C:2A:67 Discovering: no
[bluetooth]# pair 10:B7:F6:18:B6:39
Attempting to pair with 10:B7:F6:18:B6:39
[CHG] Device 10:B7:F6:18:B6:39 Connected: yes
[CHG] Device 10:B7:F6:18:B6:39 UUIDs:
    0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 10:B7:F6:18:B6:39 Paired: yes
Pairing successful
[CHG] Device 10:B7:F6:18:B6:39 Connected: no
[bluetooth]# trust 10:B7:F6:18:B6:39
[CHG] Device 10:B7:F6:18:B6:39 Trusted: yes
Changing 10:B7:F6:18:B6:39 trust succeeded
[bluetooth]# connect 10:B7:F6:18:B6:39
Attempting to connect to 10:B7:F6:18:B6:39
[CHG] Device 10:B7:F6:18:B6:39 Connected: yes
Connection successful
[bluetooth]# info 10:B7:F6:18:B6:39
Device 10:B7:F6:18:B6:39
    Name: xqB20
    Alias: xqB20
    Class: 0x240414
    Icon: audio-card
    Paired: yes
    Trusted: yes
    Blocked: no
    Connected: yes
    LegacyPairing: no
    UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
[bluetooth]# exit
pi@raspberrypi:~ $ bluetoothctl
[NEW] Controller B8:27:EB:6C:2A:67 raspberrypi [default]

[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:6C:2A:67 Discovering: yes
[NEW] Device 10:B7:F6:18:B6:39 xqB20

[bluetooth]# scan off
[CHG] Device 10:B7:F6:18:B6:39 RSSI is nil
Discovery stopped
[CHG] Controller B8:27:EB:6C:2A:67 Discovering: no

[bluetooth]# pair 10:B7:F6:18:B6:39
Attempting to pair with 10:B7:F6:18:B6:39
[CHG] Device 10:B7:F6:18:B6:39 Connected: yes
[CHG] Device 10:B7:F6:18:B6:39 UUIDs:
    0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 10:B7:F6:18:B6:39 Paired: yes
Pairing successful
[CHG] Device 10:B7:F6:18:B6:39 Connected: no

[bluetooth]# trust 10:B7:F6:18:B6:39
[CHG] Device 10:B7:F6:18:B6:39 Trusted: yes
Changing 10:B7:F6:18:B6:39 trust succeeded

[bluetooth]# connect 10:B7:F6:18:B6:39
Attempting to connect to 10:B7:F6:18:B6:39
[CHG] Device 10:B7:F6:18:B6:39 Connected: yes
Connection successful

[bluetooth]# info 10:B7:F6:18:B6:39
Device 10:B7:F6:18:B6:39
    Name: xqB20
    Alias: xqB20
    Class: 0x240414
    Icon: audio-card
    Paired: yes
    Trusted: yes
    Blocked: no
    Connected: yes
    LegacyPairing: no
    UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)

[bluetooth]# exit

Audio Konfiguration

Für die Audioausgabe verwende ich pulseaudio und das zugehörige Bluetooth Modul. Beides ist in dem von mir verwenden Raspbian light nicht enthalten und muss wie folgt nach installiert werden.

pi@raspberrypi:~ $ sudo apt-get install pulseaudio-module-bluetooth

Anschließend lassen sich mit dem Tool pactl weitere Einstellungen vornehmen:

Auflisten der Audiosenken:

pi@raspberrypi:~ $ pactl list sinks short
0   alsa_output.platform-soc_audio.analog-stereo    module-alsa-card.c  s16le 2ch 48000Hz   SUSPENDED
1   bluez_sink.10_B7_F6_18_B6_39    module-bluez5-device.c  s16le 2ch 44100Hz   SUSPENDED

Den Bluetooth Speaker als default Audiosenke einstellen.

pi@raspberrypi:~ $ pactl set-default-sink 1

Einstellen der Audiolautstärke.

pi@raspberrypi:~ $ pactl set-sink-volume 1 20%

Audioausgabe

Mit dem Tool wget zuerst eine Beispiel Datei von der Seite The Hitchhiker's Guide to the Galaxy herrunterladen. Diese kann danach mit paplay abgespielt werden. Wenn alles klappt, sollte die Tonausgabe via Bluetooth Lautsprecher erfolgen.

pi@raspberrypi:~ $ wget http://youness.net/wp-content/uploads/2016/08/h2g2.ogg
pi@raspberrypi:~ $ paplay h2g2.ogg

Neustart

Die mit bluetoohctl hergestellte Verbindung ist nicht persistent, d.h. diese wird beim Neustart nicht automatisch wieder hergestellt. Um bei einem Neustart z.b. per Skript eine Verbindung zu einem bekannten Bluetooth Lautsprecher aufzubauen, kann folgendes Kommando verwendet werden.

pi@raspberrypi:~ $ echo -e "connect 10:B7:F6:18:B6:39\nquit" | bluetoothctl
[NEW] Controller B8:27:EB:6C:2A:67 raspberrypi [default]
[NEW] Device 10:B7:F6:18:B6:39 xqB20
[bluetooth]# connect 10:B7:F6:18:B6:39
Attempting to connect to 10:B7:F6:18:B6:39
[bluetooth]# quit
[DEL] Controller B8:27:EB:6C:2A:67 raspberrypi [default]

Referenz

Diese Vorgehensweise basiert auf der Anleitung von der Seite: https://kofler.info

Sonntag, 30. April 2017

raspbian headless setup

Zielstellung

Einrichten des Raspberry Pi, um dieses headless, d.h. ohne Monitor und Tastatur, zu betreiben. Dazu werden folgende Schritte beschrieben.

  1. Download des Images
  2. Flashen der SD Karte
  3. SSH Zugang Aktivieren
  4. WIFI Konfiguration

Materialliste

  • Raspberry Pi 3
  • uSD Karte
  • Netzteil
  • raspbian light image (2017-04-10-raspbian-jessie-lite.zip)
  • PC/Notebook mit Linux Mint
  • Internet - Zugang
  • WiFi mit aktiven DHCP

Download und Flashen der SD Karte

Zu Beginn muss das Raspbian Image von der offiziellen Seite heruntergeladen werden. Dazu bitte folgenden Link verwenden https://www.raspberrypi.org/downloads/raspbian/

Da ich auf die Desktop Version verzichten kann, verwende ich nur die Light Version. Diese liegt als Zip Archiv vor und muss zunächst entpackt werden.

unzip 2017-04-10-raspbian-jessie-lite.zip

Anschließend muss das entpackte Image noch auf die uSD Karte kopiert werden. Hierbei bitte beachten, dass das korrekte SD Karten Device gewählt wird.

sudo dd if=2017-04-10-raspbian-jessie-lite.img of=/dev/sdX status=progress

Eine detailiertere Beschreibung findet sich auch auf der offiziellen Homepage.

Nachdem das Image nun auf der uSD Karte vorliegt, kann mit der Konfiguration begonnen werden.

Konfiguration

Wenn die SD Karte unter Linux gebootet wird, werden zwei Partitionen angezeigt:

  1. Partition (boot): Enthält die für den Bootvorgang notwendigen Programme und Konfigurationsdateien
  2. Partition: Enthält das vollständige Dateisystem

Ich beschränke mich an dieser Stelle auf die notwendigen Schritte um das Raspberry Pi headless zu betreiben. Unter welchem Verzeichnis die SD Karten gemounted wurden, kann man sich mit df -h anzeigen lassen.

SSH Aktivieren

Aus Security Gründen ist der SSH Zugang per default deaktiviert und muss zunächst aktiviert werden. Dazu muss auf der Boot Partition der SD Karte eine Datei mit dem Namen ssh angelegt werden.

touch /media/username/boot/ssh

WiFI Einrichten

Als nächsten Schritt muss noch die Datei wpa_supplicant.conf ebenfalls auf der Boot Partition angelegt werden. Diese enthält die Konfiguration, um das WiFi zu aktivieren.

touch /media/username/boot/wpa_supplicant.conf

Diese Datei kann mit einem beliebigen Text - Editor bearbeitet werden und muss mindestens folgenden Inhalt haben:

network={
    ssid="SSID des WLANs"
    psk="password des WLANs"
}

Erster Boot Vorgang

Nachdem die Konfiguration abgeschlossen wurde, kann die SD Karte vom PC/Notebook getrennt werden und in das Raspberry Pi eingesteckt werden. Nach anschließen der Stromversorgung sollte dieses starten und man kann nach kurzer Zeit per SSH auf das Raspberry Pi zugreifen. Standardmäßig erhält das Raspberry Pi seine IP Adresse via DHCP. Um sich per SSH anzumelden kann diese z.B. aus der Netzwerkübersicht im Router ausgelesen werden. Alternativ ist das Raspberry Pi auch über seinen hostnamen erreichbar.

ping raspberrypi.local
# wenn das funktioniert hat
ssh pi@raspberrypi.local

Ab hier kann die "normale" Konfiguration z.b. mittels raspi-config vorgenommen werden.

Dienstag, 17. Januar 2017

Update MagPiDownloader

In einem früheren Eintrag habe ich mein Skript zum herunterladen des MagPi Magazin vorgestellt. Für dieses habe ich jetzt ein kleines Update hinsichtlich der verfügbaren Sprachen erstellt.

Per default werden jetzt alle Sprachen außer Englisch nicht heruntergeladen. Dies betrifft derzeit einige Dokumente in folgenden Sprachen ["French", "Hebrew", "Italian", "Spanish"].

Ein manuelles Herunterladen ist aber durch ein Argument beim Skript Aufruf möglich.

Beispiel:

$ ./getMagpi.py French

Quelle

Das Skript befindet sich auf github unter folgendem Repository https://github.com/f0xd3v1lsw1ld/MagPiDownloader.git