本篇讲述开发板WIFI扫描与STA连接功能。
一.代码准备
开发板集成有ESP32-C6-MINI-1U芯片,支持WIFI6,故可WIFI 扫描链接。
WIFI引脚宏定义
#define SDIO2_CLK GPIO_NUM_12 #define SDIO2_CMD GPIO_NUM_13 #define SDIO2_D0 GPIO_NUM_11 #define SDIO2_D1 GPIO_NUM_10 #define SDIO2_D2 GPIO_NUM_9 #define SDIO2_D3 GPIO_NUM_8 #define SDIO2_RST GPIO_NUM_15
2.设置串口波特率、字体,WIFI引脚配置
M5.begin(); Serial.begin(115200); M5.Display.setFont(&fonts::FreeMonoBoldOblique24pt7b); WiFi.setPins(SDIO2_CLK, SDIO2_CMD, SDIO2_D0, SDIO2_D1, SDIO2_D2, SDIO2_D3, SDIO2_RST);
3.WIFI STA连接,并显示屏显示
// STA MODE
WiFi.mode(WIFI_STA);
M5.Display.clear(GREEN);
M5.Display.println("WiFi mode set to STA");
WiFi.begin(ssid, password);
M5.Display.print("Connecting to ");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
M5.Display.print(".");
}
M5.Display.println("");
M5.Display.print("Connected to ");
M5.Display.println(ssid);
M5.Display.print("IP address: ");
M5.Display.println(WiFi.localIP());连接画面如下:

4.延时并切换背景色,为WIFI扫描做准备
delay(3000); M5.Display.clear(GOLD); M5.Display.setFont(&fonts::FreeMonoBoldOblique9pt7b)
5.WIFI扫描
void loop()
{
M5.Display.setCursor(0, 0);
M5.Display.println("Scan start");
// WiFi.scanNetworks will return the number of networks found.
int n = WiFi.scanNetworks();
M5.Display.println("Scan done");
if (n == 0) {
M5.Display.println("no networks found");
} else {
M5.Display.print(n);
M5.Display.println(" networks found");
M5.Display.println("Nr | SSID | RSSI | CH | Encryption");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
M5.Display.printf("%2d", i + 1);
M5.Display.print(" | ");
M5.Display.printf("%-32.32s", WiFi.SSID(i).c_str());
M5.Display.print(" | ");
M5.Display.printf("%4ld", WiFi.RSSI(i));
M5.Display.print(" | ");
M5.Display.printf("%2ld", WiFi.channel(i));
M5.Display.print(" | ");
switch (WiFi.encryptionType(i)) {
case WIFI_AUTH_OPEN:
M5.Display.print("open");
break;
case WIFI_AUTH_WEP:
M5.Display.print("WEP");
break;
case WIFI_AUTH_WPA_PSK:
M5.Display.print("WPA");
break;
case WIFI_AUTH_WPA2_PSK:
M5.Display.print("WPA2");
break;
case WIFI_AUTH_WPA_WPA2_PSK:
M5.Display.print("WPA+WPA2");
break;
case WIFI_AUTH_WPA2_ENTERPRISE:
M5.Display.print("WPA2-EAP");
break;
case WIFI_AUTH_WPA3_PSK:
M5.Display.print("WPA3");
break;
case WIFI_AUTH_WPA2_WPA3_PSK:
M5.Display.print("WPA2+WPA3");
break;
case WIFI_AUTH_WAPI_PSK:
M5.Display.print("WAPI");
break;
default:
M5.Display.print("unknown");
}
M5.Display.println();
delay(10);
}
}
M5.Display.println("");
// Delete the scan result to free memory for code below.
WiFi.scanDelete();
// Wait a bit before scanning again.
delay(5000);
} 因为WIFI芯片支持2.4GHz WIFI,故扫描得到周边2.4GHzWIFI 热点信号,下图扫描可以看到,使用的WIFI热点HUAWEI-P信号强度最高。

