• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266 измерение RSSI

nikolz

Well-known member
Экспериментирую с сетью на протоколе ESP-NOW.
Любой датчик подключается к сети с помощью бродкаста.
После подключения по ответам и RSSI определяет самый близкий узел сети, к которому и подключается.
Интересует чтение RSSI для любого режима (STA и AP)
Кто что где видел, дайте ссылку.
Спасибо
 

ShatoHuito

New member
Экспериментирую с сетью на протоколе ESP-NOW.
Любой датчик подключается к сети с помощью бродкаста.
После подключения по ответам и RSSI определяет самый близкий узел сети, к которому и подключается.
Интересует чтение RSSI для любого режима (STA и AP)
Кто что где видел, дайте ссылку.
Спасибо
Подскажите пожалуйста, как вы измеряете уровень rssi? У меня не получается ни как отфильтровать promiscuous mode на esp8266, на esp32 получается
 

pvvx

Активный участник сообщества
DeepSeek: Пример чтения RSSI в promiscuous mode на esp8266.
...
C:
#include <ESP8266WiFi.h>
#include <functional>

// Callback-функция для обработки пакетов
void promisc_callback(uint8_t *buf, uint16_t len) {
  if (len > 27) { // Проверка минимальной длины пакета (заголовок 802.11)
    uint8_t *p = buf;
    wifi_promiscuous_pkt_t *ppkt = (wifi_promiscuous_pkt_t*)buf;
    
    // Извлекаем RSSI из структуры пакета
    int rssi = ppkt->rx_ctrl.rssi;
    
    // Преобразуем в dBm (калибровка для ESP8266)
    rssi = -160 + rssi; // Типичная калибровка
    
    // Выводим MAC-адрес источника и RSSI
    Serial.print("Source MAC: ");
    for(int i=16; i<=21; i++) { // Позиции MAC источника в кадре
      Serial.printf("%02X", p[i]);
      if(i<21) Serial.print(":");
    }
    Serial.print(" | RSSI: ");
    Serial.print(rssi);
    Serial.println(" dBm");
  }
}

void setup() {
  Serial.begin(115200);
  Serial.println("\nStarting RSSI Monitor");

  // Переводим WiFi в режим монитора
  wifi_set_opmode(STATION_MODE);
  wifi_set_channel(6); // Выбираем канал (1-14)
  
  // Включаем promiscuous mode
  wifi_promiscuous_enable(0); // Сначала выключаем
  wifi_set_promiscuous_rx_cb(promisc_callback); // Устанавливаем callback
  wifi_promiscuous_enable(1); // Включаем
}

void loop() {
  delay(1000); // Просто ждем
}
 
Сверху Снизу