Heute mal ein Thema, was offensichtlich nicht so einfach ist. Aber, Versuch macht klug ;)

Der BananaPi M2-Ultra besitzt als WLan-Chip einen AP6212, dieser beinhaltet ein WLan- und ein Bluetooth-Modul. Mein Testsystem ist ein

Linux bpi-iot-ros-ai 3.10.65-BPI-M2U-Kernel #1 SMP Sun Sep 25 21:08:46 CST 2016 armv7l GNU/Linux

Meine ersten Versuche waren nicht sehr erfolgreich, also auf die Suche machen und ich wurde in einem Forum fündig.

 

https://forum.armbian.com/index.php/topic/1321-banana-pi-m2plus-inboard-wifi-solved/

Der BananaPi M2+ hat den selben Baustein verbaut, dann kann man das ja mal probieren.

Als erstes mal ein paar Softwarepakete installieren.

apt-get install bluez libopenobex1 bluetooth bluez-tools

Danach den Treiber installieren wie im Forum beschrieben. Dabei beachten, als Device ging bei mir nur ttyS3. Also bitte bei den entsprechenden Befehlen ersetzen.

systemctl stop bluetooth.service
mv /lib/firmware/ap6212/bcm43438a0.hcd /etc/firmware/ap6212/4343A0.hcd
echo "0" > /sys/class/rfkill/rfkill0/state
echo "1" > /sys/class/rfkill/rfkill0/state
echo " " > /dev/ttyS3

Danach folgendes:

hciattach /dev/ttyS3 bcm43xx 1500000

Ausgabe:

bcm43xx_init
Flash firmware /etc/firmware/ap6212/4343A0.hcd
Set Controller UART speed to 1500000 bit/s
Device setup complete

Lebt das Device?

root@bpi-iot-ros-ai:/dev# hciconfig -a
hci0: Type: BR/EDR Bus: UART
BD Address: 43:43:A0:12:1F:AC ACL MTU: 1021:8 SCO MTU: 64:1
DOWN
RX bytes:591 acl:0 sco:0 events:28 errors:0
TX bytes:416 acl:0 sco:0 commands:28 errors:0
Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH SNIFF
Link mode: SLAVE ACCEPT

Bluetooth wieder starten.

sudo service bluetooth restart

Device starten:

root@bpi-iot-ros-ai:/dev# hciconfig hci0 up
Can't init device hci0: Operation not possible due to RF-kill (132)

Uups, was ist das? RFKill ist ein Subsystem um "Funkgeräte" an- und abzuschalten. Unser Bluetooth Device wird also geblockt, ist also ausgeschaltet. Das kann man mittels

rfkill unblock 3

aufheben. Der ganze Vorgang:

root@bpi-iot-ros-ai:/dev# rfkill list
0: sunxi-bt: Bluetooth
Soft blocked: no
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
2: brcmfmac-wifi: Wireless LAN
Soft blocked: no
Hard blocked: no
3: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no

root@bpi-iot-ros-ai:/dev# rfkill unblock 3
root@bpi-iot-ros-ai:/dev# rfkill list
0: sunxi-bt: Bluetooth
Soft blocked: no
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
2: brcmfmac-wifi: Wireless LAN
Soft blocked: no
Hard blocked: no
3: hci0: Bluetooth
Soft blocked: no
Hard blocked: no

Danach startet ein

root@bpi-iot-ros-ai:/dev# hciconfig hci0 up

das Device.

Damit wäre nun das Bluetooth Device einsatzbereit, eine sehr aufwändige Sache. Erinnert mich an meine ersten Gehversuche mit WLan :)

Nun versuchen wir mal eine Verbindung zu meinem Smartphone aufzubauen.

root@bpi-iot-ros-ai:~# bluetoothctl -a
[NEW] Controller 43:43:A0:12:1F:AC bpi-iot-ros-ai [default]
Agent registered

Mit help bekommt man eine Liste aller Befehle angezeigt.

[bluetooth]# help
Available commands:
list List available controllers
show [ctrl] Controller information
select Select default controller
devices List available devices
paired-devices List paired devices
power Set controller power
pairable Set controller pairable mode
discoverable Set controller discoverable mode
agent Enable/disable agent with given capability
default-agent Set agent as the default one
scan Scan for devices
info Device information
pair Pair with device
trust Trust device
untrust Untrust device
block Block device
unblock Unblock device
remove Remove device
connect Connect device
disconnect Disconnect device
version Display version
quit Quit program

