<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 老宇哥帶你玩轉 ESP32:13 終于到WiFi功能的使用了

老宇哥帶你玩轉 ESP32:13 終于到WiFi功能的使用了

發(fā)布人:芯片之大家 時(shí)間:2023-07-02 來(lái)源:工程師 發(fā)布文章
image.png


今天我們來(lái)說(shuō)說(shuō)ESP32 的WiFi。

ESP32的WiFi

我們之所以使用ESP32做一些小項目,最重要的就是看中了ESP32的WiFi功能,ESP32相當于一個(gè)強大的單片機+無(wú)線(xiàn)WiFi+藍牙多合一的一個(gè)芯片,芯片有了WiFi,它就不再孤獨寂寞,就可以與外界通信,這就是它區別于常規MCU最大的特點(diǎn),就像2G手機跟4G手機的區別,4G手機能實(shí)現很多2G手機時(shí)代渴望的功能。

WiFi就是一種無(wú)線(xiàn)通訊技術(shù),生活中接觸最多的就是電腦跟手機通過(guò)路由器的WiFi信號上網(wǎng),說(shuō)白了其實(shí)就是一種射頻信號,跟我們早期接觸的315MHz、433MHz射頻通信,藍牙,Zigbee等一樣,WiFi工作于2.4GHz或者5Ghz的頻率,今天我們先學(xué)習一下WiFi的基本功能。

AP模式

AP模式就是讓ESP32建立一個(gè)網(wǎng)絡(luò ),可以發(fā)出WiFi信號來(lái)讓其他設備搜索到,就跟路由器發(fā)出信號來(lái)類(lèi)似,只需要一行代碼,我們就可以建立一個(gè)我們自己命名的無(wú)線(xiàn)網(wǎng)絡(luò )了,期待一下。

image.png


#include <WiFi.h>void setup(){
  WiFi.softAP("ESP32_WiFi");
}void loop(){
}

上面這一行代碼,我們就建立了一個(gè)名為ESP32_WiFi的,不加密的無(wú)線(xiàn)網(wǎng)絡(luò )了,我們將代碼燒錄進(jìn)去,然后打開(kāi)手機WiFi連接界面,就可以看到這個(gè)網(wǎng)絡(luò )并進(jìn)行連接了。

image.png


常用函數

我們打開(kāi)WiFiAP.h這個(gè)頭文件就可以看到AP模式的相關(guān)函數了,這里分享一些常用的,有一些概念比如子網(wǎng)掩碼,網(wǎng)關(guān)地址等不清楚的,大家可以自行上網(wǎng)查看。

該函數建立并啟動(dòng)AP網(wǎng)絡(luò )

bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0, int max_connection = 4);
  • ssid,AP網(wǎng)絡(luò )的名字,最大不超過(guò)32字節;

  • passphrase,密碼,8-63字節,不設置就是不加密;

  • channel,WiFi網(wǎng)絡(luò )信道,1-13可選;

  • ssid_hidden,網(wǎng)絡(luò )名字是否隱藏;

  • ssid_hidden,最大接入數,1-4可選。

本地地址等設置

bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);
  • local_ip,本地網(wǎng)絡(luò )地址,比如默認為192.168.4.1;

  • gateway,網(wǎng)關(guān)地址, 192.168.4.1;

  • subnet,子網(wǎng)掩碼,255.255.255.0。

連接數量,返回連接到本AP的客戶(hù)端的數量

uint8_t softAPgetStationNum();

設置主機名字,比如設置為"CHIPHOME"

bool softAPsetHostname(const char * hostname);

查詢(xún)主機的MAC地址,函數返回主機的MAC地址

String softAPmacAddress(void);

代碼測試

下面我們寫(xiě)一個(gè)小程序,測試下上面幾個(gè)函數的功能:

