ESP8266 Geolocation

Localizarea geografică este o problemă rezolvată cu ajutorul mai multor tehnologii actuale. Tehnologia GPS, cea mai cunoscută și utilizată modalitate de localizare, necesită funcționarea în spații deschise și utilizarea unui receptor specializat. În dispozitivele actuale această tehnologie se utilizează în combinație cu alte metode pentru a crește acuratețea localizării și pentru a oferi posibilitatea de localizare inclusiv în interiorul clădirilor. De exemplu, în telefoanele mobile inteligente, tehnologia GPS este combinată cu triangularizarea semnalelor radio GSM  și WiFi. În cadrul materialului de față vom arăta cum putem utiliza tehnica de localizare bazată pe triangularizarea semnalului WiFi utilizând o placă de dezvoltare WiFi ESP8266 și pe serviciul cloud Google Geolocation API. O astfel de soluție permite realizarea unui dispozitiv de localizare mult mai ieftin decât dispozitivele comerciale bazate pe soluții GPS și care permite localizarea inclusiv în interiorul clădirilor. Singura cerință de funcționare mai specială a dispozitivului este prezența unor rețele WiFi cartografiate de compania Google (cerință îndeplinită cu siguranță în mediul urban).

Pentru implementare am ales o placă de dezvoltare Adafruit Feather HUZZAH dar poate fi utilizată orice placă bazată pe ESP8266. Unul dintre avantajele oferite de placa de dezvoltare aleasă este posibilitatea de alimentare directă de la un acumulator LiPo de 3.7V permițând astfel realizarea unui sistem portabil. Pentru partea de afișare, utilă mai ales în cazul utilizării mobile a dispozitivului implementat, am utilizat un afișaj SHARP Memory Display ce are un consum extrem de redus (4µA @ 3.3V) și un contrast foarte bun.

Cele două componente ale sistemului vor comunica prin intermediul unei conexiuni SPI unidirecționale (doar 3 fire). Asftel, vom conecta:

  • Pinii 3.3V și GND al ecranului la pinii corespondenți ai plăcii de dezvoltare;
  • Pinul CLK al ecranului la pinul 14 al plăcii de dezvoltare;
  • Pinul DI al ecranului la pinul 13 al plăcii de dezvoltare;
  • Pinul CS al ecranului la pinul 5 al plăcii de dezvoltare.

2

Pinul 16 (Wake) al plăcii va fi conectat la pinul RST dacă dorim ca sistemul să intre în modul de consum redus între două localizări (util pentru funcționarea mobilă cu alimentare bazată pe acumulator). Conexiunea trebuie realizată după încărcarea programului pe placa de dezvoltare.

Programul sistemului a fost testat utilizând mediul de dezvoltare Arduino IDE 1.8.5 având instalate extensia ESP8266 Community 2.4.1 și bibliotecile Adafruit GFX 1.2.3, Adafruit SHARP Memory Display 1.0.6 (pentru controlul ecranului) și WifiLocation 1.2.2 (pentru interacțiunea cu Geolocation API).

#include <ESP8266WiFi.h>

#include <WifiLocation.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SharpMem.h>

În cadrul programului trebuie personalizate datele de acces la o rețea WiFi (ssid și passwd) și cheia de acces la serviciile cloud Google (googleApiKey). Pentru a obține cheia de acces trebuie să vă înregistrați ca dezvoltator pe site-ul Google Developers, să activați funcționalitatea GeoLocation API și să solicitați cheia de acces. Accesul este gratuit până la o limită de 2500 de interogări pe zi (evitați o utilizare la un interval mai mic de 30 de secunde).

const char* googleApiKey = “…”;

const char* ssid = “…”;

const char* passwd = “…”;

WifiLocation location(googleApiKey);

#define SHARP_SCK  14

#define SHARP_MOSI 13

#define SHARP_SS   5

Adafruit_SharpMem display(SHARP_SCK, SHARP_MOSI, SHARP_SS, 96, 96);

#define BLACK 0

#define WHITE 1

