在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ESP32學習筆記:WiFi

CHANBAEK ? 來源:跳動的字節 ? 作者:曉宇 ? 2023-07-15 16:20 ? 次閱讀

今天我們來說說ESP32 的WiFi。

ESP32的WiFi

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

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

AP模式

AP模式就是讓ESP32建立一個網絡,可以發出WiFi信號來讓其他設備搜索到,就跟路由器發出信號來類似,只需要一行代碼,我們就可以建立一個我們自己命名的無線網絡了,期待一下。

圖片

#include < WiFi.h >

void setup(){
  WiFi.softAP("ESP32_WiFi");
}

void loop(){
}

上面這一行代碼,我們就建立了一個名為ESP32_WiFi的,不加密的無線網絡了,我們將代碼燒錄進去,然后打開手機WiFi連接界面,就可以看到這個網絡并進行連接了。

圖片

常用函數

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

該函數建立并啟動AP網絡

bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0, int max_connection = 4);
  • ssid,AP網絡的名字,最大不超過32字節;
  • passphrase,密碼,8-63字節,不設置就是不加密;
  • channel,WiFi網絡信道,1-13可選;
  • ssid_hidden,網絡名字是否隱藏;
  • ssid_hidden,最大接入數,1-4可選。

本地地址等設置

bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);
  • local_ip,本地網絡地址,比如默認為192.168.4.1;
  • gateway,網關地址, 192.168.4.1;
  • subnet,子網掩碼,255.255.255.0。

連接數量,返回連接到本AP的客戶端的數量

uint8_t softAPgetStationNum();

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

bool softAPsetHostname(const char * hostname);

查詢主機的MAC地址,函數返回主機的MAC地址

String softAPmacAddress(void);

代碼測試

下面我們寫一個小程序,測試下上面幾個函數的功能:

#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);                  // 啟動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("當前連接客戶端數: ");
  Serial.println(WiFi.softAPgetStationNum()); // 打印客戶端連接數量
  delay(5000);
}

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

圖片

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

STA模式

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

圖片

#include < WiFi.h >

const char *ssid = "********"; // 網絡名稱
const char *password = "********"; // 網絡密碼

void setup(){
 WiFi.begin(ssid, password);
}

void loop(){
}

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

常用函數

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

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

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);

設置網絡地址,包括本機IP,網關地址,子網掩碼,DNS

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

聯網狀態

static wl_status_t status();

返回不同的枚舉值代表不同的狀態:

  • 0:WL_IDLE_STATUS正在WiFi工作模式間切換;
  • 1:WL_NO_SSID_AVAIL無法訪問設置的SSID網絡;
  • 2:WL_SCAN_COMPLETED掃描完成;
  • 3:WL_CONNECTED連接成功;
  • 4:WL_CONNECT_FAILED連接失敗;
  • 5:WL_CONNECTION_LOST丟失連接;
  • 6:WL_DISCONNECTED斷開連接;

模塊IP地址

IPAddress localIP()

模塊子網掩碼

IPAddress subnetMask()

模塊網關地址

IPAddress gatewayIP()

模塊MAC地址

const char * getHostname()

代碼測試

下面我們寫一個小程序,測試下上面幾個函數的功能:

#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 ){  //等待網絡連接成功
    delay(1000);
    Serial.print(".");
  }
  Serial.println("WiFi Connected!");

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

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

  Serial.print("gateway: ");
  Serial.println(WiFi.gatewayIP()); //網關地址

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

void loop(){
}

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

圖片

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

圖片

異步搜索

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

圖片

常用函數

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

該函數用于掃描啟動

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,是否掃描不廣播的網絡;
  • passive,掃描速度;
  • max_ms_per_chan,每個通道的掃描時間;
  • channel,通道選擇。

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

int16_t scanComplete();
  • -1,掃描還沒結束;
  • -2,掃描還沒觸發;
  • n,掃描到的WiFi信號個數;

刪除內存中的掃描數據

void scanDelete();

掃描到的網絡名稱

String SSID(uint8_t networkItem);

掃描到的網絡加密類型

wifi_auth_mode_t encryptionType(uint8_t networkItem)

掃描到的網絡信號強度

int32_t RSSI(uint8_t networkItem)

掃描到的網絡信道號

int32_t channel(uint8_t networkItem)

