- 前言
- 一、WIFI简介
- 二、AP模式
- 三、STA模式
- 四、AP-STA 共存模式
- 五、扫描网络
- 总结
提示:以下是本篇文章正文内容
一、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 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
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 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模式存在,WiFi模块作为AP,可以让手机或者计算机接入,同时该模块又可以作为一个STA接入到路由器或者上位服务器进行数据上传
五、扫描网络搜索网络下所有可连接的AP,然后可进行选择连接
搜索网络基本步骤:
1.引用WiFi库 #include 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
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 = 0)
{
Serial.println("扫描完成");
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?