Was uns jetzt erstmal interessiert ist, wo ist das Gerät?

scan on

Danach kommt dann folgendes:

[bluetooth]# scan on
Discovery started
[CHG] Controller 43:43:A0:12:1F:AC Discovering: yes
[NEW] Device 5C:A8:6A:38:xx:xx Honor 8

Da ist also mein Gerät, Sichtbarkeit einschalten nicht vergessen! Nun können wir das Ganze pairen.

[bluetooth]# pair 5C:A8:6A:38:xx:xx
Attempting to pair with 5C:A8:6A:38:xx:xx
[CHG] Device 5C:A8:6A:38:xx:xx Connected: yes
Request confirmation
[agent] Confirm passkey 807xxx (yes/no): yes
[CHG] Device 5C:A8:6A:38:xx:xx Modalias: bluetooth:v000Fp1200dxxxx
[CHG] Device 5C:A8:6A:38:xx:xx UUIDs:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[CHG] Device 5C:A8:6A:38:xx:xx Paired: yes
Pairing successful
[CHG] Device 5C:A8:6A:38:xx:xx Connected: no
[bluetooth]# trust 5C:A8:6A:38:xx:xx
[CHG] Device 5C:A8:6A:38:xx:xx Trusted: yes
Changing 5C:A8:6A:38:xx:xx trust succeeded
[bluetooth]# connect 5C:A8:6A:38:xx:xx
Attempting to connect to 5C:A8:6A:38:xx:xx
[CHG] Device 5C:A8:6A:38:xx:xx Connected: yes
Connection successful

WTF!?? Gestern abend habe ich stundenlang versucht eine Verbindung aufzubauen - ohne Erfolg. Und heute morgen klappt der erste Versuch um das für diesen Beitrag nachzustellen. Manchmal verstehe ich diese Hard- / Software einfach nicht ;)

Nun, mir fehlt ein echtes Einsatzgebiet dafür. Was macht man jetzt damit? Man könnte Musik vom Smartphone an den BananaPi M2-Ultra senden. Moment mal, hatte ich doch gestern noch pulseaudio installiert. Vielleicht geht das ja schon? Irgendwo liegt hier ein Headset rum, kram, gefunden, eingesteckt und dann die Überraschung! Da kommt Musik raus. Yeah!

 

Noch ein kurzer Einblick ins Sys:

root@bpi-iot-ros-ai:~# top
top - 10:51:12 up 15:14, 1 user, load average: 1.23, 1.37, 1.31
Tasks: 114 total, 1 running, 113 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.5 us, 2.8 sy, 0.0 ni, 91.6 id, 0.0 wa, 0.1 hi, 0.0 si, 0.0 st
KiB Mem: 2061224 total, 544060 used, 1517164 free, 53004 buffers
KiB Swap: 131068 total, 0 used, 131068 free. 414036 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30524 root 9 -11 119248 5856 4272 S 25.0 0.3 4:25.19 pulseaudio

Also, noch genug Reservern vorhanden.

Fazit:

Ein, für mich, sehr schwieriges Thema mit einem sehr interessanten Ergebnis. Ein BananaPi M2-Ultra in die Küche, Boxen dran und ich kann vom Handy aus jede x-beliebige Musik streamen. Nicht der schlechteste Einsatzzweck. Aber, Euch fallen da bestimmt noch andere Sachen ein.

Damit hätten wir den Bluetooth-Teil getestet, funktioniert. Das analoge Musiksignal funktioniert auch. Jetzt ein vernünftiges Betriebssystem und ein aktueller Kernel, man ich träume schon wieder :) 

 

Frage an die Mitleser! (Update: 12.12.2016) 

Ich möchte gerne die ganzen Befehle dauerhaft einstellen. So habe ich mir gedacht, machst du ein Script.

bluetooth.sh

#!/bin/bash

# Startup Bluetooth
systemctl stop bluetooth.service
echo "0" > /sys/class/rfkill/rfkill0/state
echo "1" > /sys/class/rfkill/rfkill0/state
echo " " > /dev/ttyS3
hciattach /dev/ttyS3 bcm43xx 1500000
sleep 10
rfkill unblock 3
service bluetooth restart
hciconfig hci0 up

# Audio starten
pulseaudio --start

#Ende Bluetooth
echo "Bluetooth is ready!! Have Fun!"

Aus mir nicht erklärbaren Gründen, geht das aber nicht. Wenn ich alle Befehle nacheinander eingebe, funktioniert alles so wie erwartet. Jemand eine Idee für mich?