代碼測試

下面我們寫一個小程序,異步掃描我們空間中當前存在的WiFi信號并打印出來:

#include < WiFi.h >

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

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

  Serial.println("開始掃描");
  WiFi.scanNetworks(true); //啟動異步掃描
}

void loop(){  
  int n = WiFi.scanComplete(); //獲取掃描狀態,信號個數
  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(); //清除內存中的掃描結果
  }
  else if (n == -1){
    Serial.println("正在掃描");
  }
  else if (n == -2) {
    Serial.println("未觸發掃描");
  }

  delay(1000);
}

我們看下打印的結果,周圍的WiFi信號的數據都被打印了出來

圖片

到這里,WiFi的基本使用我們算是入門了,聯網之后,外面的世界非常美妙,我們可以做很多有意思的項目,做一些漂亮的網絡時鐘,做一些智能家居的小產品,做一個網絡收音機,做一個游戲模擬器,很多很多......

關于WiFi的一些其它功能,比如TCP協議,UDP協議,Web服務器等,我們用到的時候再細說。

感謝大家,關于ESP32的學習,希望大家Enjoy!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6037

    文章

    44558

    瀏覽量

    635356
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17149

    瀏覽量

    351216
  • 藍牙
    +關注

    關注

    114

    文章

    5823

    瀏覽量

    170342
  • WIFI
    +關注

    關注

    81

    文章

    5297

    瀏覽量

    203741
  • ESP32
    +關注

    關注

    18

    文章

    971

    瀏覽量

    17276
