【ESP32】Arduino开发 | WiFi开发 | 基站模式 + AP扫描和AP连接例程

devtools/2025/1/19 23:57:32/

WiFi基站模式的详细讲解放在了ESP-IDF开发系列当中,点击栏目目录即可跳转找到。

1. API

1.1 初始化

wl_status_t begin(const char* ssid, const char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);
  • ssid:SSID;
  • passphrase:密码;
  • channel:信道;
  • bssid:AP MAC地址;
  • connect:是否立即连接。

1.2 静态IP设置

bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000);
  • local_ip:IP地址;
  • gateway:网关地址;
  • subnet:子网掩码;
  • dns1:首选DNS服务器;
  • dns2:备用DNS服务器。

1.3 获取状态

static wl_status_t status();

         有以下状态:

typedef enum {WL_NO_SHIELD        = 255,WL_IDLE_STATUS      = 0,  // 空闲WL_NO_SSID_AVAIL    = 1,  // 无此SSIDWL_SCAN_COMPLETED   = 2,  // 扫描完成WL_CONNECTED        = 3,  // 成功连接WL_CONNECT_FAILED   = 4,  // 连接失败WL_CONNECTION_LOST  = 5,  // 失去连接WL_DISCONNECTED     = 6  // 断开连接
} wl_status_t;

1.4 扫描AP

int16_t scanNetworks(bool async = false, bool show_hidden = false, bool passive = false, uint32_t max_ms_per_chan = 300, uint8_t channel = 0, const char * ssid=nullptr, const uint8_t * bssid=nullptr);
  • async:是否异步;
  • show_hidden:扫描隐藏SSID;
  • passive:是否被动扫描;
  • max_ms_per_chan:每个信道的最长扫描时间,单位毫秒;
  • channel:扫描指定信道;
  • ssid:扫描指定SSID;
  • bssid:扫描指定AP MAC地址。

        返回扫描到的AP数量。 

1.5 获取扫描结果

bool getNetworkInfo(uint8_t networkItem, String &ssid, uint8_t &encryptionType, int32_t &RSSI, uint8_t* &BSSID, int32_t &channel);
  • networkItem:序号;
  • ssid:SSID;
  • encrytionType:加密方式;
  • RSSI:信号强度;
  • BSSID:AP MAC地址;
  • channel:信道。

2. 例程

2.1 AP连接

#include <Arduino.h>
#include <WiFi.h>void setup()
{/* 初始化串口 */Serial.begin(115200);/* 初始化WiFi */WiFi.begin("", "");Serial.print("WiFi connecting");while (WiFi.status() != WL_CONNECTED) {Serial.print(".");delay(500);}Serial.println();Serial.printf("Got IP: %s, gateway: %s, submask: %s\r\n",WiFi.localIP().toString().c_str(),WiFi.gatewayIP().toString().c_str(),WiFi.subnetMask().toString().c_str());
}void loop()
{
}

        WiFi基站的初始化只需要传入SSID和密码即可。后面通过查询状态等待连接完成,连接成功后通过对应的成员函数可以查询AP的基本信息。

2.2 AP扫描

#include <Arduino.h>
#include <WiFi.h>void setup()
{/* 初始化串口 */Serial.begin(115200);/* 扫描AP */int num = WiFi.scanNetworks();Serial.printf("Scaned %d access points\r\n", num);for (int i = 0; i < num; i++) {String ssid;uint8_t encryption;int rssi;uint8_t *bssid;int channel;WiFi.getNetworkInfo(i, ssid, encryption, rssi, bssid, channel);Serial.printf("SSID: %s, encryption: %d, rssi: %d, bssid: ", ssid.c_str(), encryption, rssi);for (int j = 0; j < 6; j++) {Serial.printf("%02X", bssid[j]);if (j != 5) {Serial.print(":");}}Serial.printf(", channel: %d\r\n", channel);}   
}void loop()
{
}

         AP扫描就不需要调begin函数了,直接scanNetworks开始扫描即可。通过getNetworkInfo可以获取对应序号的AP信息,如果不想这样一个个变量获取,Arduino也提供了另一个函数——getScanInfoByIndex,它返回的是一个指针,用户需要转成 wifi_ap_record_t 这个结构体的指针。


http://www.ppmy.cn/devtools/151952.html

相关文章

Android SystemUI——CarSystemBar添加到窗口(十)

上一篇文章我们看到了车载状态栏 CarSystemBar 视图的创建流程&#xff0c;这里我们继续分析将车载状态栏添加到 Windows 窗口中。 一、添加状态栏到窗口 前面我们已经分析了构建视图对象容器和构建视图对象内容&#xff0c;接下来我们继续分析 attachNavBarWindows() 方法将视…

openharmony应用开发快速入门

开发准备 本文档适用于OpenHarmony应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用&#xff08;如下图所示&#xff09;&#xff0c;快速了解工程目录的主要文件&#xff0c;熟悉OpenHarmony应用开发流程。 在开始之前&#xff0c;您需要了解有关OpenHarmon…

Oracle 表空间的使用与创建

Oracle 表空间的使用与创建&#xff08;结合创建用户及权限管理&#xff09; 在Oracle数据库中&#xff0c;表空间是数据库存储的逻辑单位&#xff0c;它用于存储数据库中的数据对象&#xff0c;如表、索引等。Oracle提供了不同类型的表空间&#xff08;如普通表空间、大表空间…

跨站请求伪造(CSRF)介绍

一、什么是跨站请求伪造&#xff08;CSRF&#xff09; 跨站请求伪造&#xff08;Cross-Site Request Forgery&#xff0c;简称CSRF&#xff09;是一种针对网站的恶意利用方式&#xff0c;也被称为“One Click Attack”或“Session Riding”。 CSRF攻击通过伪装来自受信任用户…

java权限修饰符

Java 的访问修饰符&#xff08;Access Modifiers&#xff09;是控制类、方法、变量等成员访问范围的关键工具。它们定义了类、方法或成员变量的可见性&#xff0c;以及在不同位置&#xff08;如不同包或子类&#xff09;是否能访问这些成员。Java 提供了四种主要的访问修饰符&a…

Hadoop•用Web UI查看Hadoop状态词频统计

听说这里是目录哦 通过Web UI查看Hadoop运行状态&#x1f407;一、关闭防火墙二、在物理计算机添加集群的IP映射三、启动集群四、进入HDFS的Web UI 词频统计&#x1f9a9;1、准备文本数据2、在HDFS创建目录3、上传文件4、查看文件是否上传成功5、运行MapReduce程序6、查看MapRe…

ES6中有哪些作用域

在ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;作用域&#xff08;Scope&#xff09;是指变量、函数和对象在代码中的可访问范围。ES6 引入了新的作用域规则&#xff0c;除了传统的全局作用域和函数作用域外&#xff0c;还新增了块级作用域。以下是 ES6 中的主要…

STM32 HAL库函数入门指南:从原理到实践

1 STM32 HAL库概述 STM32 HAL(Hardware Abstraction Layer)库是ST公司专门为STM32系列微控制器开发的一套硬件抽象层函数库。它的核心设计理念是在应用层与硬件层之间建立一个抽象层&#xff0c;这个抽象层屏蔽了底层硬件的具体实现细节&#xff0c;为开发者提供了一套统一的、…