Radioelektronika havaskorlari saytiga xush kelibsiz!
WiFi-tarmoqlar bilan ishlash utilitalari [18+]
(Material to’ldirish jarayonida)
Qurilmani WiFi orqali boshqarishga o’tishdan oldin, hududda WiFi tarmoqlari mavjudligi, ularning himoyalangan (yopiq tarmoq) yoki himoyalanmaganligini (ochiq tarmoqligini) aniqlash, WiFi marshrutizator (router) signallarining darajasini aniqlash talab etiladi. Quyida shunday maqsadlar uchun mo’ljallangan Arduino IDE sketchlari bilan tanishamiz. Umuman, ushbu dars materialida muntazam ravishda Arduinochi-dasturchilar uchun WiFi-tarmoqlar bilan ishlashga mo’ljallangan turli utilitalar haqidagi ma’lumotlar joylashtirib boriladi.
Dastlab dastur menyusining “Примеры/ESP8266WiFi” bo’limidagi “WiFiScan” tayyor namunaviy sketch bilan tanishamiz.
ESP8266 va ESP32 mikrokontrollerlar oilasiga tegishli platalarda ichki WiFi modullar o’rnatilgan, ya’ni, ular asosidagi qurilmalarni WiFi orqali boshqarish uchun alohida WiFi-modullardan foydalanish talab etilmaydi. Biz WiFi tarmoqlarini izlashga mo’ljallangan sketch bilan ishlashda Wemos D1 mini platasidan foydalanamiz. Sketchga hech qanday o’zgarish kiritish talab etilmaydi (faqat inglizha so’zlar tarjima qilingan).
void loop() {
String ssid;
int32_t rssi;
uint8_t encryptionType;
uint8_t *bssid;
int32_t channel;
bool hidden;
int scanResult;
Serial.println(F(“WiFi tarmoqlarni izlash…”));
scanResult = WiFi.scanNetworks(/*async=*/false, /*hidden=*/true); // Yashirin tarmoqlarni qo’shgan holda izlaymiz, ulsr sonini o’zgaruvchiga o’zlashtiramiz
if (scanResult == 0) {
Serial.println(F(“Tarmoq topilmadi”));
} else if (scanResult > 0) {
Serial.printf(PSTR(“%d ta tarmoq topildi:\n”), scanResult);
for (int8_t i = 0; i < scanResult; i++) { // Topilgan tarmoqlar nomlari va xususiyatlari bo’yicha ro’yxatini tuzamiz
WiFi.getNetworkInfo(i, ssid, encryptionType, rssi, bssid, channel, hidden);
const bss_info *bssInfo = WiFi.getScanInfoByIndex(i);
String phyMode;
const char *wps = “”;
if (bssInfo) {
phyMode.reserve(12);
phyMode = F(“802.11”);
String slash;
if (bssInfo->phy_11b) {
phyMode += ‘b’;
slash = ‘/’;
}
if (bssInfo->phy_11g) {
phyMode += slash + ‘g’;
slash = ‘/’;
}
if (bssInfo->phy_11n) {
phyMode += slash + ‘n’;
}
if (bssInfo->wps) {
wps = PSTR(“WPS”);
}
}
Serial.printf(PSTR(” %02d: [CH %02d] [%02X:%02X:%02X:%02X:%02X:%02X] %ddBm %c %c %-11s %3S %s\n”), i, channel, bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5], rssi, (encryptionType == ENC_TYPE_NONE) ? ‘ ‘ : ‘*’, hidden ? ‘H’ : ‘V’, phyMode.c_str(), wps, ssid.c_str());
yield();
}
} else {
Serial.printf(PSTR(“WiFi tarmoqlarni izlashda xatolik %d”), scanResult);
}
delay(5000); // Takroriy izlashdan oldin pauza o’rnatamiz
}
Navbatdagi misol yordamida esa, WiFi tarmoq Internetga ulangan yoki ulanmaganligini aniq bir saytga “ping” buyrug’ini yuborish orqali aniqlashimiz mumkin. “HostPing” sketchi Arduino IDE menyusining “Примеры/ESP8266Ping” bo’limidan yuklanadi (sketch izohlar bilan keltiriladi):
Saytga ping yuborish
#include <ESP8266WiFi.h> // Kerakli bibliotekalarni ulaymiz
#include <ESP8266Ping.h>
const char* ssid = “ssid”; // mavjud tarmoq nomini (SSID sini) kiritamiz
const char* password = “12345678”; // o’z WiFi tarmog’imiz parolini kiritamiz
const char* remote_host = “www.google.com”; // tekshiriladigan sayt manzilini ko’rsatamiz
Xuddi shuningdek, “ping” buyrug’ini aniq IP-manzil bo’yicha yuborish kerak bo’lsa, quyidagi “SimplePing” sketchidan foydalanish mumkin (“Примеры/ESP8266Ping” bo’limidan yuklanadi):
IP-manzilga ping yuborish
#include <ESP8266WiFi.h> // Kerakli bibliotekalarni ulaymiz
#include <ESP8266Ping.h>
const char* ssid = “ssid”; // mavjud tarmoq nomini (SSID sini) kiritamiz
const char* password = “12345678”; // o’z WiFi tarmog’imiz parolini kiritamiz
const IPAddress remote_ip(192, 168, 0, 1); // tekshiriladigan IP-manzilni ko’rsatamiz
ESPProLib sketchi. Ushbu utilita yordamida ESP8266 mikrokontrollerlari yordamida hududdagi WiFi qurilmalar haqida quyidagi texnik detallarni (ma’lumotlarni) olish mumkin:
1) “Kadr turi”, 2) “Kadr ichki turi”, 3) “Signal manbai MAC-manzili”, 4) “Mo’ljal” (signalni qabul qiluvchi) MAC-manzili, 5) “RSSI” (qabul qilingan signal quvvati), 6) “Keyingi raqam”, 7) “Kanal raqami”, 8) “SSID” (Tarmoq nomi).
Ushbu ma’lumotlar yordamida ko’plab qiziqarli loyihalarni yaratish mumkin. Sketch ishlashi uchun ESPProLib bibliotekasi kerak bo’ladi.
Sketch:
Yuqoridagi sketch yordamida olingan texnik ma’lumotlar (masalan, manba MAC-manzili) yordamida aniq bir qurilma hududda mavjudligi, signal manbai WiFi moduli qaysi mo’ljal-qurilma WiFi moduliga ma’lumot yuborayotganligini aniqlash mumkin.
Xususan, navbatdagi “FriendFinder” sketchi yordamida o’zimizga oldindan tanish MAC-manzilli smartfon egasining sniffer joylashgan hududga kelganligi yoki aksincha, hududdan ketganligini, shuningdek, u qaysi MAC-manzilli qurilma bilan ma’lumot almashganligini aniqlash mumkin.