如何对网站做引擎优化东莞建站怎么做
- 作者: 五速梦信息网
- 时间: 2026年03月21日 09:51
当前位置: 首页 > news >正文
如何对网站做引擎优化,东莞建站怎么做,宁波网页制作,湛江市政工程建设公司网站前言 #xff08;1#xff09;学习本文之前#xff0c;需要先了解一下蓝牙的基本概念#xff1a;BLE学习笔记#xff08;0.0#xff09; —— 基础概念#xff08;0#xff09; #xff08;2#xff09; 学习一款芯片的蓝牙肯定需要先简单了解一下该芯片的体系结构1学习本文之前需要先了解一下蓝牙的基本概念BLE学习笔记0.0 —— 基础概念0 2 学习一款芯片的蓝牙肯定需要先简单了解一下该芯片的体系结构因此本文将会简单的介绍ESP32的蓝牙结构。 3因为乐鑫目前主推的是BLE低功耗蓝牙技术因此我本人也主要侧重讲解BLE部分。 ESP32蓝牙系统介绍 蓝牙堆栈 1ESP-IDF 目前支持两个主机堆栈Bluedroid默认 和 Apache NimBLE 。 Bluedroid 该堆栈支持传统蓝牙(BR/EDR)和低功耗蓝牙(BLE)。如果是传统蓝牙(BR/EDR)有需求则必须使用该堆栈。Apache NimBLE 仅支持低功耗蓝牙。如果仅仅是对BLE有使用需求建议选择该协议栈因为该协议栈代码占用和运行时对内存的需求都会低一些。 蓝牙架构 1我们知道蓝牙从整体架构上可以分为控制器 (Controller) 和主机 (Host) 。 控制器 (Controller) 通常是一个物理设备它能够发送和接收无线电信号并懂得如何将这些信号翻译成携带信息的数据包。主要用于硬件接口管理、链路管理等等。主机 (Host) 它通常是一个软件协议栈用于管理两台或多态设备间如何通讯以及如何实现无线电同时提供几种不同服务。它可以构建各种规范向上层应用提供接口基础方便应用层对蓝牙系统的访问编程。 2首先我们需要知道为什么蓝牙需要分为控制器 (Controller) 和主机 (Host) 两层结构。这个时候我们就需要了解一下蓝牙技术设计初衷了蓝牙致力于打造一种低成本的无线通讯方案要实现低成本那么就需要有较大的销量。如今手机作为当之无愧销量最大的消费电子设备任何一项技术一旦进入了手机就非常容易取得成功。因此低功耗蓝牙将会依附于蓝牙在手机上的高配售率快速拓宽市场。 3既然你要依附手机那么很多东西都要从手机厂的角度进行思考问题。那么如果你仔细阅读蓝牙核心规格你会发现规格书更多地是站在手机角度来阐述的然后“顺带”描述一下手机周边蓝牙设备的实现原理。 4大家都知道手机厂一般不只是做手机还会做一些手机相关的周边设备例如华为不仅仅做华为手机还有华为平板华为耳机华为电脑等等。华为手机和华为电脑只要通过无线网络连接在一起就能够无感控制对方并且传输数据。但是如果华为手机和苹果电脑组合在一起却做不到无感控制对方。这是为什么呢 5因为手机厂都会在自家设备上跑一套协议栈用于适配自家的电子产品。协议栈设计的越好手机厂自家的各种设备间信息传输更稳定安全用户体验也越好。因此手机厂不会把自家的协议栈分享给别人一起使用这也导致的华为手机和苹果电脑之间部分功能无法实现的原因。注意虽然不同手机厂协议栈不一样但还是符合SIG标准和规范的因此大部分功能能够互通 6既然手机厂的协议栈是不进行公开的那么就存在一个问题如果手机厂好不容易将自家的协议栈部署在一颗蓝牙芯片上突然发现又有一颗性能更好、更便宜的蓝牙芯片了需要更换芯片怎么办这个时候需要更换部署对于手机厂来说成本太高。因此SIG将跑协议栈的Host层与硬件管理的Control层进行隔离中间统一一个接口标准HCI层。这样的话手机厂只需要在AP芯片上跑协议栈Host层而负责硬件的Control层单独一个芯片。当需要更换蓝牙芯片的时候直接换即可因为都是统一的HCI接口。 7现在我们有了上述基础再来看看ESP32的蓝牙结构。ESP32有一个Control层负责物理层相关的处理。Host层就有三种应用场景 单芯片跑蓝牙程序使用Control层和Host层都运行在ESP32上Host层有三种选择乐鑫官方提供的Bluedroid默认 和 NimBLE 协议栈或者自己在ESP32上编写一个自己的协议栈。双芯片跑蓝牙程序在ESP32上运行Control层外接一个运行蓝牙协议栈的Host层。认证测试我们如果想要使用ESP32作为开发用的蓝牙芯片那么就需要知道它是否符合一些认证标准。因此就可以使用一个UART外接PC机进行认证测试。 代码分析 1我们首先需要找到gatt_server_service_table例程根据上面所说的知识分析一下app_main()函数做了什么。 2该例程虽然是使用的Bluedroid协议栈但是只用了BLE部分。 1esp_bt_controller_mem_release()因为我们这里只需要BLE部分所以需要先将传统蓝牙的内存进行释放。 // 释放经典蓝牙控制器内存 ESP_ERROR_CHECK(esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT));2esp_bt_controller_init()是对Control层进行初始化BT_CONTROLLER_INIT_CONFIG_DEFAULT()是一个宏作为蓝牙初始化的默认参数这个宏默认仅初始化BLE部分。 // 初始化蓝牙 Control 层 esp_bt_controller_config_t bt_cfg BT_CONTROLLER_INIT_CONFIG_DEFAULT(); ret esp_bt_controller_init(bt_cfg); if (ret) {ESP_LOGE(GATTS_TABLE_TAG, %s enable controller failed: %s, func, esp_err_to_name(ret));return; }3我们对蓝牙Control初始化完成之后需要调用esp_bt_controller_enable()对Control层进行使能。传入值是一个enum参数。 ESP_BT_MODE_IDLE 失能蓝牙ESP_BT_MODE_BLE 仅运行低功耗蓝牙(BLE)ESP_BT_MODE_CLASSIC_BT 仅运行传统蓝牙(BR/EDR)ESP_BT_MODE_IDLE 即运行低功耗蓝牙(BLE)又运行传统蓝牙(BR/EDR) // 使能蓝牙 Control 层 ret esp_bt_controller_enable(ESP_BT_MODE_BLE); if (ret) {ESP_LOGE(GATTS_TABLE_TAG, %s enable controller failed: %s, func, esp_err_to_name(ret));return; }4如果我们的Host层不是运行在ESP32上那么只需要进行如上操作即可。但是该例程是采用的单芯片方案因此还需要对Host层进行初始化这是使用的Bluedroid协议栈。 // 初始化蓝牙 HOST 层 ret esp_bluedroid_init(); if (ret) {ESP_LOGE(GATTS_TABLE_TAG, %s init bluetooth failed: %s, func, esp_err_to_name(ret));return; }5初始化bluedroid之后再进行使能即可。 // 使能蓝牙 HOST 层 ret esp_bluedroid_enable(); if (ret) {ESP_LOGE(GATTS_TABLE_TAG, %s enable bluetooth failed: %s, func, esp_err_to_name(ret));return; }6如下部分在后面章节会进一步讲解各位看一下代码注释简单了解即可。 // 注册 GATT 回调函数处理所有的 GATT 事件ret esp_ble_gatts_register_callback(gatts_event_handler);if (ret){ESP_LOGE(GATTS_TABLE_TAG, gatts register error, error code %x, ret);return;}// 注册 GAP 回调函数ret esp_ble_gap_register_callback(gap_event_handler);if (ret){ESP_LOGE(GATTS_TABLE_TAG, gap register error, error code %x, ret);return;}/* 注册一个app_id, 协议栈将会分配一个对应的 gatts_if用于标识一个 GATT 服务。* 调用这个函数就会触发 esp_ble_gatts_register_callback() 注册的回调函数中的 ESP_GATTS_REG_EVT 事件*/ret esp_ble_gatts_app_register(heart_rate_profile_tab[PROFILE_APP_IDX].app_id);if (ret){ESP_LOGE(GATTS_TABLE_TAG, gatts app register error, error code %x, ret);return;}// 设置本地 MTU 大小esp_err_t local_mtu_ret esp_ble_gatt_set_local_mtu(500);if (local_mtu_ret){ESP_LOGE(GATTS_TABLE_TAG, set local MTU failed, error code %x, local_mtu_ret);}参考 1乐鑫官方文档ESP32蓝牙架构 2《低功耗蓝牙开发权威指南》第三章 —— 低功耗蓝牙的体系结构。 3《低功耗蓝牙开发权威指南》2.9章节 —— 十亿只是小目标。 4博客园三种蓝牙架构实现方案蓝牙协议栈方案
- 上一篇: 如何对网站做渗透沈阳专业制作网站公司哪家好
- 下一篇: 如何对网站做优化胶州网站建设电话
相关文章
-
如何对网站做渗透沈阳专业制作网站公司哪家好
如何对网站做渗透沈阳专业制作网站公司哪家好
- 技术栈
- 2026年03月21日
-
如何对网站进行改版软件开发的外包公司
如何对网站进行改版软件开发的外包公司
- 技术栈
- 2026年03月21日
-
如何对网站建设和维护徐州做网站xlec
如何对网站建设和维护徐州做网站xlec
- 技术栈
- 2026年03月21日
-
如何对网站做优化胶州网站建设电话
如何对网站做优化胶州网站建设电话
- 技术栈
- 2026年03月21日
-
如何防止php网站被挂马wordpress 论坛 添加附件
如何防止php网站被挂马wordpress 论坛 添加附件
- 技术栈
- 2026年03月21日
-
如何防止网站被攻击网站建设 大公司好
如何防止网站被攻击网站建设 大公司好
- 技术栈
- 2026年03月21日