Directiva debug poate fi utilizată (decomentată) dacă doriți să vedeți mesajele generate de sistem în consola serială.

//#define debug

3

În cadrul secțiunii setup() se va realiza scanarea rețelelor WiFi din zona în care se află sistemul, obținerea coordonatelor geografice de la serviciul cloud de localizare pe baza puterii semnalului fiecărei rețea WiFi observate și afișarea coordonatelor pe ecran (și în consola serială dacă este activată directiva debug). După un ciclu de localizare sistemul va intra în stare de consum redus (deepSleep) pentru 10 minute. Datele afișate vor conține latitudinea și longitudinea precum și acuratețea localizării (exprimată în metri).

4

void setup() {

#ifdef debug

Serial.begin(115200);

#endif

display.begin();

display.clearDisplay();

display.refresh();

WiFi.mode(WIFI_STA);

WiFi.begin(ssid, passwd);

while (WiFi.status() != WL_CONNECTED) {

#ifdef debug

Serial.print(“Attempting to connect to WPA SSID:“);

Serial.println(ssid);

Serial.print(“Status = “);

Serial.println(WiFi.status());

#endif

delay(500);

}

location_t loc = location.getGeoFromWiFi();

#ifdef debug

Serial.println(“Location request data”);

Serial.println(location.getSurroundingWiFiJson());

Serial.println(“Latitude: ” + String(loc.lat, 7));

Serial.println(“Longitude: ” + String(loc.lon, 7));

Serial.println(“Accuracy: ” + String(loc.accuracy));

#endif

display.setTextColor(BLACK);

display.setCursor(12,10);

display.setTextSize(1);

display.println(“Latitude:”);

display.setCursor(5,19);

display.setTextSize(2);

display.println(String(loc.lat, 3));

display.setCursor(12,37);

display.setTextSize(1);

display.println(“Longitude:”);

display.setCursor(5,46);

display.setTextSize(2);

display.println(String(loc.lon, 3));

display.setCursor(12,64);

display.setTextSize(1);

display.println(“Accuracy:”);

display.setCursor(5,73);

display.setTextSize(2);

display.println(String(loc.accuracy));

display.refresh();

ESP.deepSleep(600L*1000000L);

}

void loop() {

}

 

Cum să realizăm un repetor WiFi utilizând ESP8266

Dispozitivele de tip repetor sau amplificator WiFi (WiFi Repeater sau WiFi Extender) sunt utilizate pentru a crește aria de acoperire a rețelelor WiFi. În case sau clădiri de dimensiuni mai mari un singur dispozitiv de acces WiFi, oricât de performant ar fi, este greu să asigure semnal radio WiFi pe toată aria. Utilizarea mai multor dispozitive de acces WiFi independente ridică probleme destul de mari de administrare de rețea și de management a datelor de acces. Soluția mult mai simplă și mai ieftină este utilizarea dispozitivelor de tip repetor WiFi. Aceste dispozitive sunt diponibile comercial la prețuri variate și cu funcționalități și perfomanțe diverse. Totuși, dorim să vă propunem realizarea unui astfel de dispozitiv într-o manieră personală (și extrem de ieftină) utilizând o placă de dezvoltare bazată pe circuitul WiFi ESP8266. Acest circuit are marele avantaj de a putea funcționa simultan atât ca AP cât și ca client WiFi permițând implementarea funcționalității de repetor într-o manieră foarte simplă. Testele au fost realizate utilizând o placă de dezvoltare Adafruit Feather HUZZAH dar la fel de bine pot fi utilizate plăci precum NodeMCU, Sparkfun ESP8266 Thing sau chiar ESP-01.

