文章目录

  • 前言
  • 一、WIFI简介
  • 二、AP模式
  • 三、STA模式
  • 四、AP-STA 共存模式
  • 五、扫描网络
  • 总结

前言

使使用WIFI功能基本操作是:建立/连接网络


提示:以下是本篇文章正文内容

一、WIFI简介

Wi-Fi 库支持配置及监控 ESP32 Wi-Fi 连网功能

站点(STA):连接到Wi-Fi网络的设备
接入点(AP):提供与Wi-Fi的连接,接入点的另一端一般会连接到有线网络,接入点通常与路由器集成在一起,以提供从Wi-Fi网络到互联网的访问

AP会通过SSID(Service Set IDentifier) 来识别接入的STA设备该名称实际上是将设备(站点)连接到Wi-Fi时选择的网络名称

常用支持配置:
1.基站模式,即STA 模式或 Wi-Fi 客户端模式,ESP32 连接到接入点 (AP)

2.AP 模式,即 Soft-AP 模式或接入点模式,基站连接到 ESP32

3.AP-STA 共存模式,ESP32 既是接入点,同时又作为基站连接到另外一个接入点

参考资料:
WIFI使用文档

二、AP模式

在此模式下,模块本身相当于一个路由器,其他设备可链接到该模块发送的信号,主要应用在主从设备的主机部分,可以同时连接到soft-AP的最大站数可以设置4,默认为4,这种操作模式称为软接入点(soft-AP)

建立网络基本步骤

1.引用WiFi库 #include <WiFi.h>
2.配置AP模式IP softAPConfig(非必须)
3.启动AP网络 WiFi.softAP(ssid)

softAPConfig函数原型

bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet)

作用:配置了AP模式下的本地IP、网关IP、子网掩码,若没有配置,系统会默认配置

softAP函数原型:

bool WiFiAPClass::softAP(const char* ssid, const char* passphrase, int channel, int ssid_hidden, int max_connection)

开启AP模式,需要配置其网络名称、连接密码(可忽略)、WiFi信道、是否隐藏信号、最大连接数

ssid:网络名称是必须配置项
passphrase:连接密码如果不配置则默认为开放性网络
channel:WiFi信道的配置,用于避免信号干扰。(1-13)
ssid_hidden:是否隐藏信号,可以选择广播信号(broadcast )所有人直接看到,也可以隐藏则需要指定查找
max_connection:最大连接数在默认下是4,可以配置范围1-4

注:除了ssid必须配置,其余都可以忽略

eg:

#include <WiFi.h>void setup()
{WiFi.softAP("spft-AP","12345678");
}void loop()
{}

将程序下载到ESP32可以看到一个spft-APwifi,输入密码12345678可以连接

常用函数
1.关闭AP模式:bool WiFiAPClass::softAPdisconnect(bool wifioff=false)
若wifioff为true则还将还原网络设置

2.获取连接的设备数:uint8_t WiFiAPClass::softAPgetStationNum()

3.设置AP的主机名:bool WiFiAPClass::softAPsetHostname(const char * hostname)

4.查看IP:IPAddress softAPIP();

三、STA模式

STA模式用于使ESP32模块连接到由接入点(AP)建立的Wi-Fi网,在此模式下,模块相当于一个客户端,可以链接到其他路由器发出的WIFI信号,也被称为客户端模式,主要应用在网络通信中

连接网络基本步骤

1.引用WiFi库 #include <WiFi.h>
2.配置STA模式下IP地址 config()(非必须)
3.开启STA模式,连接AP WiFi.begin(ssid, password);

config函数原型:

bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1, IPAddress dns2)

作用:为ESP32分配IP,网关,子网,设置网络地址

local_ip :分配ESP32接口的IP地址
gateway :应包含用于访问外部网络的网关(路由器)的IP地址
subnet :掩码,用于定义本地网络的IP地址范围
dns1,dns2:可选参数,用于定义维护域名目录的域名服务器(DNS)的IP地址,并将其转换为IP地址

