Эксперимент 56. Просмотр списка WiFi сетей

Начинаем раздел экспериментов, посвященных работе с сетью и интернет. Наш конструктор имеет микроконтроллер со встроенной поддержкой Wi-Fi. Работу с сетью начнем с того, что посмотрим какие Wi-Fi сети находятся в зоне доступа.

Если у тебя дома нет Wi-Fi, то не беда. Любой Android или iOS смартфон может выполнять роль Wi-Fi роутера. В зависимости от версии операционной системы и графической оболочки, данная функция может включаться по- разному. За справкой обратись к инструкции от своего смартфона.

Программный код эксперимента

Exp56.ino
  1. #include <ESP8266WiFi.h>
  2.  
  3. void setup() {
  4. Serial.begin(9600);
  5. Serial.println();
  6. WiFi.mode(WIFI_STA);
  7. WiFi.disconnect();
  8. delay(500);
  9. }
  10.  
  11. void loop() {
  12. Serial.println("Scan start");
  13. int n = WiFi.scanNetworks();
  14. Serial.println("Scan done");
  15. if (n == 0) {
  16. Serial.println("no networks found");
  17. } else {
  18. Serial.print(n);
  19. Serial.println(" networks found");
  20. for (int i = 0; i < n; ++i) {
  21. Serial.print(i + 1);
  22. Serial.print(": ");
  23. Serial.print(WiFi.SSID(i));
  24. Serial.print(" (");
  25. Serial.print(WiFi.BSSIDstr(i));
  26. Serial.print(", ");
  27. Serial.print(WiFi.channel(i));
  28. Serial.print(", ");
  29. Serial.print(WiFi.RSSI(i));
  30. Serial.print(", ");
  31.  
  32. switch(WiFi.encryptionType(i)) {
  33. case AUTH_OPEN: Serial.print("OPEN, ");
  34. case AUTH_WEP: Serial.print("WEP, ");
  35. case AUTH_WPA_PSK: Serial.print("WPA-PSK, ");
  36. case AUTH_WPA2_PSK: Serial.print("WPA2-PSK, ");
  37. case AUTH_WPA_WPA2_PSK: Serial.print("WPA/WPA2-PSK, ");
  38. case AUTH_MAX: Serial.print("AUTH_MAX, ");
  39. }
  40.  
  41. Serial.print(WiFi.isHidden(i));
  42. Serial.println(")");
  43. }
  44. }
  45. Serial.println();
  46. delay(30000);
  47. }

Сначала мы подключаем стандартную библиотеку ESP8266WiFi. Устанавливаем режим клиента (наш микроконтроллер может работать и сам как точка доступа, работа в таком режиме будет рассмотрена позже).

  1. WiFi.mode(WIFI_STA);

Принудительно отключается от сети.

  1. WiFi.disconnect();

В основном цикле получаем список доступных сетей

  1. int n = WiFi.scanNetworks();

Выводим список доступных сетей в терминал и ждем 30 секунд.

После этого в терминал будет выведен список сетей. В нашем случае это

Scan start
Scan done
7 networks found
1: TP-LINK_CF44_Ext (00:E0:20:68:5C:73, 2, -78, WPA/WPA2-PSK, 0)
2: TP-LINK_CF44 (C0:25:E9:38:CF:44, 2, -85, WPA/WPA2-PSK, 0)
3: 1125 (50:FF:20:0D:01:25, 7, -71, WPA/WPA2-PSK, 0)
4: Freedom (18:31:BF:02:A2:00, 8, -47, WPA/WPA2-PSK, 0)
5: TP-Link_CFBB (B0:BE:76:88:CF:BB, 1, -90, WPA/WPA2-PSK, 0)
6: NEW_ASUS (04:D9:F5:ED:31:A0, 13, -80, WPA/WPA2-PSK, 0)
7: NEW_ASUS (54:A0:50:71:9E:B0, 13, -90, WPA/WPA2-PSK, 0)

По каждой сети отображается информация:

  • SSID — Символическое имя точки доступа
  • BSSID — MAC адреса точки доступа
  • Channel — номер радио канала WiFi
  • RSSI — мощность сигнала
  • authmode - Шифрование
  • hidden - видимость точки доступа. 0 - видимая, 1 - скрытая

Примерные значения соответствия силы сигнала Wi-Fi и его качества:

  • Отличные показатели: от -35 до -50 дБм
  • Хорошие показатели: от -50 до -65 дБм
  • Удовлетворительные показатели: от -65 до -75 дБм
  • Плохие показатели: от -75 до -85 дБм
  • Неприемлемые значения: от -85 до -100 дБм

Возможные варианты authmode:

  • 0 – open
  • 1 – WEP
  • 2 – WPA-PSK
  • 3 – WPA2-PSK
  • 4 – WPA/WPA2-PSK

Из всех этих данных нас в первую очередь интересует, конечно, имя сети. Мы должны убедиться, что нужная нам сеть доступна (домашний Wi-Fi или точка доступа на базе смартфона). Кроме того нужно убедиться, что сигнал достаточно сильный. Если уровень сигнала менее -70, то сигнал слабый и соединение с такой точкой не может быть стабильным. В таком случае необходимо переместиться ближе к точке доступа.