Pentru a implementa funcționalitatea de repetor WiFi vom utiliza pachetul software esp_wifi_repeater. Pachetul poate fi modificat și recompilat după propriile dorințe înainte de încărcarea pe placa de dezvoltare dar pentru început se pot utiliza fișierele binare oferite de dezvoltatori pachetului (fișierele 0x00000.bin, 0x10000.bin și esp_init_data_default_v08_vdd33.bin din directorul firmware). Pentru încărcarea fișierelor binare se va utiliza utilitarul ESP8266 DOWNLOAD TOOL. După copierea utilitarului și a fișierelor binare pe calculatorul local se poate trece la încărcarea acestora în memoria plăcii. Înainte de apăsarea butonului START aveți grijă să completați adresele de încărcare a fișierelor binare, să selectați portul serial pe care este conectată placa de dezvoltare și, specific plăcii Adafruit Feather HUZZAH, să selectați dimensiunea memoriei flash 32Mbit.

3

După încărcarea în memorie a software-ului putem verifica inițializarea corectă a dispozitivului repetor WiFi cu ajutorul unui utilitar de conectare pe serială (de exemplu Putty). Viteza de conectare serială este 115200 baud.

4

Cea mai simplă modalitate de configurare a acestuia este prin intermediul interfeței web. Dispozitivul se poate configura și prin consola serială sau printr-o conexiune telnet pe portul 7777 dar aceste modalități sunt puțin mai dificile. Pentru a accesa interfața web este necesar să ne conectăm la AP-ul creat de dispozitiv (MyAP) și să accesăm adresa 192.168.4.1.

5

Conectarea la AP-ul dispozitivului se poate observa imediat în consola serială:

6

Interfața web de configurare permite introducerea datelor de acces a rețelei WiFi a cărui semnal dorim să-l extindem ca arie de acoperire (STA Settings) și datele de acces ale noului punct de acces (AP Settings). La finalizarea configurării dispozitivului vom putea face diferența între AP-ul inițial și noul AP (AP-ul repetor) deoarece vor avea denumiri și date de acces diferite. Performanțele oferite de AP-ul bazat pe circuitul ESP8266 nu sunt spectaculoase (maxim 8 clienți și rată de transfer de maxim 5Mbps) dar oferă o modalitate de extindere a ariei de acoperire WiFi extrem de simplă și ieftină. Aceaste dispozitive repetoare WiFi pot fi utilizate pentru rețele IoT sau pentru extinderea semnalului WiFi în spații deschise (parcele mari de teren de exemplu).

7

Dacă dorim ca repetorul WiFi să fie transparent (să nu definim un nou AP cu nume și date de acces proprii) se poate bifa opțiunea Automesh. În acest caz nu mai este necesar să completăm informațiile din secțiunea AP Settings – dispozitivul repetor va propaga semnalul WiFi sub numele rețelei WiFi originale (și datele de conectare vor fi identice). Facilitatea de Automesh permite crearea unei rețele de repetoare WiFi cu până la 5 niveluri permițând extinderea ariei de acoperire într-o manieră impresionantă.

8

Dacă apelăm la configurarea în consolă a dispozitivului repetor WiFi putem accesa funcții avansate implementate în pachetul software utilizat (a se vedea documentația oficială). Printre aceste funcții putem enumera:

  • Configurarea statică a setărilor pentru interfețele de rețea;
  • Definirea de rute (routes) personalizare – facilități de rutare avansată;
  • Definirea de reguli de dirijare a traficului (ACLs) – facilități de firewall;
  • Redirecționarea unor porturi – port mapping;
  • Facilități de raportare prin intermediul protocolului MQTT;

Controlul consumului – dacă tensiunea de alimentare scade sub un anume prag putem configura dispozitivul să intre într-o stare de consum redus.

Managementul conexiunii WiFi la ESP8266

Circuitul WiFi Espressif ESP8266 a reprezentat o evoluție importantă în universul plăcilor de dezvoltare în general dar și a comunității Arduino. Permițând conectivitate WiFi la un preț derizoriu și ușurință de programare și utilizare în cadrul sistemelor DIY, ESP8266 are o popularitate și o răspândire din ce în ce mai mare echipând plăci de dezvoltare diverse.

