Blynk the Siren

Sirenele vizuale sunt elemente ce permit avertizarea unor situații de urgență dar pot fi și elemente de divertisment vizual. În cadrul materialului de față dorim să vă propunem un sistem de comandă la distanță (prin WiFi) a unei astfel de sirene luminoase.

Pentru comandă vom utiliza o placă de dezvoltare Adafruit Feather HUZZAH ESP8266 și un shield mini releu bistabil FeatherWing. Shieldul se conectează la placă în mod simplu (ca orice shield Arduino) dar este necesară realizarea a două conexiuni suplimentare: pinul SET la shield-ului se conectează la pinul 4 al shield-ului iar pinul UNSET la pinul 5. Pentru mai multe detalii legate de funcționarea shield-ului puteți consulta materialul „Mini Relay FeatherWings”.

Pentru transmiterea comenzii prin Internet se va utiliza serviciul Blynk despre care am vorbit și în materialul „Cum să realizăm un sistem IoT fără să scriem nici o linie de cod?”.. Programul pentru placa de dezvoltare a fost dezvoltat și testat utilizând mediul Arduino IDE 1.8.5 având instalate extensia ESP8266 Community 2.4.1 și biblioteca Blynk 0.5.3.

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

În cadrul programului trebuie personalizate datele de acces la o rețea WiFi și cheia de acces la serviciul Blynk ce se obține prin înregistrare gratuită.

char auth[] = „…”;

char ssid[] = „…”;

char pass[] = „…”;

#define SETPin 4

#define UNSETPin 5

În cadrul secțiunii setup() vom inițializa pinii de comandă (pinii 4 și 5 de SET și UNSET) și comunicația cu serviciul Blynk.

void setup() {

pinMode(SETPin, OUTPUT);

pinMode(UNSETPin, OUTPUT);

digitalWrite(SETPin,LOW);

digitalWrite(UNSETPin,LOW);

Blynk.begin(auth, ssid, pass);

}

Procedura BLYNK_WRITE va primi comenzile transmise prin serviciul Blynk și va comanda releul prezent pe shield. Secțiunea loop nu conține altceva decât apelul la procedura de primire a comenzilor.

BLYNK_WRITE(V0) {

int pinValue = param.asInt();

if (pinValue) {

digitalWrite(SETPin,HIGH);

delay(10);

digitalWrite(SETPin,LOW);

}

else {

digitalWrite(UNSETPin,HIGH);

delay(10);

digitalWrite(UNSETPin,LOW);

}

}

void loop() {

Blynk.run();

}

Comanda se va realiza de pe un telefon mobil ce rulează Android și pe care trebuie instalată aplicația Blynk.

2

În cadrul aplicației vom crea un proiect nou ce va conține un buton de tip switch asociat cu pinul virtula V0.

3

4

Astfel vom putea comanda de la distanță prin intermediul Internet-ului releul de pe shield. Bineînțeles, proiectul de comandă se poate îmbunătăți, se pot adăuga diverși alți declanșatori automați de tip timer sau chiar senzori.

Pentru finalizarea sistemului nu mai rămâne decât conectarea ansamblului de comandă (placă de dezvoltare + shield) la sirena luminoasă. Dispozitivul de sirenă luminoasă poate fi cumpărat la un preț modic din magazinele de jucării. Acesta se poate porni / opri cu ajutorul unui întrerupător ce controlează alimentarea componentele electronice interne.

5

Prin desfacerea carcaseri se deconectează acest întrerupător și se conectează la shield-ul sistemului.

6

Firele deconectate se vor conecta după cum urmează: firul care vine de la compartimentul cu baterii de va conecta în pinul conectorului cu șurub al shield-ului COM, pinul care pleacă spre componentele electronice ale sirenei luminoase se va conecta la pinul NO.

7

După efectuarea conexiunilor nu mai rămâne decât să vă bucurați de sistemul de comandă nou creat. Blynk the Siren!

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”.