ESP32--WIFI
文章目錄
- 前言
- 一、WIFI簡(jiǎn)介
- 二、AP模式
- 三、STA模式
- 四、AP-STA 共存模式
- 五、掃描網(wǎng)絡(luò)
- 總結(jié)
前言
使使用WIFI功能基本操作是:建立/連接網(wǎng)絡(luò)
提示:以下是本篇文章正文內(nèi)容
一、WIFI簡(jiǎn)介
Wi-Fi 庫(kù)支持配置及監(jiān)控 ESP32 Wi-Fi 連網(wǎng)功能
站點(diǎn)(STA):連接到Wi-Fi網(wǎng)絡(luò)的設(shè)備
接入點(diǎn)(AP):提供與Wi-Fi的連接,接入點(diǎn)的另一端一般會(huì)連接到有線(xiàn)網(wǎng)絡(luò),接入點(diǎn)通常與路由器集成在一起,以提供從Wi-Fi網(wǎng)絡(luò)到互聯(lián)網(wǎng)的訪(fǎng)問(wèn)
AP會(huì)通過(guò)SSID(Service Set IDentifier) 來(lái)識(shí)別接入的STA設(shè)備該名稱(chēng)實(shí)際上是將設(shè)備(站點(diǎn))連接到Wi-Fi時(shí)選擇的網(wǎng)絡(luò)名稱(chēng)
常用支持配置:
1.基站模式,即STA 模式或 Wi-Fi 客戶(hù)端模式,ESP32 連接到接入點(diǎn) (AP)
2.AP 模式,即 Soft-AP 模式或接入點(diǎn)模式,基站連接到 ESP32
3.AP-STA 共存模式,ESP32 既是接入點(diǎn),同時(shí)又作為基站連接到另外一個(gè)接入點(diǎn)
參考資料:
WIFI使用文檔
二、AP模式
在此模式下,模塊本身相當(dāng)于一個(gè)路由器,其他設(shè)備可鏈接到該模塊發(fā)送的信號(hào),主要應(yīng)用在主從設(shè)備的主機(jī)部分,可以同時(shí)連接到soft-AP的最大站數(shù)可以設(shè)置4,默認(rèn)為4,這種操作模式稱(chēng)為軟接入點(diǎn)(soft-AP)
建立網(wǎng)絡(luò)基本步驟
1.引用WiFi庫(kù) #include <WiFi.h>
2.配置AP模式IP softAPConfig(非必須)
3.啟動(dòng)AP網(wǎng)絡(luò) WiFi.softAP(ssid)
softAPConfig函數(shù)原型
bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet)作用:配置了AP模式下的本地IP、網(wǎng)關(guān)IP、子網(wǎng)掩碼,若沒(méi)有配置,系統(tǒng)會(huì)默認(rèn)配置
softAP函數(shù)原型:
bool WiFiAPClass::softAP(const char* ssid, const char* passphrase, int channel, int ssid_hidden, int max_connection)開(kāi)啟AP模式,需要配置其網(wǎng)絡(luò)名稱(chēng)、連接密碼(可忽略)、WiFi信道、是否隱藏信號(hào)、最大連接數(shù)
ssid:網(wǎng)絡(luò)名稱(chēng)是必須配置項(xiàng)
passphrase:連接密碼如果不配置則默認(rèn)為開(kāi)放性網(wǎng)絡(luò)
channel:WiFi信道的配置,用于避免信號(hào)干擾。(1-13)
ssid_hidden:是否隱藏信號(hào),可以選擇廣播信號(hào)(broadcast )所有人直接看到,也可以隱藏則需要指定查找
max_connection:最大連接數(shù)在默認(rèn)下是4,可以配置范圍1-4
注:除了ssid必須配置,其余都可以忽略
eg:
#include <WiFi.h>void setup() {WiFi.softAP("spft-AP","12345678"); }void loop() { }將程序下載到ESP32可以看到一個(gè)spft-APwifi,輸入密碼12345678可以連接
常用函數(shù)
1.關(guān)閉AP模式:bool WiFiAPClass::softAPdisconnect(bool wifioff=false)
若wifioff為true則還將還原網(wǎng)絡(luò)設(shè)置
2.獲取連接的設(shè)備數(shù):uint8_t WiFiAPClass::softAPgetStationNum()
3.設(shè)置AP的主機(jī)名:bool WiFiAPClass::softAPsetHostname(const char * hostname)
4.查看IP:IPAddress softAPIP();
三、STA模式
STA模式用于使ESP32模塊連接到由接入點(diǎn)(AP)建立的Wi-Fi網(wǎng),在此模式下,模塊相當(dāng)于一個(gè)客戶(hù)端,可以鏈接到其他路由器發(fā)出的WIFI信號(hào),也被稱(chēng)為客戶(hù)端模式,主要應(yīng)用在網(wǎng)絡(luò)通信中
連接網(wǎng)絡(luò)基本步驟
1.引用WiFi庫(kù) #include <WiFi.h>
2.配置STA模式下IP地址 config()(非必須)
3.開(kāi)啟STA模式,連接AP WiFi.begin(ssid, password);
config函數(shù)原型:
bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1, IPAddress dns2)作用:為ESP32分配IP,網(wǎng)關(guān),子網(wǎng),設(shè)置網(wǎng)絡(luò)地址
local_ip :分配ESP32接口的IP地址
gateway :應(yīng)包含用于訪(fǎng)問(wèn)外部網(wǎng)絡(luò)的網(wǎng)關(guān)(路由器)的IP地址
subnet :掩碼,用于定義本地網(wǎng)絡(luò)的IP地址范圍
dns1,dns2:可選參數(shù),用于定義維護(hù)域名目錄的域名服務(wù)器(DNS)的IP地址,并將其轉(zhuǎn)換為IP地址
begin函數(shù)原型
wl_status_t WiFiSTAClass::begin(const char* ssid, const char *passphrase, int32_t channel, const uint8_t* bssid, bool connect)作用:該方法用來(lái)接入網(wǎng)絡(luò)
ssid :要連接的接入點(diǎn)的SSID的字符串
passphrase:到接入點(diǎn)的字符串,長(zhǎng)度至少應(yīng)為8個(gè)字符
channel :信道
bssid :AP的mac地址,此參數(shù)也是可選的
connect:boolean參數(shù),如果設(shè)置為false,將指示模塊僅保存其他參數(shù)而不實(shí)際建立與接入點(diǎn)的連接
常用函數(shù):
1.獲取聯(lián)網(wǎng)狀態(tài)wl_status_t status()
狀態(tài)類(lèi)型:
255:WL_NO_SHIELD,兼容WiFi Shield而設(shè)計(jì)
0:WL_IDLE_STATUS 正在WiFi工作模式間切換
1:WL_NO_SSID_AVAIL 無(wú)法訪(fǎng)問(wèn)設(shè)置的SSID網(wǎng)絡(luò)
2:WL_SCAN_COMPLETED 掃描完成
3:WL_CONNECTED 連接成功
4:WL_CONNECT_FAILED 連接失敗
5:WL_CONNECTION_LOST 丟失連接
6:WL_DISCONNECTED 斷開(kāi)連接
2.是否已接入網(wǎng)絡(luò)bool isConnected()
3.斷開(kāi)網(wǎng)絡(luò) bool disconnect(bool wifioff = false, bool eraseap = false)
若wifioff為true則還將還原網(wǎng)絡(luò)設(shè)置,若eraseap為true則將清除保存于flash中的網(wǎng)絡(luò)參數(shù)
4.獲取模塊地址 IPAddress localIP()
5.設(shè)置斷網(wǎng)自動(dòng)重連接 bool setAutoReconnect(bool autoReconnect)
eg
// WiFi的初始化和連接 void WiFi_Connect() {WiFi.begin("qaq", "123456789"); //要連接的wifi和密碼while (WiFi.status() != WL_CONNECTED){ //這里是阻塞程序,直到連接成功delay(300);Serial.print(".");} }void setup() {Serial.begin(115200); // open the serial port at 115200 bps;delay(100);Serial.print("Connecting.. ");WiFi_Connect();Serial.println("WiFi connected");Serial.println("IP address: "); // 打印本地ip地址Serial.println(WiFi.localIP());Serial.println("dns: "); //打印dns地址Serial.println(WiFi.dnsIP()); }void loop() { }連接wifi,并打印出相應(yīng)的信息
四、AP-STA 共存模式
當(dāng)模塊作為AP時(shí),它同時(shí)又可以作為一個(gè)STA模式存在,WiFi模塊作為AP,可以讓手機(jī)或者計(jì)算機(jī)接入,同時(shí)該模塊又可以作為一個(gè)STA接入到路由器或者上位服務(wù)器進(jìn)行數(shù)據(jù)上傳
五、掃描網(wǎng)絡(luò)
搜索網(wǎng)絡(luò)下所有可連接的AP,然后可進(jìn)行選擇連接
搜索網(wǎng)絡(luò)基本步驟:
1.引用WiFi庫(kù) #include <WiFi.h>
2.開(kāi)啟STA模式
3.開(kāi)啟搜索 scanNetworks()
4.獲取搜索數(shù)據(jù) scanComplete()
scanNetworks函數(shù)原型:
int16_t scanNetworks(bool async = false, bool show_hidden = false, bool passive = false, uint32_t max_ms_per_chan = 300)
async:異步掃描,該值為true時(shí)將啟動(dòng)異步掃描,該方法將不阻塞
show_hidden:是否掃描不廣播的網(wǎng)絡(luò)
passive:影響掃描速度,該值為true時(shí)掃描速度較快
max_ms_per_chan:每通道掃描時(shí)間
scanComplete():異步模式下用于獲取掃描到的網(wǎng)絡(luò)數(shù)量,如果返回值為-1,表示還在進(jìn)行掃描,如果返回值為-1,表示未進(jìn)行掃描或掃描失敗
在同步搜索下scanNetworks函數(shù)會(huì)返回掃描到的網(wǎng)絡(luò)數(shù)量
同步搜索
#include <WiFi.h>void setup() {Serial.begin(115200);Serial.println();WiFi.mode(WIFI_STA); //設(shè)置為STA模式WiFi.disconnect(); //斷開(kāi)當(dāng)前可能的連接delay(100);Serial.println("scan start");int n = WiFi.scanNetworks(); //掃描并返回搜索到的網(wǎng)絡(luò)數(shù)量,該方法默認(rèn)會(huì)阻塞Serial.println("scan done");if (n != 0){Serial.print(n);Serial.println(" networks found");for (int i = 0; i < n; ++i){Serial.println();Serial.print(i + 1);Serial.print(": ");Serial.print(WiFi.SSID(i)); //打印網(wǎng)絡(luò)名稱(chēng)Serial.print(" ");Serial.print(WiFi.RSSI(i)); //打印信號(hào)強(qiáng)度Serial.print(" ");Serial.print((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? "未加密" : "加密"); //打印是否加密delay(10);}} }void loop() { }異步搜索
#include <WiFi.h>void setup() {Serial.begin(115200);Serial.println();WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100);Serial.println("開(kāi)始掃描");WiFi.scanNetworks(true); //啟動(dòng)異步掃描 }void loop() {delay(1000);int n = WiFi.scanComplete(); //獲取掃描狀態(tài)if (n >= 0){Serial.println("掃描完成");for (int i = 0; i < n; ++i){Serial.println();Serial.print(i + 1);Serial.print(": ");Serial.print(WiFi.SSID(i));Serial.print(" ");Serial.print(WiFi.RSSI(i)); Serial.print(" ");Serial.print((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? "未加密" : "加密"); delay(10);}WiFi.scanDelete(); //清除內(nèi)存中的掃描結(jié)果}else if (n == -1){Serial.println("正在掃描");}else if (n == -2){Serial.println("未進(jìn)行掃描");} }總結(jié)
提示:這里對(duì)文章進(jìn)行總結(jié):
總結(jié)
以上是生活随笔為你收集整理的ESP32--WIFI的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql 备份命令行_mysql命令行
- 下一篇: 圣诞树代码,c语言编程,基于graphi