#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); // Просто ждем
}