Wi-Fi 连接
连接路由器上网是我们每天都做的事情,日常生活中我们只需要知道路由器的账号和密码,就能使用电脑或者手机连接到无线路由器,然后上网冲浪。
如今物联网市场异常火爆,WIFI 是物联网中非常重要的角色,现在基本上家家户户都有 WIFI 网络,通过 WIFI 接入到互联网,成了智能家居产品普遍的选择。ESP32 内部已集成 WIFI 功能,可以说它就是为 WIFI 无线连接而生的。本章来学习 ESP32 的 WIFI,使用 Arduino 开发 WIFI 是非常简单而美妙的,让大家在学习物联网中变的简单有趣,WIFI 模块也是为什么 ESP32 可以迅速崛起的主要原因之一。
硬件电路设计
连接无线路由器,将 ESP32 的 IP 地址等信息通过 Shell 控制台输出显示。
由于 ESP32 内置 WIFI 功能,所以直接在开发板上使用即可,无需额外连接。
软件电路设计
Arduino 已经集成了 Wi-Fi 模块,因此我们可以直接使用该模块。
模块包含热点 AP 模式和客户端 STA 模式,热点 AP 是指电脑或手机端直接连接 ESP32 发出的热点实现连接,如果电脑连接模块 AP 热点,这样电脑就不能上网,因此在使用电脑端和模块进行网络通信时,一般情况下都是使用 STA 模式。也就是电脑和设备同时连接到相同网段的路由器上。
下面是一些 ESP32 Arduino 库中常用的 Wi-Fi 相关函数的介绍:
WiFi.begin(ssid, password)
:该函数用于连接到 Wi-Fi 网络。需要提供要连接的网络的 SSID 和密码作为参数。WiFi.disconnect()
:该函数用于断开当前的 Wi-Fi 连接。WiFi.status()
:该函数返回当前 Wi-Fi 连接的状态。返回值可能是以下之一:WL_CONNECTED
:已连接到 Wi-Fi 网络。WL_DISCONNECTED
:未连接到 Wi-Fi 网络。WL_IDLE_STATUS
:Wi-Fi 处于空闲状态。WL_NO_SSID_AVAIL
:未找到指定的 Wi-Fi 网络。
WiFi.localIP()
:该函数返回 ESP32 设备在 Wi-Fi 网络中分配的本地 IP 地址。WiFi.macAddress()
:该函数返回 ESP32 设备的 MAC 地址。WiFi.scanNetworks()
:该函数用于扫描周围可用的 Wi-Fi 网络。它返回一个整数,表示扫描到的网络数量。可以使用其他函数(如WiFi.SSID()
和WiFi.RSSI()
)来获取每个网络的详细信息。WiFi.SSID(networkIndex)
:该函数返回指定索引的扫描到的 Wi-Fi 网络的 SSID。WiFi.RSSI(networkIndex)
:该函数返回指定索引的扫描到的 Wi-Fi 网络的信号强度(RSSI)。
#include <WiFi.h>
#define LED 2
// 定义 Wi-Fi 名与密码
const char * ssid = "WiFi名";
const char * password = "WiFi密码";
void setup() {
Serial.begin(9600);
// 断开之前的连接
WiFi.disconnect(true);
// 连接 Wi-Fi
WiFi.begin(ssid, password);
Serial.print("正在连接 Wi-Fi");
// 检测是否链接成功
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("连接成功");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// 使用板载 LED 反馈连接成功
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH);
delay(100);
digitalWrite(LED, LOW);
delay(100);
digitalWrite(LED, HIGH);
delay(100);
digitalWrite(LED, LOW);
delay(100);
digitalWrite(LED, HIGH);
delay(1500);
digitalWrite(LED, LOW);
}
void loop() {
}
在 C 和 C++ 编程语言中,const char *
是一个常见的类型声明,通常用于表示指向字符常量的指针。让我们逐个解释这个声明的各个部分:
const
:这是一个关键字,表示指针所指向的数据是常量,即不可修改。使用const
修饰指针可以确保在使用指针时不会意外地修改所指向的数据;char
:这是字符类型的关键字,表示该指针指向的数据是字符类型的数据。char
类型通常用于表示单个字符或字符数组;*
:这是指针声明符号,用于表示将声明一个指向特定类型的指针。在这种情况下,它表示将声明一个指向char
类型数据的指针。
const char *
:将上述部分组合在一起,表示一个指向字符常量的指针。这意味着该指针指向的字符数据是不可修改的。
可以使用 const char *
声明来指向字符串常量,例如:
const char *str = "Hello, world!";
在上面的示例中,str
是一个指向字符常量的指针,它指向存储在内存中的字符串 "Hello, world!"
。通过使用 const 关键字,我们确保不会通过 str 指针修改该字符串的内容。
刚才我们已经可以正常连接 WiFi 了,接下来,我们就可以来创建热点了。
#include <WiFi.h>
// 设置要创建的热点名与密码
const char * ssid = "ESP32_AP";
const char * password = "12345678";
void setup() {
Serial.begin(9600);
// 创建热点
WiFi.softAP(ssid, password);
// 打印热点 IP
Serial.print("Wi-Fi 接入的 IP:");
Serial.println(WiFi.softAPIP());
}
void loop() {
}