我正在开发一个基于 ESP32 平台的项目。目的是计算该区域中 MAC 地址的数量,并通过 WiFi 传输此信息(使用 http POST 请求)。
第一个任务是通过嗅探 WIFI 数据包并收集包含的地址来实现的,如下例所示:https ://blog.podkalicki.com/esp32-wifi-sniffer/ 我相信“嗅探”数据包的代码将 ESP 设置为在混杂模式下运行,因此我无法再连接到任何 AP。
我尝试了几种解决方案,首先从定时器中断开始。然而,这种方法总是导致核心恐慌和芯片重置。我还了解到我可以使用 RTOS 在 CPU 的两个内核上并行运行不同的任务,但这无助于解决问题。
void wifi_sniffer_packet_handler(void* buff, wifi_promiscuous_pkt_type_t type)
{
if (type != WIFI_PKT_MGMT)//aggiungere filtro su RSSI a questa altezza.
return;
const wifi_promiscuous_pkt_t *ppkt = (wifi_promiscuous_pkt_t *)buff;
const wifi_ieee80211_packet_t *ipkt = (wifi_ieee80211_packet_t *)ppkt->payload;
const wifi_ieee80211_mac_hdr_t *hdr = &ipkt->hdr;
//some analysis and then print the MAC address
}
void setup() {
Serial.begin(115200);
timer = timerBegin(0, 80, true);
timerAttachInterrupt(timer, &chUpdate, true);
timerAlarmWrite(timer, 1000000, true);//timer, arr_val, reload=true
delay(4000);
wifi_sniffer_init();
timerAlarmEnable(timer);
}
// the loop function runs over and over again forever
void loop() {
//Serial.print("inside loop");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Establishing connection to WiFi..");
}
Serial.println("Connected to network");
}
我还注意到循环中的代码卡在了 while 中,并且每次运行数据包处理程序时都会重新启动(我从来没有看到“已连接到网络”,但我看到“正在建立与 WiFi 的连接..”几次.
任何人都可以向我解释发生了什么?有没有不同的方法来实现这个结果?谢谢你。