ESP32C3 BLE 发射功率调整及 RSSI 相关知识整理 - MilkeZhang 的网络笔记

1、BLE 发射功率级别 在当前最新的蓝牙核心规范v5.3 中规定,BLE 发射设备的最大发射功率必须在 0.01 mW (-20 dBm) 和 100 mW (+20 dBm) 之间,并且根据 BLE 设备支持的最大输出功率 Pmax 分为以下四个功率级别功率级别(Power Class) Requirements 功率级1 100 mW (+20 dBm) ≥ Pmax ? 10 m

ESP32C3 BLE 发射功率调整及 RSSI 相关知识整理

ESP32C3 BLE 发射功率调整及 RSSI 相关知识整理

阅读:596  点赞:0   留言:0


1、BLE 发射功率级别 


在当前最新的蓝牙核心规范v5.3 中规定,BLE 发射设备的最大发射功率必须在 0.01 mW (-20 dBm) 和 100 mW (+20 dBm) 之间,并且根据 BLE 设备支持的最大输出功率 Pmax 分为以下四个功率级别

功率级别(Power Class) Requirements
功率级1 100 mW (+20 dBm) ≥ Pmax ? 10 mW (+10 dBm)
功率级1.5 10 mW (+10 dBm) ≥ Pmax ? 2.5 mW (+4 dBm)
功率级2 2.5 mW (+4 dBm) ≥ Pmax ? 1 mW (0 dBm)
功率级3 1 mW (0 dBm) ≥ Pmax ≥ 0.01 mW (-20 dBm)

2、RSSI 与灵敏度
RSSI 全称是Received Signal Strength Indication, 表示为接收的信号强度指示, 单位是 dBm,
是一个考征功率绝对值的值,计算公式为:10lgP(功率值/1mW),
例如发射功率 P为1mW,折算为dBm后为 0dBm,
如果发射功率 P 为 20W,
按dBm单位进行折算后的值应为:

10lg(20W/1mW)=10lg(20000)=10lg2+10lg10+10lg1000=43dBm

蓝牙扫描设备 (如手机,或者成为蓝牙接收机) 扫描或者显示的 RSSI 常为负值,
原因有两点:一是蓝牙发射设备的发射功率小,
有的是功率级3 的蓝牙设备,发射功率电平最高才为 0dbm;
二是路径损耗,主要指从发射机到接收机天线的能量消耗,和路径长度、周围环境、信号干扰都有很大关联,
这个也是信号强度衰减的主要因素 对于接收机灵敏度,在蓝牙核心规范v5.3 中对不同 PHY 有如下规定

PHY Sensitivity(dBm)
LE Uncoded PHYs ≤ -70
LE Coded PHY with S=2 coding ≤ -75
LE Coded PHY with S=8 coding ≤ -82

接收机灵敏度越小,收包的距离就越长,这可以作为评测蓝牙性能的一项指标,
一般可以在蓝牙芯片的 datasheet 中找到,
如 ESP32C3
LE Uncoded 1M PHY 灵敏度 @30.8% PER 典型值是 -97dbm,
LE Uncoded 2M PHY 灵敏度 @30.8% PER 典型值是 -93dbm,
LE Coded PHY with S=2 coding 灵敏度 @30.8% PER 典型值是 -100dbm,
LE Coded PHY with S=8 coding 灵敏度 @30.8% PER 典型值是 -105dbm,
这也可以大致看出 LE Coded PHY 的传输距离要长。

灵敏度 @30.8% PER 的含义 这个和蓝牙测试规范有关,参考BT4.0-RF-PHY.TS.5.0.1规范协议以下一段解释
大致意思是 37字节的有效负载时 368bit ,然后每一个有效负载位都出错率小于0.001 的可能性是 0.692,
反过来误码率就是 0.308 路径损耗与距离的非官方计算公式:path loss = 40 + 25log(d), path loss 标识路径损耗,d标识发射机和接收机的距离。数据统计如下:

路径损耗(path loss) 距离(d)
50dbm       2.5m
60dbm       6.3m
70dbm       16m
80dbm       40m
90dbm       100m
100dbm     250m
110dbm     630m

以上可能是空旷环境下的数据,每个蓝牙设备的硬件结构以及所处传输环境差异较大,当然也并没有统一的计算公式。


3、ESP32C3 上如何设置发射功率
在ESP32C3 datasheet 上,发射功率的可控范围是 –24 ~ 21dBm,
代码中可以通过如下 API 进行设置(esp_ble_tx_power_set)和获取(esp_ble_tx_power_get)