Facilitățile oferite de extensia ESP8266 pentru Arduino IDE includ conectarea la Internet prin intermediul unui AP, activarea ca un AP, funcționarea duală client WiFi și AP, utilizarea protocoalelor http și https, funcționarea ca server web sau server DNS ș.a.m.d. Toate aceste facilități oferite de circuitul ESP8266 fac din acesta un instrument extrem de util în cadrul proiectelor proprii. Una dintre problemele care apare totuși la construirea unui dispozitiv bazat pe circuitul ESP8266 este managementul datelor de conectarea la rețea. Dacă se dorește schimbarea datelor de acces la rețeaua WiFi (mutăm dispozitivul în altă locație sau modificăm infrastructura de acces la Internet) dispozitivul trebuie reprogramat. Chiar dacă luăm în calcul programarea OTA tot este necesară utilizarea unui sistem de calcul (PC sau laptop cu Arduino IDE instalat) pentru a modifica datele de acces (SSID și parolă).

Bineînțeles, este posibilă programarea unei interfețe web care să permită modificarea variabilelor corespunzătoare datelor de acces dar acest lucru este destul de consumator de timp și adaptarea codului pentru proiecte diverse este o sarcină repetitivă destul de anevoioasă. Din fericire există o bibliotecă software ce permite automatizarea acestui proces și ușurează foarte mult dezvoltarea noilor proiecte în care avem nevoie de modificarea parametrilor de funcționare fără a reprograma dispozitivul.

Această bibliotecă se numește WiFiManager și permite configurarea, prin intermediul unei interfețe web, a conexiunii WiFi în cazul în care configurarea implicită nu funcționează (interfața web de configurare se activează doar în cazul în care conectarea la rețea nu este posibilă cu datele de autentificare curente). Instalarea bibliotecii se face din Library Manager a mediului Arduino IDE. Testele au fost realizate pe o placă NodeMCU utilizând Arduino IDE 1.8.5 și extensia ESP8266 Community 2.4.1.

2

După instalarea bibliotecii facilitățile de configurare se includ în program inserând în cod secvențele următoare. La începutul programului se include biblioteca WiFiManager și dependințele acesteia:

#include <ESP8266WiFi.h>

#include <DNSServer.h>   

#include <ESP8266WebServer.h> 

#include <WiFiManager.h>

WiFiManager wifiManager;

În cadrul secțiunii setup() se înlocuiește codul obișnuit de conectare cu instrucțiunea:

wifiManager.autoConnect();

Execuția acesteia va conduce la conectarea la rețea dacă procesul de configurare a fost deja parcurs sau la blocarea programului și la pornirea interfeței de configurare web. Aceasta va fi accesibilă prin intermediul unui AP propriu sistemului, AP denumit ESPXXXXXX, la adresa IP 192.168.4.1 .

3

Interfața web permite configurarea și salvarea rețelei în care va funcționa dispozitivul, vizualizarea informațiilor hardware specifice plăcii de dezvoltare și resetarea acesteia.

4

5

Dacă conectivitatea de rețea nu este esențială în funcționarea dispozitivului – dispozitivul trebuie să funcționeze și fără conexiunea de rețea – putem adăuga următoarea instrucțiune pentru a defini un timp în care se așteaptă configurarea după care se trece mai departe la execuția normală a programului.

wifiManager.setConfigPortalTimeout(180);

În cazul în care dorim totuși să reluăm periodic tentativa de conectare la rețea, utilă de exemplu în cazul în care repornirea sistemului coincide cu indisponibilitatea AP-ului – datele de conectare sunt corecte dar în momentul în care se încearcă conectarea nu este disponibilă infrastructura, se poate insera o secvență de instrucțiuni, ca în exemplul de mai jos, în secțiunea loop():

if (WiFi.status() != WL_CONNECTED) wifiManager.autoConnect();

Pagina web de configurare poate fi pornită și în mod voit (la apăsarea unui buton de exemplu) prin intermediul instrucțiunii:

wifiManager.startConfigPortal();

