ESP8266有三種工作模式,分別為:AP,STA,AP混合STA AP,也就是無線接入點,是一個無線網(wǎng)絡的創(chuàng)建者,是網(wǎng)絡的中心節(jié)點。一般家庭或辦公室使用的無線路由器就一個AP。 STA是Station的簡稱,類似于無線終端,STA本身并不接受無線的接入,它可以連接到AP,簡單來說就是和手機連接WIFI熱點的工作狀態(tài)相同,可以連接其它的熱點。 3. AP混合STA 了解了前兩個概念,AP混合STA模式就不難理解了,就是既可以連接到其它的WIFI熱點,也可以讓別的無線終端連接,這兩個過程能同時進行。 二. 切換模式相關(guān)API 1. 設置WIFI模式 WiFi.mode(WIFI_MODE_AP); 模式定義如下: typedef enum { WIFI_MODE_NULL = 0, /**< null mode */ WIFI_MODE_STA, /**< WiFi station mode */ WIFI_MODE_AP, /**< WiFi soft-AP mode */ WIFI_MODE_APSTA, /**< WiFi station + soft-AP mode */ WIFI_MODE_MAX} wifi_mode_t; 2. 獲取WIFI工作模式 WiFi.getMode(); 3. 使能/使能STA模式 WiFi.enableSTA(true); 4. 使能/使能AP模式 WiFi.enableAP(true); 5. 使能/使能Wifi休眠 WiFi.setSleep(true); 僅限STA模式, 默認開啟休眠, 如果對實時性要求高,應關(guān)閉休眠 三. AP熱點 1. WIFI AP熱點建立 WiFisoftAP() bool WiFiAPClass::softAP(const char *ssid, const char *passphrase = (const char *)__null, int channel = 1, int ssid_hidden = 0, int max_connection = 4)功能:建立AP熱點 參數(shù):ssid – WIFI名稱SSID (max 63 char).passphrase – WIFI密碼(for WPA2 min 8 char, for open use NULL)channel – WiFi 信道, 1 - 13.(默認1)ssid_hidden – 是否隱藏WIFI名 (0 = broadcast SSID, 1 = hide SSID) 默認0,不隱藏 max_connection – 最大可連接數(shù), 1 - 4. 默認4 2. 配置AP 熱點 WiFi.softAPConfig(); bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet)功能: 配置AP 熱點參數(shù):local_ip – 本地IP 192.168.4.1 gateway – 網(wǎng)關(guān)IP 192.168.4.1 subnet – 子網(wǎng)掩碼 255.255.255.0 3. 斷開wifi WiFi.disconnect(); bool WiFiSTAClass::disconnect(bool wifioff = false, bool eraseap = false)功能: 斷開AP熱點 參數(shù):wifioff : 為true則還將關(guān)閉網(wǎng)絡功能, 默認false eraseap : 為true則清空AP熱點配置信息, 默認false 返回:返回wlan狀態(tài)碼 4. 一些獲取AP熱點信息的API #include Serial.begin(115200); WiFi.softAP('ESP_AP', '12345678');}void loop(){ Serial.print('主機名:'); Serial.println(WiFi.softAPgetHostname()); Serial.print('主機IP:'); Serial.println(WiFi.softAPIP()); Serial.print('主機IPV6:'); Serial.println(WiFi.softAPIPv6()); Serial.print('主機SSID:'); Serial.println(WiFi.SSID()); Serial.print('主機廣播IP:'); Serial.println(WiFi.softAPBroadcastIP()); Serial.print('主機mac地址:'); Serial.println(WiFi.softAPmacAddress()); Serial.print('主機連接個數(shù):'); Serial.println(WiFi.softAPgetStationNum()); Serial.print('主機網(wǎng)絡ID:'); Serial.println(WiFi.softAPNetworkID()); Serial.print('主機狀態(tài):'); Serial.println(WiFi.status()); delay(1000);} 5. 設置主機名稱 WiFi.softAPsetHostname('ESP_xiongba'); bool WiFiAPClass::softAPsetHostname(const char *hostname)Set the softAP interface Host name.參數(shù):hostname – pointer to const string 返回:true on success 四. STA模式 1. 開始wifi連接 WiFi.begin() wl_status_t WiFiSTAClass::begin(const char *ssid, const char *passphrase = (const char *)__null, int32_t channel = 0, const uint8_t *bssid = (const uint8_t *)__null, bool connect = true)還有 2 個重載 啟動Wifi連接如果設置了密碼短語,將自動選擇最安全的支持模式 參數(shù):ssid – WIFI名, const char* Pointer to the SSID string.passphrase – 密碼, const char * Optional. Passphrase. Valid characters in a passphrase must be between ASCII 32-126 (decimal).channel – (AP的通道, 可選參數(shù))Optional. Channel of AP bssid – BSSID是指站點的MAC地址(可選參數(shù)) uint8_t[6] Optional. BSSID / MAC of AP connect – (是否連接此WIFI, 可選參數(shù))Optional. call connect WiFi.begin('anny', '20141208'); while (!WiFi.isConnected()) { delay(500); Serial.print('.'); } Serial.println('WIFI連接成功!'); 2. wifi配置 bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0, IPAddress dns2 = (uint32_t)0)Change IP configuration settings disabling the dhcp client 參數(shù):local_ip – 當?shù)豂P, Static ip configuration gateway – 網(wǎng)關(guān), Static gateway configuration subnet – 子網(wǎng)掩碼, Static Subnet mask dns1 – DNS服務器1, Static DNS server 1dns2 – DNS服務器2, Static DNS server 2 3. 關(guān)閉wifi連接 用法和AP的disconnect一樣 bool WiFiSTAClass::disconnect(bool wifioff = false, bool eraseap = false)Disconnect from the network 參數(shù):wifioff 返回:one value of wl_status_t enum 4. 其他一些獲取WIFI信息的API #include Serial.begin(115200); // WiFi.softAP('ESP_AP', '12345678'); // WiFi.softAPsetHostname('ESP_xiongba'); WiFi.begin('anny', '20141208'); WiFi.setAutoReconnect(true);}void loop(){ Serial.print('是否連接:'); Serial.println(WiFi.isConnected()); Serial.print('本地IP:'); Serial.println(WiFi.localIP()); Serial.print('本地IPv6:'); Serial.println(WiFi.localIPv6()); Serial.print('mac地址:'); Serial.println(WiFi.macAddress()); Serial.print('網(wǎng)絡ID:'); Serial.println(WiFi.networkID()); Serial.print('休息:'); Serial.println(WiFi.getSleep()); Serial.print('獲取狀態(tài)嗎:'); Serial.println(WiFi.getStatusBits()); Serial.print('getTxPower:'); Serial.println(WiFi.getTxPower()); Serial.print('是否自動連接:'); Serial.println(WiFi.getAutoConnect()); Serial.print('是否自動重連:'); Serial.println(WiFi.getAutoReconnect()); Serial.print('獲取模式:'); Serial.println(WiFi.getMode()); Serial.print('獲取主機名:'); Serial.println(WiFi.getHostname()); Serial.print('獲取網(wǎng)關(guān)IP:'); Serial.println(WiFi.gatewayIP()); Serial.print('dnsIP:'); Serial.println(WiFi.dnsIP()); Serial.print('狀態(tài):'); Serial.println(WiFi.status()); delay(1000);} 連接瞬間的狀態(tài)變化 關(guān)于狀態(tài)碼, 請看下面解釋: 5. 設置自動連接 bool WiFiSTAClass::setAutoReCoennect(bool autoConnect)Setting the ESP32 station to connect to the AP (which is recorded)automatically or not when powered on. Enable auto-connect by default.參數(shù):autoConnect – bool 返回:if saved 6. 設置自動重連 設置WIFI斷開后是否自動嘗試重連 bool WiFiSTAClass::setAutoReconnect(bool autoReconnect) 五. 掃描WIFI 1. 掃描WIFI,返回掃描數(shù)量 這個功能默認在阻塞模式下運行,程序會掃描WIFI,期間什么事情都做不了, 可以通過參數(shù)設置改為異步模式. int16_t WiFiScanClass::scanNetworks(bool async = false, bool show_hidden = false, bool passive = false, uint32_t max_ms_per_chan = 300U)Start scan WiFi networks available 參數(shù):async – run in async mode show_hidden – show hidden networks 返回:Number of discovered networks 只返回了掃描到的WIFI的數(shù)量, 那結(jié)果怎么得到? 原來他已經(jīng)將掃描到的WIFI存入了WIFI單例對應的數(shù)組中. 比如 SSID,都存入了 WiFi.SSID中,可以通過索引值遍歷獲取. 其他屬性亦然. 2. 掃描連接WIFI(同步方式) #include Serial.begin(115200); WiFi.mode(WIFI_MODE_STA); WiFi.disconnect(); //斷開可能的連接 delay(100); Serial.println('開始掃描WIFI:'); int n = WiFi.scanNetworks(); if (n) { Serial.print('掃描到'); Serial.print(n); Serial.println('個WIFI'); for (size_t i = 0; i < n; i++) { Serial.print('WiFi的名稱(SSID):'); Serial.println(WiFi.SSID(i)); Serial.print('WiFi的信號強度(RSSI):'); Serial.println(WiFi.RSSI(i)); Serial.print('WiFi加密與否:'); Serial.println(WiFi.encryptionType(i) == WIFI_AUTH_OPEN ? '未加密' : '加密'); if (WiFi.SSID(i) == 'anny') { ssid = WiFi.SSID(i); password = '20141208'; } } } else { Serial.println('沒掃描到WIFI'); } WiFi.begin(ssid.c_str(), password.c_str()); while (!WiFi.isConnected()) { Serial.print('.'); } Serial.println('連接成功');}void loop(){} 3. 異步模式時,獲取掃描完成信息 WiFi.scanComplete(); int16_t WiFiScanClass::scanComplete()called to get the scan state in Async mode 返回:scan result or status -1 if scan not fin -2 if scan not triggered 如果沒用掃描完成, 則返回-1 , 如果根本沒在掃描,返回-2 如果完成了掃描,返回掃描結(jié)果 4. 清除現(xiàn)有的掃描結(jié)果 WiFi.scanDelete(); 5. 掃描連接WIFI(異步) 采用異步掃描方式, 每隔0.5秒詢問一下WiFi.scanComplete();判斷是否掃描完畢. 如果掃描完畢,置標志位,停定時器. 觸發(fā)連接程序, 連接完成后 #include if (!WiFi.isConnected()) { int wifiScanStatus = WiFi.scanComplete(); switch (wifiScanStatus) { case -1: Serial.println('掃描中...'); break; case -2: Serial.println('未進行掃描...'); break; default: Serial.println('掃描完成'); for (size_t i = 0; i < wifiScanStatus; i++) { Serial.print('WiFi的名稱(SSID):'); Serial.println(WiFi.SSID(i)); Serial.print('WiFi的信號強度(RSSI):'); Serial.println(WiFi.RSSI(i)); Serial.print('WiFi加密與否:'); Serial.println(WiFi.encryptionType(i) == WIFI_AUTH_OPEN ? '未加密' : '加密'); if (WiFi.SSID(i) == 'anny') { ssid = WiFi.SSID(i); password = '20141208'; }; } WiFi.scanDelete(); t1.detach(); break; } }}void connectAnny(){ WiFi.begin(); while (!WiFi.isConnected()) { Serial.print('.'); } Serial.println('連接成功');}void setup(){ Serial.begin(115200); WiFi.mode(WIFI_MODE_STA); WiFi.disconnect(); //斷開可能的連接 delay(100); Serial.println('開始掃描WIFI:'); WiFi.scanNetworks(true); t1.attach(0.5, aysncScanHandler);}void loop(){ if (!WiFi.isConnected()) { if (ssid == 'anny') { Serial.println(ssid); connectAnny(); } }} 智能配網(wǎng)這種快速連接方式,相對于 AP 模式連接簡化操作,更加貼近于市場 1、手機連上 WiFi,打開智能硬件指定 APP 軟件,進入配置界面,輸入手機所在 WiFi 密碼,請求配網(wǎng) TOKEN一. WiFi的STA和AP模式指什么?
1. AP
2. STA
六. 智能配網(wǎng)
1. 什么是智能配網(wǎng)
2、智能硬件開啟混雜模式監(jiān)聽所有網(wǎng)絡數(shù)據(jù)包
3、手機通過廣播、組播循環(huán)發(fā)送 ssid/password/token
4、硬件設備通過 UDP 包(長度)獲取配置信息捕捉到 ssid/password/token,報文后解碼,得到正確的 SSID 和密碼,然后主動連接指定 SSID 的路由完成連接。
上一篇:玩轉(zhuǎn) ESP32 + Arduino (十一) EEPROM NTP對時 藍牙透傳
下一篇:玩轉(zhuǎn) ESP32 + Arduino (八) U8G2驅(qū)動OLED
推薦閱讀最新更新時間:2025-04-11 09:03



