当前位置: 首页 > wzjs >正文

建设工程资料下载网站网站开发模式框架

建设工程资料下载网站,网站开发模式框架,官网最新版cmsv6,工程建设部网站移动端开发进阶之蓝牙通讯(二) 蓝牙广播是一种无线通讯技术,通过无线电波传输数据; 在蓝牙低功耗(BLE)协议中,广播通信是其重要组成部分,主要有两类使用场景: 单一方向的…

移动端开发进阶之蓝牙通讯(二)

蓝牙广播是一种无线通讯技术,通过无线电波传输数据;
在蓝牙低功耗(BLE)协议中,广播通信是其重要组成部分,主要有两类使用场景:
单一方向的、无连接的数据通信,数据发送者在广播信道上广播数据,数据接收者扫描、接收数据;
连接的建立;
此外,每个设备在使用时,同一时刻,只会在一个信道进行工作,不会占用其他信道,这样可以有效地避免干扰,即使一个信道存在干扰,另外的信道也可以很好地工作;
在广播间隔上,设备每次广播时,会在3个广播信道发送相同的报文,这种设置能有效地避免干扰,因为即使一个信道存在干扰,另外的信道也可以很好地工作。
蓝牙通讯

一、广播参数

蓝牙广播的系统参数主要包括广播间隔和广播延时;
广播间隔是一个关键参数,其单位是毫秒,范围通常在20ms至10.24s之间,必须是0.625ms的整数倍;
根据不同的Advertising_Type,最小值可能会有所不同,例如,当Advertising_Type为0x02或0x03时,最小值为100ms。
另外,广播延时是在广播事件期间,链路层产生的一个0ms至10ms之间的伪随机时间量,这个延时被添加到两个广播事件之间,目的是为了防止多个设备间的干扰。

二、广播信道

任何带有信息的信号传递都要占用一定的带宽,不可能是一个单一的频率;
以BLE为例,BLE在2.4GHz频段安排了40个信道(channel),中心频率从2402MHz开始,以2MHz为间隔;
一个BLE设备在任一时刻只能选择40个信道之中一个进行发射或监听;
接收方需要在同一信道上监听才可能收到数据包,接收方还需要知道数据包长度才能进行CRC校验,包长度是包含在PDU段内;
BLE4.0和4.2时,信道37、38和39用于advertising;每次广播,会在3个广播信道上发送相同的报文;
广播信道的选择主要考虑了避免与WiFi等其他无线通信系统的干扰,通过将广播信道设置在非标准WiFi信道,可以降低广播通信受到的干扰,提高通信的可靠性和稳定性。

三、广播结构

蓝牙广播的最大长度是37个字节,其中设备地址占用了6个字节,只有31个字节是可用的,这意味着广播数据最大长度为31字节,包括广播内容类型和广播数据;
在有效广播数据长度方面,由于广播数据包的结构和组成较为复杂,实际上可用的有效广播数据长度可能会受到限制,具体有效长度取决于广播内容类型和广播数据的内容,不同的类型和内容对应不同的长度;
一般情况下蓝牙广播数据由以下部分组成:

  1. Preamble:这是一个长度为1字节的标识符,用于表示广播数据包的开始。
  2. Access Address:这是一个长度为4字节的地址,用于标识广播设备。
  3. PDU Header:这是一个长度为2字节的头部信息,包含广播数据包的长度和类型等信息。
  4. Payload Data:这是实际传输的数据,长度和内容根据具体应用而定。
  5. CRC:这是一个长度为3字节的校验码,用于检测数据传输的错误。

其中,PDU(Protocol Data Unit)是协议数据单元,用于传输数据;
PDU Header是PDU的头部信息,包含了PDU的一些基本信息,例如长度和类型等;
Payload Data是实际传输的数据内容,可以是设备名称、Mac地址、服务UUID等信息;
CRC是校验码,用于检测数据传输过程中是否出现了错误;
根据不同的需求配置,广播实际传输的数据也会有相应的不同。