typedef enum {
    ESP_BLE_PWR_TYPE_CONN_HDL0  = 0,            /*!< For connection handle 0 */
    ESP_BLE_PWR_TYPE_CONN_HDL1  = 1,            /*!< For connection handle 1 */
    ESP_BLE_PWR_TYPE_CONN_HDL2  = 2,            /*!< For connection handle 2 */
    ESP_BLE_PWR_TYPE_CONN_HDL3  = 3,            /*!< For connection handle 3 */
    ESP_BLE_PWR_TYPE_CONN_HDL4  = 4,            /*!< For connection handle 4 */
    ESP_BLE_PWR_TYPE_CONN_HDL5  = 5,            /*!< For connection handle 5 */
    ESP_BLE_PWR_TYPE_CONN_HDL6  = 6,            /*!< For connection handle 6 */
    ESP_BLE_PWR_TYPE_CONN_HDL7  = 7,            /*!< For connection handle 7 */
    ESP_BLE_PWR_TYPE_CONN_HDL8  = 8,            /*!< For connection handle 8 */
    ESP_BLE_PWR_TYPE_ADV        = 9,            /*!< For advertising */
    ESP_BLE_PWR_TYPE_SCAN       = 10,           /*!< For scan */
    ESP_BLE_PWR_TYPE_DEFAULT    = 11,           /*!< For default, if not set other, it will use default value */
    ESP_BLE_PWR_TYPE_NUM        = 12,           /*!< TYPE numbers */
} esp_ble_power_type_t;

/**
 * @brief Bluetooth TX power level(index), it's just a index corresponding to power(dbm).
 */
typedef enum {
    ESP_PWR_LVL_N24 = 0,              /*!< Corresponding to -24dbm */
    ESP_PWR_LVL_N21 = 1,              /*!< Corresponding to -21dbm */
    ESP_PWR_LVL_N18 = 2,              /*!< Corresponding to -18dbm */
    ESP_PWR_LVL_N15 = 3,              /*!< Corresponding to -15dbm */
    ESP_PWR_LVL_N12 = 4,              /*!< Corresponding to -12dbm */
    ESP_PWR_LVL_N9  = 5,              /*!< Corresponding to  -9dbm */
    ESP_PWR_LVL_N6  = 6,              /*!< Corresponding to  -6dbm */
    ESP_PWR_LVL_N3  = 7,              /*!< Corresponding to  -3dbm */
    ESP_PWR_LVL_N0  = 8,              /*!< Corresponding to   0dbm */
    ESP_PWR_LVL_P3  = 9,              /*!< Corresponding to  +3dbm */
    ESP_PWR_LVL_P6  = 10,             /*!< Corresponding to  +6dbm */
    ESP_PWR_LVL_P9  = 11,             /*!< Corresponding to  +9dbm */
    ESP_PWR_LVL_P12 = 12,             /*!< Corresponding to  +12dbm */
    ESP_PWR_LVL_P15 = 13,             /*!< Corresponding to  +15dbm */
    ESP_PWR_LVL_P18 = 14,             /*!< Corresponding to  +18dbm */
    ESP_PWR_LVL_P21 = 15,             /*!< Corresponding to  +21dbm */
    ESP_PWR_LVL_INVALID = 0xFF,         /*!< Indicates an invalid value */
} esp_power_level_t;

/**
 * @brief  Set BLE TX power
 *         Connection Tx power should only be set after connection created.
 * @param  power_type : The type of which tx power, could set Advertising/Connection/Default and etc
 * @param  power_level: Power level(index) corresponding to absolute value(dbm)
 * @return              ESP_OK - success, other - failed
 */
esp_err_t esp_ble_tx_power_set(esp_ble_power_type_t power_type, esp_power_level_t power_level);

/**
 * @brief  Get BLE TX power
 *         Connection Tx power should only be get after connection created.
 * @param  power_type : The type of which tx power, could set Advertising/Connection/Default and etc
 * @return             >= 0 - Power level, < 0 - Invalid
 */
esp_power_level_t esp_ble_tx_power_get(esp_ble_power_type_t power_type);
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.



如果 ESP32C3 使用多广播,怎样对每个广播设置不同的发射功率?

使用 esp_ble_gap_ext_adv_set_params 函数设置, 扩展广播参数结构体 esp_ble_gap_ext_adv_params_t 中有 tx_power 选项

