如何在Linux x86上使用C对蓝牙LE设备进行编程?

时间:2015-03-27 20:20:15

标签: c bluetooth bluetooth-lowenergy bluez intel-edison

我有一个蓝牙设备,我可以在linux上使用gatttool控制。我想开发自己的c程序,可以向它发送命令。

我过去做过蓝牙编程,它相对简单,类似于网络编程,但这一次,它是一个蓝牙低功耗设备,遵循原则here导致主机关闭时消息可以使用gatttool清楚地连接/断开它。

如何创建此程序?我知道我应该使用bluez库,但我不知道从哪里开始使用低能耗设备。

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;

3 个答案:

答案 0 :(得分:2)

你的程序适用于经典蓝牙,为了支持我的陈述,我会说 ON 任何经典的蓝牙设备你的代码工作都会正常工作

为了得到女同性恋,我建议通过这个链接。 sudo ./st 会扫描附近的ble divices

<强> https://github.com/carsonmcdonald/bluez-experiments

答案 1 :(得分:2)

我一直试图弄清楚如何做到这一点:你可能想看一下Github上sandeepmistry/noble/src/l2cap-ble.c的源代码。

构建它(需要libbluetooth-dev)并运行它之后,l2cap-ble示例实际上创建了一个与BLE设备的简单类似TTY的连接:

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

源代码说明了一些需要与标准套接字I / O代码穿插的特定于BLE的函数(hci_*)。

答案 2 :(得分:0)

github.com上的另一个项目看起来很干净:https://github.com/edrosten/libblepp

在这里的讨论中已经提到:https://mbientlab.com/community/discussion/2492/bluetooth-le-library-linux

虽然是C ++而不是C。