STA 모드에서도 네트워크를 검색 할 수 있습니다.
네트워크가 암호화되었는지 여부를 확인하려면 WiFi.scanNetworks()
뒤에 WiFi.encryptionType()
뒤에 오는 방법이 필요합니다.
이전에 비슷한 프로젝트를 진행하고있는 당신과 스케치를 공유하고 있습니다.
스케치는 WiFi 네트워크를 검색하고 RSSI 순서로 정렬하며 가장 강도가 높은 암호화되지 않은 네트워크에 연결을 수행합니다. 마음에 오는
#include <ESP8266WiFi.h>
/* Serial Baud Rate */
#define SERIAL_BAUD 9600
/* Delay paramter for connection. */
#define WIFI_DELAY 500
/* Max SSID octets. */
#define MAX_SSID_LEN 32
/* Wait this much until device gets IP. */
#define MAX_CONNECT_TIME 30000
/* SSID that to be stored to connect. */
char ssid[MAX_SSID_LEN] = "";
/* Scan available networks and sort them in order to their signal strength. */
void scanAndSort() {
memset(ssid, 0, MAX_SSID_LEN);
int n = WiFi.scanNetworks();
Serial.println("Scan done!");
if (n == 0) {
Serial.println("No networks found!");
} else {
Serial.print(n);
Serial.println(" networks found.");
int indices[n];
for (int i = 0; i < n; i++) {
indices[i] = i;
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (WiFi.RSSI(indices[j]) > WiFi.RSSI(indices[i])) {
std::swap(indices[i], indices[j]);
}
}
}
for (int i = 0; i < n; ++i) {
Serial.print(WiFi.SSID(indices[i]));
Serial.print(" ");
Serial.print(WiFi.RSSI(indices[i]));
Serial.print(" ");
Serial.print(WiFi.encryptionType(indices[i]));
Serial.println();
if(WiFi.encryptionType(indices[i]) == ENC_TYPE_NONE) {
Serial.println("Found non-encrypted network. Store it and exit to connect.");
memset(ssid, 0, MAX_SSID_LEN);
strncpy(ssid, WiFi.SSID(indices[i]).c_str(), MAX_SSID_LEN);
break;
}
}
}
}
void setup() {
Serial.begin(SERIAL_BAUD);
Serial.println("Started.");
}
void loop() {
if(WiFi.status() != WL_CONNECTED) {
/* Clear previous modes. */
WiFi.softAPdisconnect();
WiFi.disconnect();
WiFi.mode(WIFI_STA);
delay(WIFI_DELAY);
/* Scan for networks to find open guy. */
scanAndSort();
delay(WIFI_DELAY);
/* Global ssid param need to be filled to connect. */
if(strlen(ssid) > 0) {
Serial.print("Going to connect for : ");
Serial.println(ssid);
/* No pass for WiFi. We are looking for non-encrypteds. */
WiFi.begin(ssid);
unsigned short try_cnt = 0;
/* Wait until WiFi connection but do not exceed MAX_CONNECT_TIME */
while (WiFi.status() != WL_CONNECTED && try_cnt < MAX_CONNECT_TIME/WIFI_DELAY) {
delay(WIFI_DELAY);
Serial.print(".");
try_cnt++;
}
if(WiFi.status() == WL_CONNECTED) {
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("Cannot established connection on given time.");
}
} else {
Serial.println("No non-encrypted WiFi found.");
}
}
}
하나하다가 :
여기 행운, 당신이 동안 STA 모드에서 다른 채널에서의 AP를 검색 할 수 없습니다. 당신은리스트를 스캔하고 보안 AP를 걸러 낸 다음 왼쪽에있는 WiFi.begin()을 걸러 낼 수 있습니다. – dandavis
"NodeMCU를 사용하고 싶습니다 ..."- NodeMCU 펌웨어를 사용하고 있음을 나타냅니다. "Arduino IDE를 사용하여 루아 어 언어 경험이 없으므로"- 이제 무엇을 할 수 있습니까? NodeMCU/Lua 펌웨어 또는 Arduino? –
Arduino는 장치 관리자에서 NodeMCU 보드를 지원합니다. 하지만 그렇습니다. ESP8266 + Serial to USB 만 수행합니다. – cagdas