設計資源 培訓 開發(fā)板 精華推薦
- 迅為恩智浦IMX6Q開發(fā)板Buildroot系統(tǒng)wifi測試
- 迅為imx6ull開發(fā)板Linux I2C驅(qū)動實驗-應用程序與I2C通信
- 迅為恩智浦IMX6Q開發(fā)板系統(tǒng)固件TF卡燒寫
- 迅為IMX6ULL開發(fā)板Linux驅(qū)動初探-最簡單的設備驅(qū)動-helloworld
- 迅為imx6ull開發(fā)板移植Debian文件系統(tǒng)
- 迅為imx6ull開發(fā)板Ubuntu文件系統(tǒng)測試
- 迅為imx6開發(fā)板QT系統(tǒng)移植FFmpeg-編譯FFmpeg
- 迅為IMX6ULL開發(fā)板Buildroot文件系統(tǒng)構(gòu)建-配置Busybox
- 迅為imx6開發(fā)板QT系統(tǒng)移植FFmpeg-編譯x264
- LT3091HT7 500mA LED 驅(qū)動器的典型應用,帶接地 LED 接線片(散熱器)
- 雙路高速運算放大器評估板采用 16 引腳 3 mm + 3 mm LFCSP 封裝
- 具有 5V 輸出的 LT1076HVIT 正負轉(zhuǎn)換器的典型應用
- MIC2027-2 Quad USB 配電開關(guān)的典型應用
- LTC2927,雙電源跟蹤應用
- MIC2548A-1YM 可編程限流高邊開關(guān)的典型應用
- LTC4367IMS8 用于滯后調(diào)節(jié)的過壓電源控制器的典型應用
- LT3973HMSE-5 1.8V 降壓轉(zhuǎn)換器的典型應用
- 射燈改造計劃
- LTC4368HMS-2 100V UV/OV 和具有雙向斷路器的反向保護控制器的典型應用電路
- 芯馳科技X9SP:單芯片艙泊一體方案技術(shù)解析
- 廣汽發(fā)布人形機器人核心部件,計劃年內(nèi)小批量生產(chǎn)
- 汽車圈這場AI生死戰(zhàn),如何讀懂?
- 降低研發(fā)門檻!具身機器人時空智能三體套件免費開放
- 智能駕駛:當技術(shù)狂奔撞上安全圍墻
- 超快充能否讓固態(tài)電池變成雞肋,提升充電速度能實現(xiàn)彎道超車嗎?
- 【行業(yè)數(shù)據(jù)】為什么BMW在第六代車型上選用大圓柱電池?
- 我國固態(tài)電池相關(guān)專利申請量已達1.3萬項
- 工信部發(fā)布2025年標準工作要點:全固態(tài)電池標準體系建設加速
- “鋰王”固態(tài)電池獲重大突破!400Wh/kg級產(chǎn)品開啟商業(yè)化沖刺