/**
* @brief ext adv parameters
*/
typedef struct {
    esp_ble_ext_adv_type_mask_t type;   /*!< ext adv type */
    uint32_t interval_min;              /*!< ext adv minimum interval */
    uint32_t interval_max;              /*!< ext adv maximum interval */
    esp_ble_adv_channel_t channel_map;  /*!< ext adv channel map */
    esp_ble_addr_type_t own_addr_type;  /*!< ext adv own address type */
    esp_ble_addr_type_t peer_addr_type; /*!< ext adv peer address type */
    esp_bd_addr_t peer_addr;            /*!< ext adv peer address */
    esp_ble_adv_filter_t filter_policy; /*!< ext adv filter policy */
    int8_t tx_power;                    /*!< ext adv tx power */
    esp_ble_gap_pri_phy_t primary_phy;  /*!< ext adv primary phy */
    uint8_t max_skip;                   /*!< ext adv maximum skip */
    esp_ble_gap_phy_t secondary_phy;    /*!< ext adv secondary phy */
    uint8_t sid;                        /*!< ext adv sid */
    bool scan_req_notif;                /*!< ext adv scan request event notify */
} esp_ble_gap_ext_adv_params_t;
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.

是通过如下 HCI 命令传输给 Controller 进行处理的

广播中的 tx power 结构数值是以补码形式表示的,比如 数值是 -21dBm, 补码就是 0xeb, 广播中的 tx power 结构数值是其声称的发射功率,也可能是虚假的。


编写于:2023/12/12 21:56:07
发布 IP 属地:广东省深圳市

版权声明

本站内容均来自网络转载或网友提供,如有侵权请及时联系我们删除!本站不承担任何争议和法律责任!


艾金森

每一个童年的梦想都值得用青春去捍卫!




