2015-03-27 20 views
5

Tôi có một thiết bị bluetooth mà tôi có thể kiểm soát bằng cách sử dụng gatttool trên Linux. Tôi muốn phát triển chương trình c của riêng tôi có thể gửi lệnh cho nó.Làm thế nào để lập trình một thiết bị Bluetooth LE sử dụng C trên Linux x86?

Tôi đã thực hiện lập trình bluetooth trong quá khứ và tương đối đơn giản, tương tự như lập trình mạng nhưng lần này, thiết bị năng lượng thấp bluetooth và tuân thủ nguyên tắc here kết quả trong máy chủ./ngắt kết nối từ nó bằng gatttool.

Làm cách nào để tạo chương trình này? Tôi biết tôi nên sử dụng thư viện bluez nhưng tôi không chắc bắt đầu từ đâu với thiết bị năng lượng thấp.

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; 

Trả lời

2

chương trình của bạn là dành cho bluetooth cổ điển, để hỗ trợ tuyên bố của tôi tôi sẽ nói ON bất kỳ thiết bị bluetooth cổ điển việc mã của bạn sẽ làm việc tốt

Để có được lescan tôi đề nghị để đi mặc dù liên kết này. sudo ./st sẽ quét divices lân cận ble

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

2

Tôi đã cố gắng để tìm ra cách để làm điều này quá: bạn có thể muốn có một cái nhìn vào mã nguồn trong sandeepmistry/noble/src/l2cap-ble.c trên Github.

Sau khi xây dựng nó (yêu cầu libbluetooth-dev) và chạy nó, ví dụ l2cap-ble về cơ bản sẽ tạo ra một kết nối TTY-như đơn giản với thiết bị BLE:

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

Mã nguồn minh họa một vài chức năng BLE cụ thể (hci_*) cần được xen kẽ với mã I/O socket tiêu chuẩn.

+0

Mã của bạn không còn nữa. Bạn có thể đăng nó không? – gregoiregentil

+0

Đó không phải mã của tôi. Tuy nhiên, tôi đã viết một chương trình quan trọng hơn và đầy đủ chức năng dựa trên nó. Bạn có thể sử dụng điều này làm ví dụ về cách nói chuyện với một tiện ích BLE sử dụng Bluez: http://github.com/dlenski/ttblue –

+0

Cảm ơn bạn rất nhiều! – gregoiregentil

Các vấn đề liên quan