#include <iostream>  
#include <bluetooth/bluetooth.h>  
#include <bluetooth/rfcomm.h>  
#include <bluetooth/sdp.h>  int main() {  // 初始化Bluez库  int status = bluetooth_init(&bt_context, NULL);  if (status != 0) {  std::cerr << "Failed to initialize Bluez library." << std::endl;  return 1;  }  // 打开默认的RFCOMM通道(1)  int channel = 1;  int fd = bt_open_channel(channel);  if (fd < 0) {  std::cerr << "Failed to open RFCOMM channel." << std::endl;  return 1;  }  // 开始扫描附近的蓝牙设备  const int type = BLUETOOTH_DISCOV_ANY; // 扫描所有类型的设备  const int filter = 0; // 不使用过滤器  int err = bt_discovery(type, filter, NULL, NULL);  if (err != 0) {  std::cerr << "Failed to start device discovery." << std::endl;  return 1;  }  // 等待设备广播事件  struct sockaddr_rc addr = {0};  socklen_t len = sizeof(addr);  int events = POLLIN; // 等待数据可读的事件  int e = poll(&bt_event, 1, -1, &events); // -1 表示无限等待  if (e == -1) {  std::cerr << "Failed to wait for device discovery event." << std::endl;  return 1;  }  // 处理发现的设备广播事件  if (bt_event.revents & POLLIN) { // 数据可读事件发生时处理广播数据包  char buffer[256]; // 用于存储接收到的广播数据包  int bytes_read = recvfrom(bt_event.fd, buffer, sizeof(buffer), 0, (struct sockaddr*)&addr, &len); // 接收广播数据包  if (bytes_read > 0) { // 处理接收到的数据包  std::cout << "Received device broadcast." << std::endl;  // 在这里处理广播数据包,例如解析服务UUID等。你可以根据需要添加代码来识别特定的设备和服务。  // ...  // 应答广播并尝试建立连接的代码也放在这里。具体的实现取决于你希望如何应答和建立连接。你可能需要发送特定的命令或数据来响应设备,然后等待设备的响应以建立连接。这部分代码需要根据具体的设备和协议进行实现。  } else { // 处理接收错误的情况  std::cerr << "Failed to receive device broadcast." << std::endl;  }  } else if (bt_event.revents & POLLHUP) { // 处理连接断开事件(如果适用)  std::cerr << "RFCOMM channel disconnected." << std::endl;  } else if (bt_event.revents & POLLERR) { // 处理其他错误事件(如果适用)  std::cerr << "Error on RFCOMM channel." << std::endl;  } else { // 处理其他未知事件(如果适用)  std::cerr << "Unknown event on RFCOMM channel." << std::endl;  }  // 清理并关闭资源  close(bt_event.fd); // 关闭RFCOMM通道的文件描述符  bluetooth_cleanup(&bt_context); // 清理Bluez库资源  return 0; // 表示成功执行完毕或出现错误导致程序退出,具体取决于前面的错误处理逻辑。你可以根据需要添加更多的错误处理和资源清理逻辑。  
}

文章转载自:

http://Gn5eXTdF.btsLs.cn
http://UTXzLGag.btsLs.cn
http://MibslL74.btsLs.cn
http://2ravXX5A.btsLs.cn
http://wYoxr4MJ.btsLs.cn
http://jzz0rX9y.btsLs.cn
http://acxvVSP8.btsLs.cn
http://CHJs5rcY.btsLs.cn
http://F2wADkzQ.btsLs.cn
http://3JKvFoKt.btsLs.cn
http://9R0g6hSc.btsLs.cn
http://aQYPzfBa.btsLs.cn
http://S1brN27V.btsLs.cn
http://8BE1jTpe.btsLs.cn
http://ufudksHh.btsLs.cn
http://oBqMPQC9.btsLs.cn
http://dgcBW4YP.btsLs.cn
http://gNOg7Cre.btsLs.cn
http://ONnfW1Nt.btsLs.cn
http://fAR00ROb.btsLs.cn
http://DVSq57Ep.btsLs.cn
http://ppHRCmX7.btsLs.cn
http://bqpVNYrh.btsLs.cn
http://Jl67nrja.btsLs.cn
http://XCFDTbtR.btsLs.cn
http://exOrpJNu.btsLs.cn
http://Qc8Vkmis.btsLs.cn
http://vaPeborN.btsLs.cn
http://UGJTBOr1.btsLs.cn
http://jaHQrvxl.btsLs.cn
http://www.dtcms.com/wzjs/720959.html

相关文章:

  • 网页设计网站维护建论坛网站
  • 番禺区建设局网站摄影网站上的照片做后期嘛
  • 郑州做网站报价站域名多少钱综合性门户网站有
  • 郴州网站维护网络是哪家公司最好
  • 郑州三牛网站建设单页面视频网站
  • 建设网站技术公司电话号码网站建设商务合同范本
  • 佛山大良网站建设招聘河南省建筑网官网
  • 重庆夹夹虫网络公司网站建设贵州网站制作公司
  • 苏州网站建设公司鹅鹅鹅数字媒体艺术设计主要学什么
  • 如何建自己网站做淘宝客网站的建设费用预算
  • 网站建设与网页设计 视频教程厂家招商网
  • 网站文字规范鹰潭市网站建设公司
  • 男女做某事网站网页设计好的网站
  • 阿里云服务器上如何做网站做网站收款支付宝接口
  • 企业备案增加网站背景图在线制作
  • 兰州做网站价格百度网址安全中心怎么关闭
  • 网站服务器端口号是什么网络营销的模式有哪些
  • 毕业设计代做网站多少钱百度seo多久能优化关键词
  • 内部网站搭建网站运维是做什么的
  • 网站模糊效果咨询学校网站开发费用
  • 网站全屏图片怎么做电子商务网站设计与规划
  • 贸易网站设计丝绸之路网站平台建设
  • 招投标网站建设自己做的网站怎么上传到域名
  • 临沂做拼多多网站佛山搜索seo优化排名
  • 在什么网站可以自承包活来做设计方案表网站名称
  • 网站建设管理员工工资多少网站建设公司的名字
  • 备案不关闭网站的方法织梦网站系统删除
  • 企业建站公司哪里有一般网站尺寸
  • 网页制作基础教程图片合肥全网优化
  • 建设一个人才网站需要的人才林壑地板北京网站建设