收藏 人收藏

    評論

    相關推薦

    ESP32ESP-IDF學習筆記

    ESP32ESP-IDF 學習筆記(六)【I2C數據總線(I2C)】文章目錄ESP32ESP
    發表于 02-22 07:30

    淺談Zephyr ESP32 wifi如何使用

    在Zephyr ESP32 wifi驅動簡析一文中簡要分析了esp32 wifi如何集成進Zephyr,本文接著說明要如何使用esp32
    的頭像 發表于 06-01 10:17 ?6861次閱讀

    簡析esp32wifi驅動如何被集成進Zephyr的驅動

    分析Zephyr ESP32 WIFI驅動的實現可以更為清晰的掌握esp32 wifi在zephyr上的使用,本文主要分析esp32
    的頭像 發表于 06-01 10:41 ?4544次閱讀
    簡析<b class='flag-5'>esp32</b>的<b class='flag-5'>wifi</b>驅動如何被集成進Zephyr的驅動

    wifi&藍牙MCU 該不該選ESP32

    ESP32是了國內樂鑫科技推出的Wifi&藍牙物聯網MCU,而最近項目正好在用ESP32,所以我們今天就來分享下,如何讓你的ESP32跑起來,并應用于更多實際項目。1
    發表于 10-26 14:51 ?21次下載
    <b class='flag-5'>wifi</b>&藍牙MCU  該不該選<b class='flag-5'>ESP32</b>

    ESP32 開發之旅② Arduino For ESP32說明

    文章目錄1. Arduino Core For ESP32是什么?2.Arduino core for ESP32庫3.與ESP8266庫類比3.1 WiFi ——
    發表于 11-13 19:51 ?33次下載
    <b class='flag-5'>ESP32</b> 開發之旅② Arduino For <b class='flag-5'>ESP32</b>說明

    ESP32 開發筆記(四)LVGL控件學習 Window 窗口控件 X

    ESP32 開發筆記(四)LVGL控件學習 Window 窗口控件 X
    發表于 11-14 09:06 ?6次下載
    <b class='flag-5'>ESP32</b> 開發<b class='flag-5'>筆記</b>(四)LVGL控件<b class='flag-5'>學習</b> Window 窗口控件 X

    [ESP32]學習筆記02

    [ESP32學習筆記02]使用ViusalStudio2017開發ESP32、按鍵輸入檢測前言一、安裝Visual Studio 2017二、配置開發環境1.安裝ViusalGDB2.
    發表于 12-03 17:36 ?23次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>02

    ESP32刷入MicroPython以及連接WiFi

    一、ESP32刷入MicroPython1.ESP32驅動2.下載MicroPython3.刷入micropython4.進入ESP32二、連接WiFi,修改時間1.寫好代碼2.拷貝到
    發表于 12-04 19:51 ?28次下載
    <b class='flag-5'>ESP32</b>刷入MicroPython以及連接<b class='flag-5'>WiFi</b>

    esp32 例程 藍牙_wifi&amp;藍牙MCU 該不該選ESP32

    ESP32是了國內樂鑫科技推出的Wifi&藍牙物聯網MCU,而最近項目正好在用ESP32,所以我們今天就來分享下,如何讓你的ESP32跑起來,并應用于更多實際項目。1
    發表于 12-06 20:06 ?31次下載
    <b class='flag-5'>esp32</b> 例程 藍牙_<b class='flag-5'>wifi</b>&amp;藍牙MCU  該不該選<b class='flag-5'>ESP32</b>

    ESP32 單片機學習筆記 - 07 - TCP連接

    中扮演什么角色了。文章目錄ESP32 單片機學習筆記 - 07 - TCP連接一、例程實踐1)建立TCP客戶端 - tcp_client2)總結二、TCP/IP協議 - 科普1)科普了解2)三次握手
    發表于 12-22 18:58 ?3次下載
    <b class='flag-5'>ESP32</b> 單片機<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 07 - TCP連接

    [ESP32]學習筆記04

    Analog-to-Digital Converter(模數轉換器)的使用今天我們學習ESP32提供的ADC外設的使用,ESP32的每個ADC單元都支持兩種模式,單次讀取和連續讀取(DMA),本次
    發表于 12-22 19:02 ?9次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>04

    SPI主線協議——ESP32學習筆記

    目錄SPI主線協議——ESP32學習筆記零、前言一、什么是SPI?二、通信過程?三、極性和相位四、總結SPI主線協議——ESP32學習
    發表于 12-22 19:23 ?18次下載
    SPI主線協議——<b class='flag-5'>ESP32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    ESP32ESP-IDF 教學WiFi篇(一)—— WiFi兩種模式

    本文章 來自原創專欄《ESP32教學專欄 (基于ESP-IDF)》 下的一個二級專欄 《ESP32 上的 WiFi 及 Lwip 協議棧》,講解如何使用
    發表于 01-13 14:37 ?48次下載
    <b class='flag-5'>ESP32</b> 之 <b class='flag-5'>ESP</b>-IDF 教學<b class='flag-5'>WiFi</b>篇(一)—— <b class='flag-5'>WiFi</b>兩種模式

    ESP8266或ESP32上的WiFi Webradio

    電子發燒友網站提供《ESP8266或ESP32上的WiFi Webradio.zip》資料免費下載
    發表于 06-13 11:38 ?1次下載
    <b class='flag-5'>ESP</b>8266或<b class='flag-5'>ESP32</b>上的<b class='flag-5'>WiFi</b> Webradio

    ESP32學習筆記:雙核

    今天我們來說說ESP32 for Arduino 的雙核。
    的頭像 發表于 07-15 16:16 ?5014次閱讀
    <b class='flag-5'>ESP32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>:雙核
    主站蜘蛛池模板: 亚洲成a人片在线观看88| 妖精视频一区二区三区| 亚洲九色| 久草视频资源在线| 日韩一级片视频| 日本一区二区在线免费观看| 色视频在线观看免费| 99久久久精品| 好大好紧好爽好湿润视频| 五月婷婷色视频| 成人在线播放av| 在线视频免费播放| 婷婷综合激情| 成年女人毛片免费观看97| 性夜影院爽黄a爽在线看香蕉| 一级特一级特色生活片| 精品xxxxxbbbb欧美中文| 免费欧美黄色片| 正在播放国产巨作| 国产小视频你懂的| 亚洲五月六月丁香激情| 四虎.com| 天天拍夜夜添久久精品中文| 欧美一卡2卡三卡四卡五卡| 毛片区| 国产高清a| 四虎影院在线网址| 午夜免费网站| 高颜值美女啪啪| 国产大乳孕妇喷奶水在线观看| 操碰91| 色天天综合久久久久综合片| 亚州第一视频| 国产精品第一页在线观看 | 日本三级香港三级人妇99| 天天在线天天看成人免费视频| 黄视频在线观看网站| 国产美女主播在线| 一区二区三区视频| 久久精品亚洲一级毛片| 欧美人与zoxxxx|