1#include "esp_wifi_client.hpp"
8#include "esp_netif_ip_addr.h"
15ESP32WifiClient::ESP32WifiClient()
20 esp_event_loop_create_default();
21 netif_ = esp_netif_create_default_wifi_sta();
23 wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
26 is_initialized_ =
true;
30ESP32WifiClient::~ESP32WifiClient()
42 esp_wifi_set_mode(WIFI_MODE_STA);
46 esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_CONNECTED, &EventHandler,
this);
47 esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_DISCONNECTED, &EventHandler,
49 esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &EventHandler,
this);
50 esp_event_handler_register(IP_EVENT, IP_EVENT_STA_LOST_IP, &EventHandler,
this);
68 wifi_config_t wifi_config{};
69 std::strncpy(
reinterpret_cast<char*
>(wifi_config.sta.ssid), config.
ssid.c_str(),
70 sizeof(wifi_config.sta.ssid));
71 std::strncpy(
reinterpret_cast<char*
>(wifi_config.sta.password), config.
password.c_str(),
72 sizeof(wifi_config.sta.password));
73 esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
76 while (semaphore_.
Wait(0) == ErrorCode::OK)
105 while (semaphore_.
Wait(0) == ErrorCode::OK)
108 esp_wifi_disconnect();
119 wifi_scan_config_t scan_config = {};
120 if (esp_wifi_scan_start(&scan_config,
true) != ESP_OK)
126 esp_wifi_scan_get_ap_num(&ap_num);
128 std::vector<wifi_ap_record_t> ap_records(ap_num);
129 if (esp_wifi_scan_get_ap_records(&ap_num, ap_records.data()) != ESP_OK)
135 for (
const auto& record : ap_records)
138 r.
ssid =
reinterpret_cast<const char*
>(record.ssid);
139 r.
rssi = record.rssi;
143 results.push_back(r);
149void ESP32WifiClient::EventHandler(
void* arg, esp_event_base_t event_base,
150 int32_t event_id,
void* event_data)
154 if (event_base == WIFI_EVENT)
158 case WIFI_EVENT_STA_CONNECTED:
159 self->connected_ =
true;
160 self->semaphore_.Post();
162 case WIFI_EVENT_STA_DISCONNECTED:
163 self->connected_ =
false;
164 self->semaphore_.Post();
171 if (event_base == IP_EVENT)
175 case IP_EVENT_STA_GOT_IP:
177 ip_event_got_ip_t*
event =
reinterpret_cast<ip_event_got_ip_t*
>(event_data);
178 self->got_ip_ =
true;
179 esp_ip4addr_ntoa(&event->ip_info.ip, self->ip_str_,
sizeof(self->ip_str_));
180 self->semaphore_.Post();
183 case IP_EVENT_STA_LOST_IP:
185 self->got_ip_ =
false;
194 if (!connected_)
return -127;
196 wifi_ap_record_t ap_info;
197 if (esp_wifi_sta_get_ap_info(&ap_info) == ESP_OK)
WifiError Connect(const Config &config) override
连接到 WiFi 网络 / Connect to a WiFi network
WifiError Disable() override
禁用 WiFi 模块 / Disable the WiFi module
int GetRSSI() const override
获取当前 WiFi 信号强度 / Get the current WiFi signal strength
WifiError Disconnect() override
断开当前 WiFi 连接 / Disconnect from the current WiFi connection
bool IsConnected() const override
检查是否已连接 / Check if currently connected
WifiError Scan(std::vector< ScanResult > &results) override
扫描可用 WiFi 网络 / Scan for available WiFi networks
const char * GetIPAddress() const override
获取当前 IP 地址 / Get the current IP address
WifiError Enable() override
启用 WiFi 模块 / Enable the WiFi module
ErrorCode Wait(uint32_t timeout=UINT32_MAX)
等待(减少)信号量 Waits (decrements) the semaphore
@ WPA2_PSK
WPA2-PSK / WPA2-PSK.
@ UNKNOWN
未知类型 / Unknown type
@ OPEN
开放网络 / Open network
WifiError
WiFi 错误码枚举 / Enumeration of WiFi error codes.
@ DHCP_FAILED
DHCP 获取失败 / DHCP acquisition failed.
@ SCAN_FAILED
扫描失败 / Scan failed
@ ALREADY_ENABLED
已启用 / Already enabled
@ NOT_ENABLED
未启用 / Not enabled
@ CONNECTION_TIMEOUT
连接超时 / Connection timeout
LibXR Color Control Library / LibXR终端颜色控制库
WiFi 连接配置 / WiFi connection configuration.
std::string password
密码 / Password
std::string ssid
SSID 名称 / SSID name.
WiFi 扫描结果 / WiFi scan result.
std::string ssid
发现的 SSID / Detected SSID
int rssi
信号强度 / Signal strength (RSSI)
Security security
安全类型 / Security type