BaseWifi is the abstract base class for all WiFi implementations in the HardFOC system.
It provides a unified interface for wireless networking operations including station mode (client),
access point mode (hotspot), network scanning, security configuration,
and comprehensive connection management.
β¨ Features
π‘ Station Mode - Connect to existing WiFi networks as a client
π₯ Access Point Mode - Create WiFi hotspots for device configuration
π Network Scanning - Discover available wireless networks
π Security Support - WPA/WPA2/WPA3 and enterprise authentication
π Connection Management - Automatic reconnection and signal monitoring
β‘ Event System - Comprehensive callback system for network events
π§ Power Management - Energy-efficient WiFi operation modes
π Signal Monitoring - Real-time RSSI and connection quality tracking
enumclasshf_wifi_event_t:hf_u8_t{WIFI_EVENT_STA_START=0,// π Station startedWIFI_EVENT_STA_STOP=1,// π Station stoppedWIFI_EVENT_STA_CONNECTED=2,// β Connected to APWIFI_EVENT_STA_DISCONNECTED=3,// β Disconnected from APWIFI_EVENT_STA_GOT_IP=4,// π Got IP addressWIFI_EVENT_STA_LOST_IP=5,// π Lost IP addressWIFI_EVENT_AP_START=6,// π₯ AP startedWIFI_EVENT_AP_STOP=7,// π₯ AP stoppedWIFI_EVENT_AP_STA_CONNECTED=8,// π€ Client connected to APWIFI_EVENT_AP_STA_DISCONNECTED=9,// π€ Client disconnected from APWIFI_EVENT_SCAN_DONE=10// π Network scan completed};
Purpose: π Discover and analyze available WiFi networks Parameters: Scan configuration and result buffers Returns: Available networks with signal strength and security info
#include"inc/mcu/esp32/EspWifi.h"classWiFiClient{private:EspWifiwifi*;boolconnected*;public:WiFiClient():connected*(false){}boolinitialize(){// π Initialize WiFi in station modehf_wifi_err_tresult=wifi*.Initialize(hf_wifi_mode_t::WIFI_MODE_STA);if(result!=hf_wifi_err_t::WIFI_SUCCESS){printf("β Failed to initialize WiFi: %s\n",HfWifiErrToString(result).data());returnfalse;}// π‘ Set up event callback for connection monitoringwifi*.SetEventCallback([this](hf_wifi_event_tevent,void*data){handle_wifi_event(event,data);});printf("β WiFi initialized in station mode\n");returntrue;}boolconnect_to_network(conststd::string&ssid,conststd::string&password){// βοΈ Configure station parametershf_wifi_station_config_tconfig;config.ssid=ssid;config.password=password;config.bssid_set=false;// Don't target specific BSSIDconfig.channel=0;// Auto-select channelconfig.threshold_authmode=hf_wifi_security_t::WIFI_AUTH_WPA2_PSK;config.threshold_rssi=-80;// Minimum -80dBm signal strengthhf_wifi_err_tresult=wifi*.ConfigureStation(config);if(result!=hf_wifi_err_t::WIFI_SUCCESS){printf("β Failed to configure station: %s\n",HfWifiErrToString(result).data());returnfalse;}// π Attempt connection with 30 second timeoutprintf("π Connecting to network '%s'...\n",ssid.c_str());result=wifi*.ConnectStation(30000);if(result==hf_wifi_err_t::WIFI_SUCCESS){printf("β Connected to WiFi network\n");returntrue;}else{printf("β Connection failed: %s\n",HfWifiErrToString(result).data());returnfalse;}}voiddisconnect(){if(connected*){hf_wifi_err_tresult=wifi*.DisconnectStation();if(result==hf_wifi_err_t::WIFI_SUCCESS){printf("β Disconnected from WiFi\n");}else{printf("β Disconnect failed: %s\n",HfWifiErrToString(result).data());}}}voidprint_connection_info(){if(!connected*){printf("β Not connected to WiFi\n");return;}// π Get IP informationhf_wifi_ip_info_tip_info;if(wifi*.GetIPInfo(ip_info)==hf_wifi_err_t::WIFI_SUCCESS){printf("π IP Address: %d.%d.%d.%d\n",(ip_info.ip>>0)&0xFF,(ip_info.ip>>8)&0xFF,(ip_info.ip>>16)&0xFF,(ip_info.ip>>24)&0xFF);printf("π Gateway: %d.%d.%d.%d\n",(ip_info.gateway>>0)&0xFF,(ip_info.gateway>>8)&0xFF,(ip_info.gateway>>16)&0xFF,(ip_info.gateway>>24)&0xFF);}// πΆ Get signal strengthint8_trssi=wifi*.GetRSSI();printf("πΆ Signal Strength: %d dBm",rssi);if(rssi>-50){printf(" (Excellent)\n");}elseif(rssi>-60){printf(" (Good)\n");}elseif(rssi>-70){printf(" (Fair)\n");}else{printf(" (Poor)\n");}// π Get MAC addressuint8_tmac[6];if(wifi*.GetMACAddress(mac)==hf_wifi_err_t::WIFI_SUCCESS){printf("π MAC Address: %02X:%02X:%02X:%02X:%02X:%02X\n",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);}}voidhandle_wifi_event(hf_wifi_event_tevent,void*data){switch(event){casehf_wifi_event_t::WIFI_EVENT_STA_START:printf("π‘ WiFi station started\n");break;casehf_wifi_event_t::WIFI_EVENT_STA_CONNECTED:printf("β Connected to access point\n");break;casehf_wifi_event_t::WIFI_EVENT_STA_GOT_IP:printf("π Got IP address\n");connected*=true;print_connection_info();break;casehf_wifi_event_t::WIFI_EVENT_STA_DISCONNECTED:printf("β Disconnected from access point\n");connected*=false;break;casehf_wifi_event_t::WIFI_EVENT_STA_LOST_IP:printf("π Lost IP address\n");connected*=false;break;default:printf("π‘ WiFi event: %d\n",static_cast<int>(event));break;}}boolis_connected()const{returnconnected*&&wifi*.IsStationConnected();}};voidwifi_client_demo(){WiFiClientclient;if(!client.initialize()){printf("β WiFi client initialization failed\n");return;}// π Connect to your WiFi networkif(client.connect_to_network("YourWiFiSSID","YourPassword")){printf("π Successfully connected to WiFi!\n");// π Monitor connectionfor(inti=0;i<60;i++){// Monitor for 1 minuteif(client.is_connected()){printf("πΆ WiFi connected (check %d/60)\n",i+1);}else{printf("β WiFi disconnected\n");break;}vTaskDelay(pdMS_TO_TICKS(1000));}client.disconnect();}}
classWiFiHotspot{private:EspWifiwifi*;boolap_started*;uint8_tconnected_clients*;public:WiFiHotspot():ap_started*(false),connected_clients*(0){}boolinitialize(){// π Initialize WiFi in AP modehf_wifi_err_tresult=wifi*.Initialize(hf_wifi_mode_t::WIFI_MODE_AP);if(result!=hf_wifi_err_t::WIFI_SUCCESS){printf("β Failed to initialize WiFi AP: %s\n",HfWifiErrToString(result).data());returnfalse;}// π‘ Set up event callback for client monitoringwifi*.SetEventCallback([this](hf_wifi_event_tevent,void*data){handle_ap_event(event,data);});printf("β WiFi initialized in AP mode\n");returntrue;}boolstart_hotspot(conststd::string&ssid,conststd::string&password,uint8_tmax_clients=4){// βοΈ Configure access pointhf_wifi_ap_config_tconfig;config.ssid=ssid;config.password=password;config.ssid_len=0;// Auto-calculate lengthconfig.channel=1;// Channel 1 (2.4GHz)config.authmode=password.empty()?hf_wifi_security_t::WIFI_AUTH_OPEN:hf_wifi_security_t::WIFI_AUTH_WPA2_PSK;config.ssid_hidden=0;// Broadcast SSIDconfig.max_connection=max_clients;config.beacon_interval=100;// 100ms beacon intervalhf_wifi_err_tresult=wifi*.ConfigureAP(config);if(result!=hf_wifi_err_t::WIFI_SUCCESS){printf("β Failed to configure AP: %s\n",HfWifiErrToString(result).data());returnfalse;}// π₯ Start the access pointresult=wifi*.StartAP();if(result==hf_wifi_err_t::WIFI_SUCCESS){printf("π₯ WiFi hotspot '%s' started successfully\n",ssid.c_str());printf("π₯ Maximum clients: %u\n",max_clients);if(!password.empty()){printf("π Security: WPA2-PSK\n");}else{printf("π Security: Open (no password)\n");}returntrue;}else{printf("β Failed to start AP: %s\n",HfWifiErrToString(result).data());returnfalse;}}voidstop_hotspot(){if(ap_started*){hf_wifi_err_tresult=wifi*.StopAP();if(result==hf_wifi_err_t::WIFI_SUCCESS){printf("π₯ WiFi hotspot stopped\n");}else{printf("β Failed to stop hotspot: %s\n",HfWifiErrToString(result).data());}}}voidprint_ap_info(){if(!ap_started*){printf("β Access point not started\n");return;}// π Get AP informationhf_wifi_ap_info_tap_info;if(wifi*.GetAPInfo(ap_info)==hf_wifi_err_t::WIFI_SUCCESS){printf("π‘ AP SSID: %s\n",ap_info.ssid.c_str());printf("π» Channel: %u\n",ap_info.channel);printf("π₯ Connected Clients: %u/%u\n",connected_clients*,ap_info.max_connection);}// π Get IP informationhf_wifi_ip_info_tip_info;if(wifi*.GetIPInfo(ip_info)==hf_wifi_err_t::WIFI_SUCCESS){printf("π AP IP Address: %d.%d.%d.%d\n",(ip_info.ip>>0)&0xFF,(ip_info.ip>>8)&0xFF,(ip_info.ip>>16)&0xFF,(ip_info.ip>>24)&0xFF);}// π Get MAC addressuint8_tmac[6];if(wifi*.GetMACAddress(mac)==hf_wifi_err_t::WIFI_SUCCESS){printf("π AP MAC Address: %02X:%02X:%02X:%02X:%02X:%02X\n",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);}}voidhandle_ap_event(hf_wifi_event_tevent,void*data){switch(event){casehf_wifi_event_t::WIFI_EVENT_AP_START:printf("π₯ Access point started\n");ap_started*=true;print_ap_info();break;casehf_wifi_event_t::WIFI_EVENT_AP_STOP:printf("π₯ Access point stopped\n");ap_started*=false;connected_clients*=0;break;casehf_wifi_event_t::WIFI_EVENT_AP_STA_CONNECTED:connected_clients*++;printf("π€ Client connected (total: %u)\n",connected_clients*);break;casehf_wifi_event_t::WIFI_EVENT_AP_STA_DISCONNECTED:if(connected_clients*>0)connected_clients*--;printf("π€ Client disconnected (total: %u)\n",connected_clients*);break;default:printf("π‘ AP event: %d\n",static_cast<int>(event));break;}}boolis_running()const{returnap_started*&&wifi*.IsAPStarted();}uint8_tget_client_count()const{returnconnected_clients*;}};voidwifi_hotspot_demo(){WiFiHotspothotspot;if(!hotspot.initialize()){printf("β WiFi hotspot initialization failed\n");return;}// π₯ Start hotspot with custom settingsif(hotspot.start_hotspot("HardFOC-Config","hardfoc123",8)){printf("π WiFi hotspot started successfully!\n");// π Monitor hotspot for 5 minutesfor(inti=0;i<300;i++){// 5 minutes = 300 secondsif(hotspot.is_running()){printf("π₯ Hotspot running - %u clients connected (time: %ds)\n",hotspot.get_client_count(),i+1);}else{printf("β Hotspot stopped unexpectedly\n");break;}vTaskDelay(pdMS_TO_TICKS(1000));}hotspot.stop_hotspot();}}