ESP 无线发射功率配置
本指南介绍如何在 ESP-IDF 中设置 Wi-Fi、BLE、经典蓝牙、Thread 和 Zigbee 的发射功率(TX Power)。
Wi-Fi TX Power
在 ESP-IDF 中,可以通过 esp_wifi_set_max_tx_power 函数来设置 Wi-Fi 的发射功率。发射功率的单位是 0.25 dBm,因此传递的值是实际功率的 4 倍。例如,设定 20 dBm 时,值应为 80。
#include "esp_wifi.h"
void set_wifi_tx_power() {
int8_t max_tx_power = 80; // 20 dBm
esp_wifi_set_max_tx_power(max_tx_power);
}
如果希望使用默认的最大功率,也可以在 menuconfig 中配置最大 Wi-Fi 发射功率。
- menuconfig 路径:
Component config -> PHY -> Max WiFi TX power (dBm)
BLE TX Power
ESP-IDF 中的 BLE 发射功率可以通过 esp_ble_tx_power_set 函数来手动调整。该函数允许为不同的传输类型设置不同的发射功率,例如广播、扫描和连接等模式。不同 ESP 芯片的 BLE 功率级别不一定相同,以 ESP32 为例,BLE 的功率级别范围从 ESP_PWR_LVL_N12 到 ESP_PWR_LVL_P9。
以下示例展示了使用 ESP32 如何将 BLE 的默认发射功率设置为最大 9 dBm:
#include "esp_gap_ble_api.h"
void set_ble_tx_power() {
esp_ble_tx_power_set(ESP_BLE_PWR_TYPE_DEFAULT, ESP_PWR_LVL_P9); // 设置最大 9 dBm 功率
}
ESP32 BLE 发射功率级别举例:
ESP_PWR_LVL_N12: -12 dBm
ESP_PWR_LVL_N9: -9 dBm
ESP_PWR_LVL_N6: -6 dBm
ESP_PWR_LVL_N3: -3 dBm
ESP_PWR_LVL_P0: 0 dBm
ESP_PWR_LVL_P3: 3 dBm
ESP_PWR_LVL_P6: 6 dBm
ESP_PWR_LVL_P9: 9 dBm (最大功率)
部分 BLE 发射功率类型举例:
ESP_BLE_PWR_TYPE_CONN_HDL0:第一个连接的发射功率
ESP_BLE_PWR_TYPE_CONN_HDL1:第二个连接的发射功率
ESP_BLE_PWR_TYPE_ADV:广播的发射功率
ESP_BLE_PWR_TYPE_SCAN:扫描的发射功率
ESP_BLE_PWR_TYPE_DEFAULT:默认的发射功率
一些 ESP 芯片也可以在 menuconfig 中配置最大 BLE 发射功率。
- menuconfig 路径:
Component config → Bluetooth → Controller Options → BLE default Tx power level
此外,对于支持 BLE 的新一代 ESP 芯片(如 ESP32-C2、ESP32-C5、ESP32-C6、ESP32-H2),更推荐使用 esp_ble_tx_power_set_enhanced API 来调整 BLE 的发射功率。
经典蓝牙 TX Power
经典蓝牙的发射功率可以通过 esp_bredr_tx_power_set API 来设置,与 BLE 共用相同的设置方式。在经典蓝牙中,发射功率主要用于 ESP_BT_PWR_TYPE_DEFAULT 模式下。
示例如下:
#include "esp_bt.h"
void set_classic_bt_tx_power() {
esp_bredr_tx_power_set(ESP_PWR_LVL_N0, ESP_PWR_LVL_P3);
}
Thread TX Power
如基于 Thread 开发,那么推荐通过 openthread 的 API otPlatRadioSetTransmitPower 来调整 Thread 的发射功率。
如基于 802.15.4 MAC driver 直接开发,推荐通过 esp_ieee802154_set_txpower 来调整 Thread 的发射功率。
Zigbee TX Power
如基于 Zigbee 开发,推荐通过 esp_zb_set_tx_power 来调整 Zigbee 的发射功率。
注意事项
Wi-Fi 和 BLE 发射功率: 在使用 esp_wifi_set_max_tx_power 和 esp_ble_tx_power_set 调整 Wi-Fi 和 BLE 的发射功率时,可能需要根据应用需求进行平衡,因为它们共用部分硬件资源。
Menuconfig 设置的限制: ESP_PHY_MAX_WIFI_TX_POWER 只能控制 Wi-Fi 的最大发射功率,对 BLE 和经典蓝牙的发射功率没有直接影响。