用户地图 心情地图 日记地图 笔记地图 时间轴地图 2023-12-06 Web开发记录【图片功能调整】【测试中】2023年11月30日 星期四 晴 休息 志愿者金台寺铁蛋儿 的日记 2023/11/19 22:57:41兄妹日常2021年5月6日Day 1-2024.1.10兄妹日常2021年4月17日学做饭的第一天兄妹日常2021年7月27日月月鸟的日记 1兄妹日常2021年4月4日Generated by ChatGPT兄妹日常2021年7月17日兄妹日常2021年2月8日2024-02-12 日记【哥斯拉写数学题】100日中考有感2023-11-22 星期三兄妹日常2021年6月6日the Trigonometric Tango2024-03-11 Web开发记录【全站广告默认关闭】yang xie 的日记 2024/02/18 17:31:232024-03-21 Web开发记录【投票新功能上线】兄妹日常2021年5月21日兄妹日常2021年3月8日兄妹日常2021年9月30日周三2023-11-09 网站财务记录【零收入】Generated by ChatGPT2023年12月26日 星期二 晴 心理咨询师 新人学习第2天兄妹日常2021年8月16日2023年12月9日 星期六 晴 悦享喜月湾母婴护理休息兄妹日常2021年5月15日2023年11月15日 星期三 晴 休息 学习社工实务9-13章2023年11月9日 星期四 晴 产康第8课 盆底肌修复兄妹日常2021年3月22日兄妹日常2021年10月6日专业见习(1)2024-03-03 故事【致敬 - 年轮网络日记本】2023年12月4日 星期一 晴 悦享喜月湾母婴护理中心面试身体预警关于知否的两三感言兄妹日常2021年2月20日兄妹日常2021年2月22日key4127 的日记 2024/01/14 23:02:60Generated by ChatGPTGenerated by ChatGPT2023年10月20日 星期五 雨 母婴课程复习 (扶阳罐第4次)2023年12月16日 星期六 阴有小雨 悦享喜月湾母婴护理晚班第6天这两个月去了好多地方兄妹日常2021年6月15日2023年11月20日 星期一 晴 练习母婴实操 社工证法规9-10章兄妹日常2021年9月18日兄妹日常2021年8月13日兄妹日常2021年3月16日addition to2023-11-04 日记【失眠】2023年12月30日 星期六 晴 第9味馄饨店兼职第5天2023年11月22日 星期三 晴 休息 社工证法规13-14章 (扶阳罐第8次)兄妹日常2021年3月11日兄妹日常2021年8月27日兄妹日常2021年10月9日Arya 的日记 2023/12/26 15:46:35兄妹日常2021年3月29日第七周周记4.17 小知识大巩固!2月14日,我的减肥日记jedahdohma 的日记 2024/01/31 14:17:09兄妹日常2021年10月21日2023年11月18日 星期六 晴 休息 社工证法规第3-4章兄妹日常2021年6月3日Birthday PrankMarriage21写给爷爷的信2023年12月7日 星期四 晴 悦享喜月湾母婴护理晚班第3天关于胡适问题的争论,我破防了。芊. 的日记 2024/02/18 18:05:3912262024-02-25 Web开发记录【用户接口拆分,独立社交信息数据】事情不会像我想的那么好,但也不会像我想的那么糟她在睡觉,所以我要小声一些兄妹日常2021年5月30日Generated by ChatGPT4月1日记规则制定(一)2023年12月31日 星期日 晴 第9味馄饨店兼职第6天让手术重新开启一切吧2023-12-07 日记【最近比较焦虑】兄妹日常2021年5月2日兄妹日常2021年6月30日周二任务2023年12月12日 星期二 晴 悦享喜月湾母婴护理白班第3天兄妹日常2021年7月15日2023年11月17日 星期五 晴大风 练母婴实操 社工证法规第1-2章兄妹日常2021年10月20日jedahdohma 的日记 2024/03/18 09:41:172023-11-30 Web开发记录【新功能-通讯录】【未完成】兄妹日常2021年9月22日兄妹日常2021年7月20日兄妹日常2021年10月1日修车我抠出来了!!!【天干】甲简单了解 台湾NCC认证2023120620231227欧盟CE认证之RED无线指令我爱我的国。我爱我的家。标题怎么起。契机。道具灵感Matthew H. Kramer:《菲尼斯式的报应主义》节选翻译ISolidWorks装配体保存成零件方法人间值得。ESP32 IDF的蓝牙广播demo 说明判断题疑难点21-27 压缩与编码【梁博-出现又离开】简谱【用户意见】2024-03-24 【Bug的修复】周处除三害IEC 60335 国际电工委员会制定的关于家用电器安全性的标准【Datasheet】Amlogic A311D AI芯片参数规格低功耗蓝牙广播 说明新生的萌芽 的笔记 2023/10/19 16:57:59CR2032 CR1632 电池规格和性能降压控制器 LM3150 6V至42V宽输入电压范围20231204简单了解 新加坡IDMA认证塔罗被禁了?!混乱的一个月底。判断题疑难点35-42 计算机系统相关操你妈的,你妈了个逼我不怕死亡。只害怕遗忘。八字基本知识Android Studio 快捷键大全刻意的伪装成不经意。哲理ad哲理判断题疑难点66-67 图片音频文件卡牌游戏玩家目的分析不知道是想写日记还是笔记。OC_角色_窃贼小姐我的平行宇宙,是窝在家里的舒适一辈子的底气。无主题。记清明出行。企业总结ESTI EN 300328 无线产品CE认证测试标准【功能介绍】个人信息属性标签【未完成】简单了解 新加坡COC 认证20231218哲理判断题疑难点58-65 数字的表示Android Studio 【SeekBar】基本用法帅还是呆 的笔记 2023/10/26 11:11:18放弃这一次证券股投机,等待3个月之后的机会简单了解 印度WPC认证觉着活着没意思的,推荐一个视频。为什么无线信号(RSSI)是负值【再一次为生在这个家庭而感到幸运】该说不说,必应的圣诞官网做的真不错,我挺喜欢的【Datasheet】地平线 旭日X3芯片判断题疑难点28-34 不常用软件与工具朝鲜宣布废除“9·19南北军事协议”巴以冲突第49天·休战第1天ESP32C3 BLE 发射功率调整及 RSSI 相关知识整理如何获取浏览器IP与城市,并记录存储【2023年可以用,已解决】《健身先健脑》OC_角色_乱象回家 近期啊?20231207【鱼露】调味料是什么《走遍德国》B2 S106阅读翻译练习春天吗。箪食瓢饮。其乐无穷。八字基本知识把脑子重新捡起来。Zachary Hoskins: Fair Play, Political Obligation, and Punishment节选翻译OC_角色_上簇观如何开始论八字触控屏框贴、全贴合、零贴合工艺解析【小故事】QQ群第一个里程碑 - 50人了被破坏的下班心情判断题疑难点1-20 python编程相关C# <summary>注释实现换行好吧判断题疑难点74-78 程序八字基本知识【个人笔记】伪需求识别与过滤熊市末端持股策略,下跌何时结束。判断题疑难点43-57 基本办公软件也许这样也不错。2023.11.3029/3/2024 和妈妈手机里大吵了一架证券短线波段PRD产品需求文档 | 实例撰写指南【非原创】随笔目标为无知道歉,却又羡慕年少。