Bluetooth-Verbindung mit PureBasic

Für allgemeine Fragen zur Programmierung mit PureBasic.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Bluetooth-Verbindung mit PureBasic

Beitrag von ccode_new »

Hallo!
Danke für die Windows-Tipps!

Mein Vorhabe ist es eine Windows und Linux Allgemeine-Lösung zu schaffen.

Also Bluetooth und Linux Mint 18.3 werden bei mir keine Freunde (Es hat einmal funbktioniert, danach nie wieder (und keiner kennt die Lösung))
(es kommt immer nur ein Timeout (hcitool scan)

Allgemeines Vorgehen:

sudo bluetoothctl
#power on
#agent on
#scan on
#trust <MAC>
#pair <MAC> (hierbei wird ein Passwort verlangt)
(Das alles bis jetzt Funktioniert)
#connect <MAC> (Das funktioniert nur bei meinem Smartphone, aber nicht beim HC-05-Device)

...Weiter:
sudo kill rfcomm
sudo rfcomm connect /dev/rfcomm0 <Mac> 1&
sudo su -c "echo '1' > /dev/rfcomm0"
(Beim letzten Befehl wird eine 1 (Char) an den Arduino gesendet. (Das hat bei mir nur bis zum Zuklappen des Laptops funktioniert -> Danach nimmer mehr)

...Ich bekomme es unter Linux Mint 18.3 Cinnamon nicht mehr zum laufen (Alles mögliche versucht - Liegt aber wohl an Linux Mint 18.3, das heißt bei einer anderen Distro (älterer Kernel < 4.7 funktioniert es wohl.)

Es kommt bei mir jetzt immer nur noch ein Timeout: (=Kernel antwortet nicht!)
sudo hciconfig hci0 down
sudo hciconfig hci0 up
Can't init device hci0: Connection timed out (110)

Tzja ...liegt aber wohl an modernen Kernel in Verbindung mit Linux Mint und meinen Bluetooth-Chip.

Unter Windows 10 geht es.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Bluetooth-Verbindung mit PureBasic

Beitrag von ccode_new »

Anbei:
Da mir Bluetooth im Allgemeinen zu störanfällig ist denke ich über eine RF (433 Mhz) - Lösung nach (Ist auch günstiger als Bluetooth und eine Wlan - Lösung ist mir zu ungünstig (Doppeldeutung))

Anbei 2:
Unter Linux Mint 16.04 Mate (Live-DVD) mit Blueman-Manager (Serialport-Connect) funktioniert es wie geschnitten Brot (mit Messer) (manchmal läufts schief aber man kann es gebrauchen (essen) ).
Zuletzt geändert von ccode_new am 04.01.2018 21:35, insgesamt 2-mal geändert.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Bluetooth-Verbindung mit PureBasic

Beitrag von NicTheQuick »

Aus meinen Kommentaren im alten Code habe ich folgende Vorgehensweise gewählt, kann ich aber gerade nicht mehr testen:

Code: Alles auswählen

;Instructions for Linux
;
; 1. Edit /etc/bluetooth/rfcomm.conf:
;
; rfcomm0 {
; 	# Automatically bind the device at startup
; 	bind yes;
; 
; 	# Bluetooth address of the device
; 	device 00:11:12:05:04:31;
; 
; 	# RFCOMM channel For the connection
; 	channel	10;
; 
; 	# Description of the connection
; 	comment "Example Bluetooth device";
; }
;
; 2. sudo mknod /dev/rfcomm0 c 216 1
; 3. sudo chmod 666 /dev/rfcomm0
; 3. sudo chown nicolas:nicolas /dev/rfcomm0
; 4. sudo rfcomm connect /dev/rfcomm0 00:11:12:05:04:31
Statt "nicolas" solltest du natürlich deinen Nutzernamen wählen.
Dann hab ich ganz normal meine Serial-Klasse genommen und verbunden:

Code: Alles auswählen

If serial\open("/dev/rfcomm0", 9600)
Das ging jedes mal ohne Probleme. Auch nach Neustarts oder Standbys.
Bild
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Bluetooth-Verbindung mit PureBasic

Beitrag von ccode_new »

Hallo Nicolas,

ich werde das mal probieren.

Aber ich werde das Gefühl nicht los das es sich bei Linux Mint 18.3 Cinnamon um ein allgemeinen Fehler handelt.

>>Hast du die "rfcomm.conf" eigentlich selber mit Sudo- Rechte erstellt ?

>>Aber der Fehler muss wo anders liegen.

rfcomm connect /dev/rfcomm0 98:D3:31:FB:20:E2
Can't create RFCOMM TTY: Address already in use
ubuntu-mate@ubuntu-mate:~/Desktop$ sudo rfcomm connect /dev/rfcomm3 98:D3:31:FB:20:E2
Connected /dev/rfcomm3 to 98:D3:31:FB:20:E2 on channel 1
Press CTRL-C for hangup

sudo su -c "echo '7' > /dev/rfcomm3" (Funktioniert!)

Es liegt irgendwie an der Adressierung.

Bei wechselt das Port quasi ständig (ich muss das ständig wechseln) und dann kommt z.B. so etwas:

sudo su -c "echo '0' > /dev/rfcomm2"

bash: /dev/rfcomm2: Cannot allocate memory

...so:
Die Erstellung einer rfcomm.conf - Datei ist wohl unter Linux Mint nicht vorgesehen.
Ich habe es so probiert wie du.
Alle genannten Befehle haben auch ohne Mucks funktioniert, aber jetzt kommt nur noch:
Can't open RFCOMM device: No such file or directory

Und ich habe auch mit dem Blueman-Manager getestet.
Dort gab es vor der Erstellung der .conf -Datei bei dem HC-05-Device im PopUp-Menü einen Unterpunkt SerialPort (Der ist jetzt weg.)
Alles insgesamt auch nur Murks.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Bluetooth-Verbindung mit PureBasic

Beitrag von ccode_new »

Ok, ich habs hinbekommen (ich hoffe das bleibt so), aber die Latenz-Zeiten sind gewaltig.

Also:

Arduino (mit BT) vom Strom trennen (oder Reset)
...
Blueman-Manager starten
->Auf "Suche klicken" (Wenn noch nicht angezeigt)
->Rechtsklick->Kopplung->Passwort eingeben
->Optionspunkt "Serial Port" auswählen. -> Es wird ein Port erstellt.

Dannach: (Beispiel)
Mehre mal hintereinander "sudo su -c "echo '1'> /dev/rfcomm2" eingeben.
Nach dem ungefähr 20. Versuch reagiert dann der Arduino.
(Das meine ich mit hoher Latenz)

Das hat schon mal schneller funktioniert.

Aber so scheint es jetzt zu funktionieren.

Ich werde des jetzt mal über PureBasic testen.

>Über PureBasic oder z.B. "CuteCom" kann ich nicht auf das Port zugreifen.

Weiß hier jemand Rat ?
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Bluetooth-Verbindung mit PureBasic

Beitrag von ccode_new »

Cool es funktioniert jetzt!

Die PureBasic-Anwendung muss mit Sudo-Rechte gestartet werden.

Unter PureBasic tritt auch keine hohe Latenz auf und es reagiert sofort.

So, uff, schnauff:

Also mit diesen Grundvoraussetzungen kann es unter Linux funktionieren.

Die Erkennung eines Ports unter Linux ist ja auch sehr einfach:
Beispiel: (mit sudo)

Code: Alles auswählen

Directory$ = "/dev"
Endname.s = ""
If ExamineDirectory(0, Directory$, "*.*")  
  While NextDirectoryEntry(0)
    If FindString(DirectoryEntryName(0),"rfcomm")
      If Not OpenSerialPort(0, "/dev/"+GetFilePart(DirectoryEntryName(0)), 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
        RunProgram("rm",DirectoryEntryName(0),Directory$)
      ElseIf OpenSerialPort(0, "/dev/"+GetFilePart(DirectoryEntryName(0)), 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
        MessageRequester("COM-PORT", "/dev/"+GetFilePart(DirectoryEntryName(0)))
      EndIf
    EndIf
  Wend
  FinishDirectory(0)
EndIf
Zuletzt geändert von ccode_new am 05.01.2018 02:14, insgesamt 5-mal geändert.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Bluetooth-Verbindung mit PureBasic

Beitrag von ccode_new »

Aber ich werde doch mal den Versuch mit 2 Arduino und 2 HC-05 Module machen.

Weil ich eigentlich eine Laptop/PC unabhängige Lösung schöner finde. (Bluetooth-Fernbedienung (ähnlich IR oder RF - Fernbedienung))
(Das hat dann aber nichts mehr mit PureBasic zu tun.)
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Bluetooth-Verbindung mit PureBasic

Beitrag von NicTheQuick »

Du musst Purebasic nicht mit sudo starten, wenn du dem Bluetooth-Gerät sagst, dass du sein Besitzer bist. Oder du musst dich noch in die richtige Benutzergruppe eintragen. Ich weiß aber gerade nicht auswendig welche das sein muss. Wem gehört denn /dev/rfcomm0? Kannst du das mal mit ls -l anzeigen lassen?

Jedenfalls ist es die falsche Vorgehensweise Purebasic mit root-Rechten zu starten. Im schlimmsten Fall machst du dir da noch was kaputt mit. ;-)
Bild
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Bluetooth-Verbindung mit PureBasic

Beitrag von ccode_new »

Danke Nicolas,

werde ich versuchen.
NicTheQuick hat geschrieben:Wem gehört denn /dev/rfcomm0? Kannst du das mal mit ls -l anzeigen lassen?
Naja:
crw-rw---- 1 root dialout 216, 1 Jan 5 01:20 /dev/rfcomm1

Momentan noch: root (sudo)

->Ich habe den Benutzer und die Gruppe geändert .
Aber! : Ein OpenSerial-Zugriff ist trotzdem nur mit Sudo-Rechte möglich.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Bluetooth-Verbindung mit PureBasic

Beitrag von NicTheQuick »

Du kannst nicht einfach so die Rechte des Gerätes ändern, da der Treiber dahinter trotzdem nur mit anderen Rechten arbeiten.
Füg dich mal selbst zur Gruppe dialout hinzu, vielleicht reicht das schon:

Code: Alles auswählen

sudo usermod -aG dialout DEINUSER
Danach musst du dich aber einmal ausloggen und wieder einloggen, damit es für alle Programme gültig wird. Oder wenn es schnell geht, starte einfach einmal komplett neu um sicher zu gehen.
Wenn du danach im Terminal "groups" eingibst, solltest du sehen, dass du auch in der Gruppe "dialout" bist. Da dein Gerät auch der Gruppe "dialout" angehört und die Gruppe Lese- und Schreibrechte hat, solltest du jetzt ohne Probleme darauf zugreifen können.

Falls auch das fehlschlägt, hab ich aber noch eine Idee. Dann muss man aber udev-Regeln ändern.
Bild
Antworten