Kód přilepená na klienta, address = server.accept()' (bluetooth)

0

Otázka

Jsem připojen na zařízení bluetooth můžete posílat data, ale kód visí v prohlášení:

client, address = server.accept()

Toto je kód

import bluetooth

#00:07:80:E0:A4:FC
host = ""
port = 1
server = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
print('Bluetooth Socket Created')

try:
   server.bind((host, port))
   print("Bluetooth Binding Completed")
except:
   print("Bluetooth Binding Failed")

server.listen(1)

try:
    client, address = server.accept()
    print("Connected to: ", address)
    print("Client: ", client)
except Exception as e:
    print (str(e))

try:
   while True:
      data = client.recv(1)
      print(data)
      client.send(data)
except:
   client.close()
   server.close()

Zařízení je připojeno:

enter image description here

enter image description here

enter image description here

Při párování pwd od odesílajícího zařízení bylo požadováno.

Když jsem se udělat ctrl-c dostanu následující hlášení: enter image description here

Také: vše funguje v pořádku při připojení s telefonu Android a pomocí sériové BT aplikace

systemctl status bluetooth: enter image description here

sudo btmon: enter image description here

Obsah /etc/bluetooth/rfcomm.conf je:

rfcomm1 {
    # Automatically bind the device at startup
    bind yes;

   # Bluetooth address of the device
    device 00:07:80:E0:A4:FC
#xx:xx:xx:xx:xx:xx;

    # RFCOMM channel for the connection
    channel 1;

    # Description of the connection
    comment "Soehnle Bluetooth Connection";
}

Také obsah /lib/systemd/system/bluetooth.služby:

[Unit]
Description=Bluetooth service
Documentation=man:bluetoothd(8)
ConditionPathIsDirectory=/sys/class/bluetooth

[Service]
Type=dbus
BusName=org.bluez
ExecStart=/usr/lib/bluetooth/bluetoothd -C
ExecStartPost=/usr/bin/sdptool add SP
NotifyAccess=main
#WatchdogSec=10
#Restart=on-failure
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
LimitNPROC=1
ProtectHome=true
ProtectSystem=full

[Install]
WantedBy=bluetooth.target
Alias=dbus-org.bluez.service

Bluetoothctl výstup jako kód:

WT11i-A]# info
Device 00:07:80:E0:A4:FC (public)
    Name: WT11i-A
    Alias: WT11i-A
    Class: 0x00001f00
    Paired: yes
    Trusted: yes
    Blocked: no
    Connected: yes
    LegacyPairing: no
    UUID: Serial Port               (00001101-0000-1000-8000-00805f9b34fb)
    UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
    Modalias: bluetooth:v0047pF000d0400

RFCOMM výstupu příkazu jako kód:

pi@raspberrypi:~ $ sudo rfcomm -a show hci0
rfcomm0: B8:27:EB:A6:D7:4F -> 00:07:80:E0:A4:FC channel 1 closed [reuse-dlc release-on-hup tty-attached]
rfcomm1: B8:27:EB:A6:D7:4F -> 00:07:80:E0:A4:FC channel 1 connected [reuse-dlc release-on-hup tty-attached]

ctrl-c výstup jako kód:

pi@raspberrypi:~ $ sudo python bluetoothtest4.py
Bluetooth Socket Created
Bluetooth Binding Completed
^CTraceback (most recent call last):
  File "bluetoothtest4.py", line 18, in <module>
    client, address = server.accept()
  File "/usr/lib/python3/dist-packages/bluetooth/bluez.py", line 167, in accept
    client, addr = self._sock.accept ()
KeyboardInterrupt

systemctl výstup jako kód:

pi@raspberrypi:~ $ systemctl status bluetooth
● bluetooth.service - Bluetooth service
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2021-11-21 12:51:21 CET; 2 days ago
     Docs: man:bluetoothd(8)
 Main PID: 734 (bluetoothd)
   Status: "Running"
    Tasks: 1 (limit: 2059)
   CGroup: /system.slice/bluetooth.service
           └─734 /usr/lib/bluetooth/bluetoothd

Nov 21 12:51:21 raspberrypi bluetoothd[734]: Bluetooth daemon 5.50
Nov 21 12:51:21 raspberrypi systemd[1]: Started Bluetooth service.
Nov 21 12:51:21 raspberrypi bluetoothd[734]: Starting SDP server
Nov 21 12:51:21 raspberrypi bluetoothd[734]: Bluetooth management interface 1.18 initialized
Nov 21 12:51:21 raspberrypi bluetoothd[734]: Sap driver initialization failed.
Nov 21 12:51:21 raspberrypi bluetoothd[734]: sap-server: Operation not permitted (1)
Nov 21 12:51:21 raspberrypi bluetoothd[734]: Failed to set privacy: Rejected (0x0b)
Nov 21 12:51:23 raspberrypi bluetoothd[734]: Endpoint registered: sender=:1.28 path=/MediaEndpoint/A2DPSource
Nov 21 12:51:23 raspberrypi bluetoothd[734]: Endpoint registered: sender=:1.28 path=/MediaEndpoint/A2DPSink
Nov 23 11:36:42 raspberrypi systemd[1]: bluetooth.service: Current command vanished from the unit file, execution of the command list won't be resumed.