6.全部工程代码如下
#include <Arduino.h>
#include <M5GFX.h>
#include <M5Unified.h>
#include <WiFi.h>
#define SDIO2_CLK GPIO_NUM_12
#define SDIO2_CMD GPIO_NUM_13
#define SDIO2_D0 GPIO_NUM_11
#define SDIO2_D1 GPIO_NUM_10
#define SDIO2_D2 GPIO_NUM_9
#define SDIO2_D3 GPIO_NUM_8
#define SDIO2_RST GPIO_NUM_15
const char *ssid = "HUAWEI-P";
const char *password = "pj_0915ll";
void setup()
{
M5.begin();
Serial.begin(115200);
M5.Display.setFont(&fonts::FreeMonoBoldOblique24pt7b);
WiFi.setPins(SDIO2_CLK, SDIO2_CMD, SDIO2_D0, SDIO2_D1, SDIO2_D2, SDIO2_D3, SDIO2_RST);
// If you select the M5Tab5 board in Arduino IDE, you could use the default pins defined.
// WiFi.setPins(BOARD_SDIO_ESP_HOSTED_CLK, BOARD_SDIO_ESP_HOSTED_CMD, BOARD_SDIO_ESP_HOSTED_D0,
// BOARD_SDIO_ESP_HOSTED_D1, BOARD_SDIO_ESP_HOSTED_D2, BOARD_SDIO_ESP_HOSTED_D3,
// BOARD_SDIO_ESP_HOSTED_RESET);
// STA MODE
WiFi.mode(WIFI_STA);
M5.Display.clear(GREEN);
M5.Display.println("WiFi mode set to STA");
WiFi.begin(ssid, password);
M5.Display.print("Connecting to ");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
M5.Display.print(".");
}
M5.Display.println("");
M5.Display.print("Connected to ");
M5.Display.println(ssid);
M5.Display.print("IP address: ");
M5.Display.println(WiFi.localIP());
delay(3000);
M5.Display.clear(GOLD);
M5.Display.setFont(&fonts::FreeMonoBoldOblique9pt7b);
// AP MODE
// WiFi.mode(WIFI_MODE_AP);
// Serial.println("WiFi mode set to AP");
// WiFi.softAP(ssid, password);
// Serial.println("AP started");
// Serial.print("IP address: ");
// Serial.println(WiFi.softAPIP());
}
void loop()
{
M5.Display.setCursor(0, 0);
M5.Display.println("Scan start");
// WiFi.scanNetworks will return the number of networks found.
int n = WiFi.scanNetworks();
M5.Display.println("Scan done");
if (n == 0) {
M5.Display.println("no networks found");
} else {
M5.Display.print(n);
M5.Display.println(" networks found");
M5.Display.println("Nr | SSID | RSSI | CH | Encryption");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
M5.Display.printf("%2d", i + 1);
M5.Display.print(" | ");
M5.Display.printf("%-32.32s", WiFi.SSID(i).c_str());
M5.Display.print(" | ");
M5.Display.printf("%4ld", WiFi.RSSI(i));
M5.Display.print(" | ");
M5.Display.printf("%2ld", WiFi.channel(i));
M5.Display.print(" | ");
switch (WiFi.encryptionType(i)) {
case WIFI_AUTH_OPEN:
M5.Display.print("open");
break;
case WIFI_AUTH_WEP:
M5.Display.print("WEP");
break;
case WIFI_AUTH_WPA_PSK:
M5.Display.print("WPA");
break;
case WIFI_AUTH_WPA2_PSK:
M5.Display.print("WPA2");
break;
case WIFI_AUTH_WPA_WPA2_PSK:
M5.Display.print("WPA+WPA2");
break;
case WIFI_AUTH_WPA2_ENTERPRISE:
M5.Display.print("WPA2-EAP");
break;
case WIFI_AUTH_WPA3_PSK:
M5.Display.print("WPA3");
break;
case WIFI_AUTH_WPA2_WPA3_PSK:
M5.Display.print("WPA2+WPA3");
break;
case WIFI_AUTH_WAPI_PSK:
M5.Display.print("WAPI");
break;
default:
M5.Display.print("unknown");
}
M5.Display.println();
delay(10);
}
}
M5.Display.println("");
// Delete the scan result to free memory for code below.
WiFi.scanDelete();
// Wait a bit before scanning again.
delay(5000);
}二.调试测验
编译烧录后,可以看到连接到指定WIFI,且循环扫描到周围WIFI热点。
我要赚赏金