#include <WiFi.h>const char *ssid = "ESP32_WiFi";const char *password = "12345678";IPAddress local_IP(192,168,4,1);IPAddress gateway(192,168,4,1);IPAddress subnet(255,255,255,0);void setup(){
  Serial.begin(115200);
  Serial.println();

  WiFi.mode(WIFI_AP); // AP模式

  WiFi.softAPConfig(local_IP, gateway, subnet); // 設置AP地址
  WiFi.softAP(ssid, password);                  // 啟動(dòng)AP成功返回1

  Serial.print("IP address: ");
  Serial.println(WiFi.softAPIP()); // 打印IP地址

  WiFi.softAPsetHostname("CHIPHOME"); // 設置主機名
  Serial.print("Hostname: ");
  Serial.println(WiFi.softAPgetHostname()); // 打印主機名

  Serial.print("MAC Address: ");
  Serial.println(WiFi.softAPmacAddress()); // 打印MAC地址  }void loop(){ 
  Serial.print("當前連接客戶(hù)端數: ");
  Serial.println(WiFi.softAPgetStationNum()); // 打印客戶(hù)端連接數量
  delay(5000);
}

將上面代碼編譯燒錄之后,我們可以在串口監視器中看到如下打?。?/span>

image.png


代碼中如預期的打印了了IP地址,主機名,MAC地址,連接數量,OK,AP模式相關(guān)我們就介紹到這里。

STA模式

STA模式就是讓ESP32當做客戶(hù)端,去連接AP主機,就好比手機去連接路由器一樣。

image.png


#include <WiFi.h>const char *ssid = "********"; // 網(wǎng)絡(luò )名稱(chēng)const char *password = "********"; // 網(wǎng)絡(luò )密碼void setup(){
 WiFi.begin(ssid, password);
}void loop(){
}

上面這一行代碼,我們就將ESP32設置為STA模式,ssid跟password填寫(xiě)我們要連接的WiFi的賬號密碼,就可以連接上了。

常用函數

我們打開(kāi)WiFiSTA.h這個(gè)頭文件就可以看到STA模式的相關(guān)函數了,全部的請查閱SDK,下面是一些常用的一些:

該函數用于接入WiFi網(wǎng)絡(luò ),參數同上面的AP模式基本一樣,一般就設置第一個(gè)跟第二個(gè)參數,其他選擇默認

wl_status_t begin(const char* ssid, const char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);wl_status_t begin(char* ssid, char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);

設置網(wǎng)絡(luò )地址,包括本機IP,網(wǎng)關(guān)地址,子網(wǎng)掩碼,DNS

bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000);

聯(lián)網(wǎng)狀態(tài)

static wl_status_t status();

返回不同的枚舉值代表不同的狀態(tài):

  • 0:WL_IDLE_STATUS正在WiFi工作模式間切換;

  • 1:WL_NO_SSID_AVAIL無(wú)法訪(fǎng)問(wèn)設置的SSID網(wǎng)絡(luò );

  • 2:WL_SCAN_COMPLETED掃描完成;

  • 3:WL_CONNECTED連接成功;

  • 4:WL_CONNECT_FAILED連接失??;

  • 5:WL_CONNECTION_LOST丟失連接;

  • 6:WL_DISCONNECTED斷開(kāi)連接;

模塊IP地址

IPAddress localIP()

模塊子網(wǎng)掩碼

IPAddress subnetMask()

模塊網(wǎng)關(guān)地址

IPAddress gatewayIP()

模塊MAC地址

const char * getHostname()

代碼測試

下面我們寫(xiě)一個(gè)小程序,測試下上面幾個(gè)函數的功能:

#include <WiFi.h>const char *ssid = "*********";  //改為你自己的WIFI賬號const char *password = "********"; //改為你自己的WIFI密碼void setup(){
  Serial.begin(115200);
  Serial.println();

  WiFi.mode(WIFI_STA); //設置工作在STA模式

  WiFi.begin(ssid, password); //連接WiFi

  while (WiFi.status() != WL_CONNECTED ){  //等待網(wǎng)絡(luò )連接成功
    delay(1000);
    Serial.print(".");
  }
  Serial.println("WiFi Connected!");

  Serial.print("IP address: ");
  Serial.println(WiFi.localIP()); //IP地址

  Serial.print("subnetMask: ");
  Serial.println(WiFi.subnetMask()); //子網(wǎng)掩碼地址

  Serial.print("gateway: ");
  Serial.println(WiFi.gatewayIP()); //網(wǎng)關(guān)地址

  Serial.print("MAC Address: ");
  Serial.println(WiFi.macAddress()); //MAC地址}

