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

标签 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;

最佳答案

我也一直在想办法做到这一点:您可能想看看 sandeepmistry/noble:src/l2cap-ble.c 中的源代码在 Github 上。 (C 组件在这个提交中被分解了,所以你需要查看旧版本的源代码。)

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

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

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

更新:我从这段代码开始写了一个更丰富、功能更齐全的程序:https://github.com/dlenski/ttblue .您可以使用此源代码作为示例,了解如何使用 Bluez 与 BLE 小工具对话。

关于c - 如何在 Linux x86 上使用 C 语言对蓝牙 LE 设备进行编程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29309533/

相关文章:

C++ 所有用于短信返回的 AT 命令的错误 | PC<->通过蓝牙和 winsocket 的移动连接

iphone - GameKit在设备屏幕关闭或处于后台时保持连接状态

当手机远离配对设备时,android 应用程序将收到 BluetoothDevice.BOND_NONE 广播

安卓低功耗蓝牙 : Not hearing advertisements on some devices

c - 当程序完美运行时 Valgrind 大喊大叫 (C)

c - 为什么 strstr() 搜索空字符串总是返回 true?

java - 哪个蓝牙库是堆栈独立的

ios - 如何在 Iphone 6 上扫描不公布名称的 BLE 设备

c++ - SDL 图像比例尺

c - 为什么使用凯撒密码加密时无法打印空格?