2015-03-27 14 views
5

Ich habe ein Bluetooth-Gerät, das ich mit gatttool unter Linux steuern kann. Ich möchte mein eigenes c-Programm entwickeln, das Befehle an es senden kann.Wie programmiert man ein Bluetooth LE Gerät mit C auf Linux x86?

Ich habe Bluetooth-Programmierung in der Vergangenheit getan und es ist relativ einfach, ähnlich wie Netzwerkprogrammierung, aber dieses Mal ist es ein Bluetooth Low Energy-Gerät und folgt den Prinzipien here Ergebnisse in einem Host ist down-Nachricht, wenn ich klar verbinden kann/Trennen Sie es mit gatttool.

Wie erstelle ich dieses Programm? Ich weiß, ich sollte die Bluez-Bibliothek verwenden, aber ich bin mir nicht sicher, wo ich mit Low-Energy-Geräten anfangen soll.

int main(int argc, char **argv) 
{ 
    struct sockaddr_rc addr = { 0 }; 
    int s, status; 
    char dest[18] = "B4:99:4C:5C:EE:49"; 
    char buf[2048]; 
    pthread_t rthread; 

    setbuf(stdout, NULL); 
    // allocate a socket 
    s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); 
    // set the connection parameters (who to connect to) 
    addr.rc_family = AF_BLUETOOTH; 
    addr.rc_channel = (uint8_t) 1; 
    str2ba(dest, &addr.rc_bdaddr); 
    // connect to server 
    status = connect(s, (struct sockaddr *)&addr, sizeof(addr)); 

    if(status < 0){ 
     perror("Error connecting to host\n"); 
     exit(1); 
    } 

    while(fgets(buf, sizeof(buf), stdin) != NULL){ 
     status = send(s, buf, sizeof(buf), 0); 
     if(status < 0){ 
     printf("Error sending.\n"); 
    exit(1); 
     } 
    } 

    close(s); 

    return; 

Antwort

2

Ihr Programm ist für klassischen Bluetooth, meine Aussage zu unterstützen i ON jedes klassisches Bluetooth-Gerät Code Arbeit

Um Lescan i obwohl diese Verbindung zu gehen vorschlagen würde gut funktionieren sagen würde. sudo ./st würde in der Nähe ble divices scannen

https://github.com/carsonmcdonald/bluez-experiments

2

Ich habe versucht, herauszufinden, wie dies zu tun: Sie können in sandeepmistry/noble/src/l2cap-ble.c einen Blick auf den Quellcode nehmen auf Github.

Nachdem es den Aufbau (erfordert libbluetooth-dev) und es läuft, das l2cap-ble Beispiel erzeugt im wesentlichen eine einfache TTY artige Verbindung der BLE Gerät:

$ gcc -o l2cap-ble l2cap-ble.c utility.c -lbluetooth 
$ ./l2cap-ble 12:34:56:78:9A:BC [public|random] 

Der Quellcode stellt einige BLE spezifische Funktionen (hci_*), die mit dem Standard-Socket-I/O-Code durchsetzt sein müssen.

+0

Ihr Code ist nicht mehr verfügbar. Kannst du es bitte posten? – gregoiregentil

+0

Es ist nicht mein Code. Ich schrieb jedoch ein wesentlich umfangreicheres und voll funktionsfähiges Programm darauf basierend. Sie können dies als ein Beispiel verwenden, wie Sie mit einem BLE-Gadget mit Bluez sprechen können: http://github.com/dlenski/ttblue –

+0

Vielen Dank! – gregoiregentil