O altă facilitate interesantă oferită de bibliotecă este posibilitatea de a adăuga în cadrul paginii de configurare a unor parametrii proprii ce vor fi salvați în memoria nevolatilă a circuitului ESP8266. Instrucțiunile de mai jos definesc o variabilă server ce permite memorarea adresei de rețea a unui server MQTT. Datele de configurat vor apărea în interfața web alături de configurația de acces în rețeaua WiFi.

WiFiManagerParameter custom_mqtt_server(“server”, “mqtt server”, mqtt_server, 40);

wifiManager.addParameter(&custom_mqtt_server);

mqtt_server = custom_mqtt_server.getValue();

6

Solar Power WiFi Test

Implementarea unui proiect cu alimentare solară prezintă mai multe avantaje printre care, bineînțeles, se evidențiază independența de rețeaua electrică tradițională. În același timp un astfel de proiect ridică și multe probleme legate de dimensionarea soluției de alimentare și alegerea componentelor potrivite. Care este dimensiunea panoului solar? Ce soluție de stocare a energiei electrice alegem? Ce soluție de încărcare a acumulatorilor este cea mai potrivită? Acestea sunt câteva dintre întrebările la care vom încerca să răspundem în cadrul acestui proiect. Chiar dacă se poate face o evaluare inițială la nivel teoretic, în cadrul testului nostru vom alege varianta testării efective a soluției alese și evidențierea avantajelor și a punctelor slabe ale acesteia.

Ca soluție de maximizare a eficienței captării energiei solare și de încărcare a acumulatorului vom utiliza o componentă MPPT: Sunny Buddy – MPPT Solar Charger.

2

Această componentă permite conectarea unei celule solare cu ieșirea între 6V și 20V și încărcarea unui acumulator LiIon sau LiPo cu o singură celulă (3.7V). Curentul maxim de încărcare este de 450mA deci este necesară utilizarea unui acumulator de capacitate minimă 450mAh. În testul nostru vom utiliza o celulă solară de 2.5W / 9V și un acumulator LiPo de 800mAh. Pentru a supraveghea procesul de încărcare / descărcare a acumulatorului vom utiliza o placă de dezvoltare Adafruit Feather HUZZAH ce va raporta datele măsurate prin intermediul conexiunii WiFi către serviciul cloud iot.robofun.ro. Placa de dezvoltare se va alimenta de la acumulatorul LiPo conectat la componenta MPPT și va servi ca element de descărcare pentru acesta. Pentru o acuratețe mai bună a măsurătorilor vom utiliza o componentă ce va monitoriza nivelul de încărcare a bateriei: LiPo Fuel Gauge. Componenta de monitorizare se va intercala între ieșirea componentei MPPT și alimentarea plăcii de dezvoltare și va raporta prin intermediul unei magistrale I2C nivelul de încărcare a bateriei.

3

Diagrama de interconectare între componentele sistemului de test este următoarea:

4

Înainte de realizarea montajului și punerea lui în funcțiune este recomandată parcurgerea documentațiilor oficiale ale componentelor utilizate:

Atenție!!! Schema precedentă este schema finală de test. În momentul programării plăcii de dezvoltare trebuie să deconectăm alimentarea plăcii prin intermediul componentei de măsurare (să deconectăm placa de dezvoltare de componenta LiPo Fuel Gauge) și să deconectăm pinul Reset de pinul Wake (GPIO16) – firul galben.

Programul sistemului a fost dezvoltat și testat utilizând Arduino IDE 1.8.5, extensia ESP8266 Community 2.4.0 și biblioteca LiFuelGauge 1.0.

#include <Wire.h>

#include <ESP8266WiFi.h>

#include <ESP8266HTTPClient.h>

#include <LiFuelGauge.h>

În cadrul programului trebuie personalizate datele de conectare la rețeaua WiFi (variabilele ssid[] și pass[]).

char ssid[] = “…”;

char pass[] = “…”;

LiFuelGauge gauge(MAX17043);

Secțiunea setup() se va ocupa cu inițializarea comunicației cu modulul de măsurare a tensiunii din acumulator și cu inițializarea comunicației WiFi.