begin函数原型

wl_status_t WiFiSTAClass::begin(const char* ssid, const char *passphrase, int32_t channel, const uint8_t* bssid, bool connect)

作用:该方法用来接入网络

ssid :要连接的接入点的SSID的字符串
passphrase:到接入点的字符串,长度至少应为8个字符
channel :信道
bssid :AP的mac地址,此参数也是可选的
connect:boolean参数,如果设置为false,将指示模块仅保存其他参数而不实际建立与接入点的连接

常用函数:
1.获取联网状态wl_status_t status()

状态类型:

255:WL_NO_SHIELD,兼容WiFi Shield而设计
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 断开连接

2.是否已接入网络bool isConnected()

3.断开网络 bool disconnect(bool wifioff = false, bool eraseap = false)
若wifioff为true则还将还原网络设置,若eraseap为true则将清除保存于flash中的网络参数

4.获取模块地址 IPAddress localIP()

5.设置断网自动重连接 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,并打印出相应的信息

四、AP-STA 共存模式

当模块作为AP时,它同时又可以作为一个STA模式存在,WiFi模块作为AP,可以让手机或者计算机接入,同时该模块又可以作为一个STA接入到路由器或者上位服务器进行数据上传

五、扫描网络

搜索网络下所有可连接的AP,然后可进行选择连接

搜索网络基本步骤:

1.引用WiFi库 #include <WiFi.h>
2.开启STA模式
3.开启搜索 scanNetworks()
4.获取搜索数据 scanComplete()

scanNetworks函数原型:

int16_t scanNetworks(bool async = false, bool show_hidden = false, bool passive = false, uint32_t max_ms_per_chan = 300)

async:异步扫描,该值为true时将启动异步扫描,该方法将不阻塞
show_hidden:是否扫描不广播的网络
passive:影响扫描速度,该值为true时扫描速度较快
max_ms_per_chan:每通道扫描时间

scanComplete():异步模式下用于获取扫描到的网络数量,如果返回值为-1,表示还在进行扫描,如果返回值为-1,表示未进行扫描或扫描失败

在同步搜索下scanNetworks函数会返回扫描到的网络数量

同步搜索

#include <WiFi.h>void setup()
{Serial.begin(115200);Serial.println();WiFi.mode(WIFI_STA); //设置为STA模式WiFi.disconnect();   //断开当前可能的连接delay(100);Serial.println("scan start");int n = WiFi.scanNetworks(); //扫描并返回搜索到的网络数量,该方法默认会阻塞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)); //打印网络名称Serial.print("        ");Serial.print(WiFi.RSSI(i)); //打印信号强度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("开始扫描");WiFi.scanNetworks(true); //启动异步扫描
}void loop()
{delay(1000);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("未进行扫描");}
}

总结

提示:这里对文章进行总结:

