Bluetooth scan und pairing mit python

  • Hallo zusammen,

    ich versuche nun schon länger eine Verbindung mit einem HC-06 Modul von einem Raspi 3 aus zu bekommen.

    mit bluetoothctl kann ich scannen und pairen. Danach auch über /dev/ttyAMA0 als serielle Schnittstelle auch von python aus erreichbar.

    Soweit so gut.

    Nun existiert ein File mit Bluetooth-MAC-Adresse zusammen mit dem Pin-Code. Der python code soll die Rückgabe des Bluetooth-Scans mit dem Textfile vergleichen und alle erreichbaren im Textfile vorkommenden HC-06-Devices abfragen.

    Nur wie läßt sich:
    - unter python ein Scan durchführen
    - die Verbindung nur mit MAC-Adresse und Pincode aufbauen

    Ich hab schon einige Versuche mit python-bluez durchgeführt, aber noch keinen Erfolg gehabt. :s

    Habt ihr Ideen dazu?

  • Scan-Versuch:

    Fehlermeldung:

    Code
    found 1 Bluetooth (non-BLE) devices in pairing mode:
    Traceback (most recent call last):
     File "blueztools.py", line 28, in <module>
       bluetooth_classic_scan(scansec)
     File "blueztools.py", line 19, in bluetooth_classic_scan
       for u,n in devs.items():
    AttributeError: 'list' object has no attribute 'items'


    Automatisch zusammengefügt:
    Fehler gerade selbst gefunden:

    wenn ich die Fehlermeldung richtig interprtiere und das .items weglasse, kommt auch das richtige raus.

    Sind eben nicht alle Beispiele aus dem Netz funktionsfähig
    Automatisch zusammengefügt:
    Versuch2 connecten

    Code
    bd_addr = 'xx:xx:xx:xx:xx:xx'
    port = 1
    sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
    sock.connect((bd_addr,port))
    
    
    sock.close()

    Fehlermedlung:

    Code
    Traceback (most recent call last):
      File "bluetooth2.py", line 5, in <module>
        sock.connect((bd_addr,port))
      File "<string>", line 5, in connect
    bluetooth.btcommon.BluetoothError: (111, 'Connection refused')

    Irgendwie fehlt hier auch die Angabe des Pin-Codes???

    Einmal editiert, zuletzt von Hermi (1. Juni 2017 um 18:59)

  • Warum machst du denn ein mal "bt." und das andere mal "bluetooth." ?

    "bluetooth.discover_devices()" gibt eine List zurück, da gibts kein ".items()"...

    Was hast du denn in "bd_addr" eingetragen?
    Bist du sicher das es bluetooth.RFCOMM ist und nicht bluetooth.L2CAP ?
    Ich kenne das nur so:
    [code=php]
    sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)
    sock.connect((addr, 0x1001))
    [/php]

    Was gibt bei dir denn das aus:
    [code=php]
    bd_addr = 'xx:xx:xx:xx:xx:xx'

    bluetooth.is_valid_address(bd_addr)
    [/php]


  • Warum machst du denn ein mal "bt." und das andere mal "bluetooth." ?

    Liegt an den verwendeten Beispielen. Einmal mit import bluetooth, einmal mit import bluetooth as bt



    Was hast du denn in "bd_addr" eingetragen?

    die eigentlich MAC-Adresse des HC-06. Diese wird auch beim Scan angezeigt.


    L2CAP liegt doch unter RFCOMM. Oder liege ich da falsch.

    Ich denke, dass Problem liegt an der nicht erfolgen Authetifizierung mit PIN. Es kommt ja auch die Fehlermeldung 'Connection refused'

  • 'Connection refused' bedeutet nur dass eine Verbindung zu der IP:PORT Kombination nicht möglich ist bzw zurückgewiesen wurde - weil der PORT nicht passt.
    Versuch zB mal eine SSH Verbindung zum Pi auf PORT 222 herzustellen, dann kriegst du die selbe Meldung, weil auf dem Port kein Dienst lauscht.

    Soweit ich weiß findet die Kommunikation dann nicht über BT statt sondern über UART. Dein Pi spricht mit dem HC-06 über UART und das HC-06 Module funkt dann über BT weiter

    Beschreibe bitte detaillierter wie genau dein Aufbau aussieht, was du woran angeschlossen hast und wie du dann versuchst zu pairen

    Vielleicht hilft dir aber auch schon das:
    https://www.raspberrypi.org/forums/viewtop…?f=102&t=152776
    https://www.hackster.io/user16726/rasp…terminal-f7e9bd


  • Was gibt bei dir denn das aus:

    PHP
    bd_addr = 'xx:xx:xx:xx:xx:xx'
    
    
    bluetooth.is_valid_address(bd_addr)
    [/php]
    [/quote]
    [code]bd_addr = 'xx:xx:xx:xx:xx:xx'
    
    
    print(bluetooth.is_valid_address(bd_addr))

    Ausgabe: True
    Automatisch zusammengefügt:

    Mein Raspi 3 nutz den Onboard-Bluetooth. Der HC-06 sitzt an einem PIC-Controller, der einfach nur UART-Anfragen über den HC-06 auf Bluetooth beantwortet.

    Also Raspi - Onboard-Bluetooth - Funkstrecke - HC-06 - PIC

    Die Verbindung zwischen HC-06 und PIC läuft, da ich mit Android und Blueterm wunderbar kommunizieren kann. Auch wenn ich über Kommandozeile paire und dann über /dev/ttyAMA0 als Serielle zugreife gehts wunderbar.

    Einmal editiert, zuletzt von Hermi (2. Juni 2017 um 15:28)

  • Neue Erkenntnis:

    ich habe mit bluetoothctl über den Befehl

    Code
    [bluetooth]# pair xx:xx:xx:xx:xx:xx
    Attempting to pair with xx:xx:xx:xx:xx:xx
    [CHG] Device xx:xx:xx:xx:xx:xx Connected: yes
    Request PIN code
    [agent] Enter PIN code: xxxx
    [CHG] Device xx:xx:xx:xx:xx:xx Paired: yes
    Pairing successful

    nach verlassen von bluetoothctl konnte ich mit dem python-script connecten und Daten übertragen. Es fehlt also definitiv der Pairing-Vorgang

  • um den Fragen vorwegzukommen:

    kompletter Ablauf in bluetoothctl

    Einmal editiert, zuletzt von Hermi (3. Juni 2017 um 12:03)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!