ESP8266(ESP-01, ESP-01S) 와이파이 리스트 검색
이전 글에 이어서 ESP01을 기준으로 설명합니다.
ESP01로 현재 있는 곳에 퍼지고 있는 와이파이가 어떤 것들이 있는지 확인할 수 있습니다.
다행히도 이 코드는 예제 파일에 포함되어 있습니다. 파일 - 에제 - ESP8266WIFI - WifiScan 예제를 선택해 주시면 됩니다. 코드는 아래와 같습니다.
/*
This sketch demonstrates how to scan WiFi networks.
The API is almost the same as with the WiFi Shield library,
the most obvious difference being the different file you need to include:
*/
#include "ESP8266WiFi.h"
void setup() {
Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
}
void loop() {
Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0) {
Serial.println("no networks found");
} else {
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*");
delay(10);
}
}
Serial.println("");
// Wait a bit before scanning again
delay(5000);
}
위와 같은 코드들이 있습니다. 크게 어려운 것은 없으며, 순서대로 살펴보겠습니다.
#include "ESP8266WiFi.h"
와이파이를 검색하는 코드들이 포함되어 있는 헤더 파일을 include 합니다. 이 헤더 파일의 구성은 아래 링크에서 확인할 수 있습니다. 해당 링크에 대한 설명은 광범위 함으로 생략합니다.
https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/src/ESP8266WiFi.h
void setup() {
Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
}
setup 함수입니다. Serial 통신을 115200속도로 설정하는 코드가 있습니다. 이후에 WiFi.mode를 설정해줍니다. Wifi의 모드는 Station 모드, AP 모드, Station-AP 모드, OFF 모드가 있습니다. 여기에서는 WIFI_STA 모드를 선택했습니다. 그리고 이어서 와이파이를 disconnect 하여 연결하지 않고, 넘어갑니다.
※ WiFi에 대한 모드의 설명은 관련 글을 참조해주세요.
void loop() {
Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
...
}
이어서 loop 함수에서는 와이파이를 스캔을 시작합니다. 그리고 검색된 와이파이 갯수를 n 변수에 저장(초기화)해 줍니다. 이때 WiFi.scanNetworks() 함수 내부에서는 스캔된 와이파이 정보를 다른 객체에 저장하는 과정이 포함되어 있습니다.
void loop(){
...
if (n == 0) {
Serial.println("no networks found");
} else {
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*");
delay(10);
}
}
...
}
스캔된 와이파이가 0이 아니면, 각각의 와이파이의 SSID, RSSI, encryptionType 를 출력해주는 과정이 포함되어 있습니다. 이 SSID, RSSI, encryptionType 위의 WiFi.scanNetworks() 함수에 의해 저장되었습니다. 마지막 encryption 타입을 확인하는 과정은 암호화가 없으면 공백(" ")을 표시하고, 있으면 별표("*")를 표시하게끔 되어 있습니다.
이제 실제로 업로드를 하고, 시리얼 모니터를 켜게 되면, 위와 같은 와이파이 리스트를 볼 수 있습니다. 업로드는 이전 글을 확인해주세요.
'개발 > ESP32, ESP8266' 카테고리의 다른 글
ESP8266(ESP-01, ESP-01S) 웹서버 만들기, Html 출력하기 (0) | 2022.10.25 |
---|---|
ESP8266(ESP-01, ESP-01S) 웹서버 만들기, 간단한 문자 출력 (0) | 2022.10.23 |
ESP8266(ESP-01, ESP-01S) 개요, 업로드하기 (0) | 2022.10.04 |
[ESP32 에러] rst:0xf (BROWNOUT_RST),boot:0x29 (SPI_FAST_FLASH_BOOT) (0) | 2022.09.27 |
[EPS32/memory] 플래시 메모리가 부족할 때 해결법 (0) | 2022.08.28 |