void loop(){
}

將上面代碼編譯燒錄之后,我們可以在串口監視器中看到如下打?。?/span>

image.png


代碼中如預期的打印了了IP地址,子網(wǎng)掩碼,網(wǎng)關(guān)地址,MAC地址,既然ESP32連接上路由器了,那么我們在路由器的設備列表頁(yè)面是不是也能看到ESP32:

image.png


異步搜索

有一些情況,我們需要知道當前空間中存在哪些WiFi信號,比如在WiFi配網(wǎng)的時(shí)候,下面我們搜索一下當前空間中的WiFi信息,然后打印出來(lái)。

image.png


常用函數

我們打開(kāi)WiFiScan.h這個(gè)頭文件就可以看到Scan的相關(guān)函數了,全部的請查閱SDK,下面是一些常用的一些:

該函數用于掃描啟動(dòng)

int16_t scanNetworks(bool async = false, bool show_hidden = false, bool passive = false, uint32_t max_ms_per_chan = 300, uint8_t channel = 0);
  • async,異步掃描,設置為true則不阻塞;

  • show_hidden,是否掃描不廣播的網(wǎng)絡(luò );

  • passive,掃描速度;

  • max_ms_per_chan,每個(gè)通道的掃描時(shí)間;

  • channel,通道選擇。

該函數用于判斷掃描是否完成

int16_t scanComplete();
  • -1,掃描還沒(méi)結束;

  • -2,掃描還沒(méi)觸發(fā);

  • n,掃描到的WiFi信號個(gè)數;

刪除內存中的掃描數據

void scanDelete();

掃描到的網(wǎng)絡(luò )名稱(chēng)

String SSID(uint8_t networkItem);

掃描到的網(wǎng)絡(luò )加密類(lèi)型

wifi_auth_mode_t encryptionType(uint8_t networkItem)

掃描到的網(wǎng)絡(luò )信號強度

int32_t RSSI(uint8_t networkItem)

掃描到的網(wǎng)絡(luò )信道號

int32_t channel(uint8_t networkItem)

代碼測試

下面我們寫(xiě)一個(gè)小程序,異步掃描我們空間中當前存在的WiFi信號并打印出來(lái):

#include <WiFi.h>

void setup(){
  Serial.begin(115200);
  Serial.println();

  WiFi.mode(WIFI_STA);  // 設置為STA模式

  Serial.println("開(kāi)始掃描");
  WiFi.scanNetworks(true); //啟動(dòng)異步掃描}

void loop(){  
  int n = WiFi.scanComplete(); //獲取掃描狀態(tài),信號個(gè)數
  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)); //網(wǎng)絡(luò )名稱(chēng)
      Serial.print("        ");
      Serial.print(WiFi.RSSI(i)); //信號強度
      Serial.print("        ");
      Serial.print((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? "未加密" : "加密"); //是否加密
      delay(10);
    }
    WiFi.scanDelete(); //清除內存中的掃描結果
  }  else if (n == -1){
    Serial.println("正在掃描");
  }  else if (n == -2) {
    Serial.println("未觸發(fā)掃描");
  }

  delay(1000);
}

我們看下打印的結果,周?chē)腤iFi信號的數據都被打印了出來(lái)

image.png


到這里,WiFi的基本使用我們算是入門(mén)了,聯(lián)網(wǎng)之后,外面的世界非常美妙,我們可以做很多有意思的項目,做一些漂亮的網(wǎng)絡(luò )時(shí)鐘,做一些智能家居的小產(chǎn)品,做一個(gè)網(wǎng)絡(luò )收音機,做一個(gè)游戲模擬器,很多很多......

關(guān)于WiFi的一些其它功能,比如TCP協(xié)議,UDP協(xié)議,Web服務(wù)器等,我們用到的時(shí)候再細說(shuō)。

感謝大家,關(guān)于ESP32的學(xué)習,希望大家Enjoy!


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: WiFi

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>