btmon výstup jako kód:

@ RAW Open: blueman-manager version 2.22                                                                                                            {0x0004} 986.383469
@ RAW Close: blueman-manager                                                                                                                        {0x0004} 986.383531
< HCI Command: Read RSSI (0x05|0x0005) plen 2                                                                                                   #5905 [hci0] 986.385681
        Handle: 12
> HCI Event: Command Complete (0x0e) plen 7                                                                                                     #5906 [hci0] 986.386072
      Read RSSI (0x05|0x0005) ncmd 1
        Status: Success (0x00)
        Handle: 12
        RSSI: 0 dBm (0x00)
< HCI Command: Read Link Quality (0x05|0x0003) plen 2                                                                                           #5907 [hci0] 986.386278
        Handle: 12
> HCI Event: Command Complete (0x0e) plen 7                                                                                                     #5908 [hci0] 986.386591
      Read Link Quality (0x05|0x0003) ncmd 1
        Status: Success (0x00)
        Handle: 12
        Link quality: 0x8c
< HCI Command: Read Transmit Power Level (0x03|0x002d) plen 3                                                                                   #5909 [hci0] 986.386755
        Handle: 12
        Type: Current Transmit Power Level (0x00)
> HCI Event: Command Complete (0x0e) plen 7                                                                                                     #5910 [hci0] 986.387069
      Read Transmit Power Level (0x03|0x002d) ncmd 1
        Status: Success (0x00)
        Handle: 12
        TX power: 12 dbm (0x0c)
bluetooth
2021-11-22 12:58:01
1

Nejlepší odpověď

0

Věřím, že tvůj hlavní problém je, že nemají odpovídající profil svého klienta s tím, co zařízení (server) nabízí.

BlueZ je oficiální Linux Bluetooth protocol stack, který je založen na D-Bus API. Proto, pokud chcete vybudovat solidní python kód, doporučuji vám podívat se na to.

Na rfcoom nástroj je také zastaralé, nicméně to má pořád pracovat.

Kroky, které pracují pro mě rfcomm jsou:

bluetoothctl
scan on // wait until your device MAC appears
scan off
pair 00:07:80:E0:A4:FC

V tomto kroku může požádat o kód pin, v mém případě jsem použil Arduino jako server, výchozí jeden byl buď 0000 nebo 1234. Pak:

trust  00:07:80:E0:A4:FC // so you do not need to pair everytime
quit

Teď máme připojení přes:

sudo rfcomm connect hci0 00:07:80:E0:A4:FC

Vyměňte hci0 s názvem své vlastní Bluetooth adaptér.

Pro D-Bus příklad viz tato diskuse. @ukBaz poskytuje pěkné vysvětlení s příkladem kódu. Můžete potřebovat skenování, pokud vaše zařízení není zjištěno, je, můžete zjistit, že v mém kódu a přidat to.

2021-11-23 13:57:19

Nevěděl jsem, že rfcomm je zastaralý. Zdá se, že existuje tolik možností tam, a já jsem opice vidí-opice-se snaží kolem sebe. Jsem definitivně chci solidní řešení, a to se rychle podívat na vaše řešení a D-Bus API. Pro mě jako opice zdá se, jako zvěrstvo, i když, takže budu muset přístup krok za krokem.
mortpiedra

Já donot opravdu pochopit, 'věřím, že tvůj hlavní problém je, že nemají odpovídající profil svého klienta s tím, co zařízení (server) nabízí'??? Jsem připojen zdá - stejný výsledek, když jsem sledovat kroky, které jste navrhl, nad - a tam je opravdu pwd pop-up, kde jsem se vstoupit 0000. Spuštěním příkazu sudo rfcomm -a show hci0 ukazuje, že rfcomm1 je připojen.
mortpiedra

@mortpiedra, co je přístroj, který se chová jako server? Také, prosím, dejte ty výstupy jako kód, nikoliv jako obrázek.
Mr. Panda

server je RPi 3 (Model B + Rev 1.3). Přidal jsem výstup jako kód výše (v případě, že to není to, co si mysli, prosím vrátit, děkuji).
mortpiedra

Mohl bych přidat následující info: na obrázku výše ukazuje zařízení 'WT11i-A' v kroužku (v modrém) přenos hodnot (18.94 b/s atd.) střílet až do hodnot několika 100 b/s, když jsem tlačit (fyzické) "odeslat" tlačítko na zařízení.
mortpiedra

@ukBaz Pan Panda (a mnoho dalších) odkazují na vás jako autoritu na BT problémy. Nechcete se podívat na tento problém?
mortpiedra

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................