ESP32--WIFI相关推荐

  1. Arduino ESP32 WIFI 蓝牙模式触控按键切换

    Arduino ESP32 WIFI &蓝牙模式触控按键切换 相关篇<Arduino ESP32自带触摸传感器功能测试> <ESP32电容式触摸传感器引脚实例> ESP ...

  2. ESP32 Wi-Fi讲解,station连接热点案例

    零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...

  3. ESP32 WIFI MESH学习笔记7-物联网与控制(ESP32部分)

    ESP32 WIFI MESH学习笔记 文章目录 前言 一.服务器部分 二.ESP32部分 1.引入例子 2.修改用户名称及密码 3.初始化IOT登陆信息 4.初始化 5.侦听函数 6.主函数 7.子 ...

  4. ESP32 (WIFI)-AP、STA模式(14)

    提示:本博客作为学习笔记,有错误的地方希望指正 文章目录 一.ESP32 WIFI模式概述 二.ESP32 WIFI-AP初始化流程 三.WIFI-AP示例 四.ESP32 WIFI-STA初始化流程 ...

  5. ESP32 Wi-Fi 蓝牙 Tx Power 调整方法

    此篇博客用来整理 ESP32 Wi-Fi & BLE 的 Tx Power 调整方法.此博客分为两部分: Wi-Fi Tx Power 调整 BLE Tx Power 调整 BR/EDR Tx ...

  6. esp32 WiFi和蓝牙同时启动

    esp32 WiFi和蓝牙同时启动会提示Flash超出,我使用的是vs code开发,我的解决办法是: 文件创建时最后面会默认生成一个platformio.ini文件,这个是配置文件,其中包括调试波特 ...

  7. 使用Arduino开发ESP32:wifi基本功能使用

    1.建立网络(AP) 2.连接网络(STA) 3.扫描网络 1.建立网络(AP) 只需两步:1.引用WiFi库include<WiFi.h> 2.启动AP网络WiFi.softAP(ssi ...

  8. 使用Arduino开发ESP32:关于esp32 wifi连接不上的解决办法

    今天在学习MQTT订阅的过程中 发现esp32时钟连接不上wifi 主体代码如下: while(WiFi.status()!=WL_CONNECTED){delay(200);Serial.print ...

  9. ESP32 测试(十):ESP32 Wi-Fi 和 蓝牙 并存时开始睡眠模式的电流功耗

    测试目的:ESP32 Wi-F 和 蓝牙 并存时测量出 sleep 模式下 Wi-Fi 和 蓝牙并存时的电流功耗. 以下是测试环境与过程.测试结果: 1 测试环境与过程: 硬件部分:ESP32-WRO ...

  10. esp32 wifi 连接

    1.固定密码 简简单单的固定密码连接调试测试一下功能是否完备 #include<WiFi.h> const char* id="2580"; //定义两个字符串指针常量 ...

最新文章

  1. 面试官(7): 聊一聊 Babel?
  2. 编程软件python中的if用法-总结Python编程中函数的使用要点
  3. window下的host路径
  4. 在置信区间下置信值的计算_使用自举计算置信区间
  5. mongodb备份oplog_MongoDB 备份(mongodump)与恢复(mongorestore)
  6. Jenkins file一行代码部署.NET程序到K8S
  7. 【JavaScript】查漏补缺 —数组中filter()方法
  8. 把mdb文件导入SQL Server 软件的解决方法
  9. 「不看后悔一辈子」Python100个游戏大合集(1~15)
  10. 2021年全球无损检测设备收入大约2189.6百万美元,预计2028年达到3076.2百万美元,2022至2028期间,年复合增长率CAGR为5.4%
  11. 百度AI开放平台情感分类
  12. java经典源码_java经典源代码
  13. Could not set property ‘XXX‘ of ‘class com.entity.XXX‘
  14. 移动周报:七大无需编程的DIY开发工具
  15. windows功能_Windows可选功能介绍
  16. 验证哥德巴赫猜想:任何一个大于等于6的偶数均可表示为两个素数的和。如6=3+3,8=3+5,,18=5+13。试编写程序,要求将输入的一个偶数表示成两个素数之和。 输入输出样例如下:
  17. naticat连接mysql报错_「2509」Navicat连接mysql报错2509 - seo实验室
  18. 谷歌Chrome浏览器中如何打开或关闭网页的自动翻译功能?
  19. 计算机网络中rtd,网络RTK与网络RTD系统简介.ppt
  20. java.lang.RuntimeException: Unable to start activity ComponentInfo解决方案

热门文章

  1. matplotlib动画演示:细胞自动机-探索生命起源
  2. 120亿光年外发现大量水:为地球储量140万亿倍
  3. 轻松打造自己的Cheat Engine
  4. 华为秋招机试三道编程题(2021-09-01)
  5. 计算机什么专业适合男生,内向的男生适合什么专业
  6. QT Quick项目简介
  7. qsnctf ping me2 wp
  8. python返回列表中最大和第二大的元素
  9. MySQL中单句实现无限层次父子关系查询
  10. 常见压缩格式(未完待续)