点击上方[物联网思考],选择置顶,第一时间查看物联网分享!
前言:在研发阶段,可以通过仪器测量模块的射频性能,在批量生产的时候,通过仪器效率太低,本文分享一种可以高效验证模块射频性能的办法。
1、操作策略
(1)通过仪器测量标定几个射频性能正常的模块; (2)获取一定距离下标准模块的rssi; (3)获取一定距离下被测量模块的rssi; (4)被测量模块和标准模块比较,同等距离下,如果rssi相差太大,则可以判定被测量模块射频异常。
2、实现思路:
在sta模式下,连接某个特定的ap,扫描已连接的ap,获取rssi。
3、核心代码实现:
代码语言:javascript复制static int8_t get_rssi(void)
{
uint16_t number = 1;
uint16_t ap_count = 0;
wifi_ap_record_t ap_info[1];
wifi_config_t wifi_sta_cfg;
ESP_LOGI(TAG,"start scan");
memset(ap_info, 0, sizeof(ap_info));
if (esp_wifi_get_config(WIFI_IF_STA, &wifi_sta_cfg) != ESP_OK)//获取已连接的ap参数
{
ESP_LOGI(TAG, "esp_wifi_get_config err");
return -90;
}
wifi_scan_config_t scan_config = { 0 };
scan_config.ssid = wifi_sta_cfg.sta.ssid;//限制扫描的ap的ssid
scan_config.bssid = wifi_sta_cfg.sta.bssid;//限制扫描的ap的mac地址
esp_wifi_scan_start(&scan_config, true);//阻塞扫描ap,scan_config为扫描的参数
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));//获取扫描到的ap信息
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count));
//获取扫描到的ap数量,因为限制了ssid和mac,因此最多只会扫描到1个
for (int i = 0; (i < 1) && (i < ap_count); i ) {
ESP_LOGI(TAG, "SSID tt%s", ap_info[i].ssid);
ESP_LOGI(TAG, "RSSI tt%d", ap_info[i].rssi);
ESP_LOGI(TAG, "Channel tt%d", ap_info[i].primary);
ESP_LOGI(TAG, "BSSID: ttx:x:x:x:x:x",
ap_info[i].bssid[0],
ap_info[i].bssid[1],
ap_info[i].bssid[2],
ap_info[i].bssid[3],
ap_info[i].bssid[4],
ap_info[i].bssid[5]);
}
esp_wifi_scan_stop();
//from start to stop need 3210ms
ESP_LOGI(TAG,"stop scanrn");
net_rssi=ap_info[0].rssi;
return ap_info[0].rssi;
}