Bluetooth-Verbindung mit PureBasic
Re: Bluetooth-Verbindung mit PureBasic
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.
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
no Keyboard, press any key
no mouse, you need a cat
Re: Bluetooth-Verbindung mit PureBasic
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) ).
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
no Keyboard, press any key
no mouse, you need a cat
- 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
Aus meinen Kommentaren im alten Code habe ich folgende Vorgehensweise gewählt, kann ich aber gerade nicht mehr testen:
Statt "nicolas" solltest du natürlich deinen Nutzernamen wählen.
Dann hab ich ganz normal meine Serial-Klasse genommen und verbunden:
Das ging jedes mal ohne Probleme. Auch nach Neustarts oder Standbys.
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
Dann hab ich ganz normal meine Serial-Klasse genommen und verbunden:
Code: Alles auswählen
If serial\open("/dev/rfcomm0", 9600)
Re: Bluetooth-Verbindung mit PureBasic
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.
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
no Keyboard, press any key
no mouse, you need a cat
Re: Bluetooth-Verbindung mit PureBasic
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 ?
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
no Keyboard, press any key
no mouse, you need a cat
Re: Bluetooth-Verbindung mit PureBasic
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)
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
no Keyboard, press any key
no mouse, you need a cat
Re: Bluetooth-Verbindung mit PureBasic
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.)
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
no Keyboard, press any key
no mouse, you need a cat
- 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
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.
Jedenfalls ist es die falsche Vorgehensweise Purebasic mit root-Rechten zu starten. Im schlimmsten Fall machst du dir da noch was kaputt mit.
Re: Bluetooth-Verbindung mit PureBasic
Danke Nicolas,
werde ich versuchen.
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.
werde ich versuchen.
Naja:NicTheQuick hat geschrieben:Wem gehört denn /dev/rfcomm0? Kannst du das mal mit ls -l anzeigen lassen?
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
no Keyboard, press any key
no mouse, you need a cat
- 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
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:
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.
Füg dich mal selbst zur Gruppe dialout hinzu, vielleicht reicht das schon:
Code: Alles auswählen
sudo usermod -aG dialout DEINUSER
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.