Wi-Fi 连接

罗大富 BigRich大约 4 分钟ESP32Arduino

连接路由器上网是我们每天都做的事情,日常生活中我们只需要知道路由器的账号和密码,就能使用电脑或者手机连接到无线路由器,然后上网冲浪。

如今物联网市场异常火爆,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 相关函数的介绍:

  1. WiFi.begin(ssid, password):该函数用于连接到 Wi-Fi 网络。需要提供要连接的网络的 SSID 和密码作为参数。
  2. WiFi.disconnect():该函数用于断开当前的 Wi-Fi 连接。
  3. WiFi.status():该函数返回当前 Wi-Fi 连接的状态。返回值可能是以下之一:
    • WL_CONNECTED:已连接到 Wi-Fi 网络。
    • WL_DISCONNECTED:未连接到 Wi-Fi 网络。
    • WL_IDLE_STATUS:Wi-Fi 处于空闲状态。
    • WL_NO_SSID_AVAIL:未找到指定的 Wi-Fi 网络。
  4. WiFi.localIP():该函数返回 ESP32 设备在 Wi-Fi 网络中分配的本地 IP 地址。
  5. WiFi.macAddress():该函数返回 ESP32 设备的 MAC 地址。
  6. WiFi.scanNetworks():该函数用于扫描周围可用的 Wi-Fi 网络。它返回一个整数,表示扫描到的网络数量。可以使用其他函数(如 WiFi.SSID()WiFi.RSSI())来获取每个网络的详细信息。
  7. WiFi.SSID(networkIndex):该函数返回指定索引的扫描到的 Wi-Fi 网络的 SSID。
  8. 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() {

}
上次编辑于:
贡献者: Luo