void setup() {

  gauge.reset();

  WiFi.mode(WIFI_STA);

  WiFi.hostname(“ESP_SolarMeter”);

  WiFi.begin(ssid, pass);

  byte retry = 0;

  while ((WiFi.status() != WL_CONNECTED) && (retry<10)) {

    delay(1000);

    retry++;

    if (retry==10) ESP.restart();

  }

}

Secțiunea loop() conține partea de citire a măsurătorilor efectuate de componenta LiPo Fuel Gauge și de trimiterea acestor măsurători către serviciul IoT. În cadrul programului trebuie personalizate cheile de autentificare (SENZOR_TOKEN1 și SENZOR_TOKEN2) obținute în urma înregistrării gratuite pe iot.robofun.ro. Postarea măsurătorilor se va face la un interval de o oră. Între măsurători sistemul va funcționa în mod de consum redus (deepSleep) pentru a minimiza consumul de energie și maximiza durata de funcționare.

void loop() {

  float batPercentage = gauge.getSOC();

  float batVoltage = gauge.getVoltage(); 

  String SENSOR_TOKEN1=”…”;

  String SENSOR_TOKEN2=”…”;

  HTTPClient http;

  String data =

String(“http://iot.robofun.ro/api/v1/senzor/&#8221;) + SENSOR_TOKEN1 + “/input?value=” + String(batVoltage, DEC);

  http.begin(data);

  int httpCode = http.GET();

  delay(100);

  http.end();

  data = String(“http://iot.robofun.ro/api/v1/senzor/&#8221;) + SENSOR_TOKEN2 + “/input?value=”  + String(batPercentage, DEC);

  http.begin(data);

  httpCode = http.GET();

  delay(100);

  http.end();

  ESP.deepSleep(3600L*1000000L);

}

Testarea sistemului va indica următoarele lucruri esențiale în funcționarea acestuia:

  • Sistemul de încărcare solar este capabil să înmagazineze într-o zi însorită suficientă energie pentru funcționarea sistemului pentru 24 de ore – sistemul poate funcționa autonom într-o perioadă însorită. Mai jos este graficul furnizat de serviciul iot.robofun pentru o succesiune de două zile însorite consecutive. Se poate observa că sistemul recuperează energia consumată peste noapte în timpul zilei.

5

6

  • Peste noapte sistemul pierde circa 30% din capacitatea acumulatorului. Asta înseamnă că sistemul poate funcționa circa trei zile fără reîncărcare (zile fără soare / înorate).

7

  • După epuizarea completă a energiei din acumulator sistemul nu este capabil să repornească singur chiar dacă urmează o zi însorită. Acest lucru este cauzat de curentul mare necesar la inițializarea plăcii de dezvoltare (peste 450mA, peste curentul furnizat de componenta Sunny Buddy). Sistemul nu va reuși să intre în mod de consum redus pentru a lăsa acumulatorul să se reîncarce și va rămâne într-o secvență infinită de inițializare ce va opri procesul de reacumulare a energiei solare.

Testul relevă posibilitatea limitată de funcționare a sistemului propus. Acesta poate funcționa o perioadă nedeterminată de timp în mod autonom atâta timp cât nu apare o succesiune de mai mult de două zile complet înnorate. Curentul mare necesar la inițializarea plăcii de dezvoltare blochează reluarea procesului de reîncărcare solară. Totuși, cu un alt consumator ce necesită un curent mai mic de inițializare, sistemul ar putea funcționa autonom și și-ar putea relua activitatea după o perioadă lungă fără lumină solară.

Monitorizarea pachetelor WiFi utilizând ESP8266

Spre deosebire de rețelele de comunicație ethernet, rețelele radio fără fir (inclusiv rețelele WiFi) utilizează un mediu de transmisie ce nu poate fi controlat: aerul. Din acest motiv interceptarea pachetelor se poate face de către orice dispozitiv ce poate recepționa traficul radio pe frecvența de emisie. Bineînțeles, în cazul traficului WiFi acest lucru nu înseamnă în mod automat și pierderea confidențialității transmisiei deoarece comunicația este cifrată dar se poate determina numărul de pachete pe un anume canal (încărcarea unui anume canal WiFi).

În cadrul materialului de față vom exemplifica monitorizarea pachetelor WiFi utilizând un circuit WiFi ESP8266, mai exact o placă de dezvoltare Adafruit Feather HUZZAH ESP8266 (se poate utiliza orice placă de dezvoltare bazată pe circuitul ESP8266). Sistemul de monitorizare va dispune și de un ecran OLED monocrom pe care se va afișa graficul evoluției traficului WiFi și de un buton brick ce va permite modificarea canalului WiFi. Comunicația între placa de dezvoltare și ecranul OLED se va face prin intermediul magistralei I2C iar butonul se va conecta la un pin digital al plăcii de dezvoltare.

2

Ecranul OLED va fi alimentat la 3.3V și va avea pinii Clk și Data conectați la pinii SCL (pinul 5) și SDA (pinul 4) ai plăcii de dezvoltare. Butonul va avea ieșirea (OUT) conectată la pinul 0 al plăcii de dezvoltare. ATENȚIE!!! Alimentarea butonului are firele inversate (GND la 3.3V și VCC la GND) deoarece apăsarea butonului se va citi pe 0 logic. Placa de dezvoltare are conectat pe pinul 0 un LED ce se va aprinde la fiecare apăsare a butonului.

Pentru programarea plăcii s-a folosit Arduino IDE 1.8.5 având instalate extensia ESP8266 Community versiunea 2.4.1 și biblioteca ESP8266 and ESP32 Oled Driver for SSD1306 display versiunea 4.0.0. Programul principal se bazează pe PacketMonitor, proiect scris de Stefan Kremser. Versiunea proiectului ce a fost testată este  b6b977b din 5 aprilie 2018. Proiectul necesită următoarele mici modificări în partea de inițializare:

  • Linia 21 va deveni (magistrala I2C e conectată invers față de montajul utilizat în proiect iar adresa afișajului este 0x3c):

SSD1306 display(0x3c, 4, 5);

  • Linia 25 va deveni (butonul este conectat pe linia GPIO0):

#define btn 0

După încărcarea proiectului în memoria plăcii de dezvoltare vom putea monitoriza ce canal WiFi dorim din punctul de vedere al numărului de pachete. Monitorizarea pachetelor nu se va face pentru o anumită rețea WiFi ci pentru toate rețelele WiFi ce utilizează respectivul canal. Graficul de pe ecranul OLED ilustrează istoricul monitorizării. Sistemul poate fi utilizat atât pentru a evalua numărul de pachete radio WiFi din imediata apropiere dar și pentru stabilirea canalului WiFi pentru un nou AP (se va alege, bineînțeles, canalul cel mai puțin aglomerat).

4

Prin apăsarea butonului conectat la pinul GPIO0 se va putea incrementa numărul canalului WiFi monitorizat (de la 1 la 13 ciclic).

5

O altă funcționalitate interesantă a proiectului este detecția atacurilor WiFi de tip dezautentificare. Autorul proiectului prezentat are chiar o versiune de sistem (format dintr-un modul ESP-12 și un LED) dedicat detecției acestui tip de atac specific rețelelor WiFi: DeauthDetector.

6

Mai mult decât atât, Stefan Kremser a conceput o versiune a proiectului ce se bazează pe circuitul ESP32: proiectul PacketMonitor32. Această versiune aduce în plus o facilitate extrem de interesantă: posibilitatea de a înregistra pachetele WiFi interceptate pe o memorie SD card. Conținutul cardului de memorie poate fi analizat ulterior cu un utilitar specializat gen Wireshark.

7

Proiectul prezentat se bazează pe proprietatea circuitului WiFi ESP8266 de a funcționa în mod promiscous adică de a putea intercepta pachete chiar dacă nu îi sunt adresate. Un proiect similar este și proiectul „ESP8266 Mini Sniff”.