⇧
vadnica-logo
Editor Moj Blog Geselnik Finance Moje storitve O projektu Telegram O meni O meni

Projekt: WiFi skener

V tem projektu bomo uporabili ESP32 za nevidno zaznavanje prisotnosti oseb. Namesto senzorjev gibanja bomo uporabili WiFi omrežje. ESP32 bo preveril, če so pametni telefoni družinskih članov povezani na domači router.

Tehnični opomnik

Navodila za vezavo

Za pravilno delovanje zaslona povežite pine po naslednji tabeli:

TFT Pin Nano ESP32 Pin Opis
VCC 3.3V Napajanje (ne 5V!)
GND GND Ozemljitev
SCL (SCK) D13 SPI Clock
SDA (MOSI) D11 SPI Data
RES (RST) D8 Reset (nastavljeno v kodi)
DC D9 Data/Command
CS D10 Chip Select
BLK 3.3V Osvetlitev ozadja

Celotna koda projekta

Spodnja koda skenira lokalno omrežje in na TFT 2.0 zaslonu v realnem času prikazuje status naprav. Sistem vsakih 10 sekund preveri (ping-a) določene IP naslove in izpiše, ali je naprava prisotna v omrežju.

// Projekt: WiFi skener s prikazom na TFT 2.0 zaslonu
// Avtor: Borut Bukovnik - vadnica.org

#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#include <WiFi.h>
#include <ESP32Ping.h>

// Pini za TFT zaslon
#define TFT_CS 10
#define TFT_DC 9
#define TFT_RST 8

// WiFi podatki
const char* ssid = "TVOJE_WIFI_IME";
const char* password = "TVOJE_GESLO";

// IP naslovi naprav
const char* ip_prva = "VPIŠI_IP_NAPRAVE"; 
const char* ip_druga = "VPIŠI_IP_NAPRAVE";

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

void setup() {
    tft.init(240, 320);
    tft.setRotation(1);
    tft.fillScreen(ST77XX_BLACK);
    
    tft.setTextColor(ST77XX_WHITE);
    tft.setTextSize(2);
    tft.setCursor(10, 10);
    tft.print("Povezujem WiFi...");
    
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) { 
        delay(500); 
    }
    
    tft.fillScreen(ST77XX_BLACK);
}

void prikaziStatus(int y, const char* ime, bool prisoten) {
    tft.setCursor(10, y);
    tft.setTextSize(2);
    tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
    tft.print(ime);
    tft.print(": ");
    
    if (prisoten) {
        tft.setTextColor(ST77XX_GREEN, ST77XX_BLACK);
        tft.println("DOMA     ");
    } else {
        tft.setTextColor(ST77XX_RED, ST77XX_BLACK);
        tft.println("NI DOMA  ");
    }
}

void loop() {
    tft.setCursor(10, 10);
    tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK);
    tft.setTextSize(2);
    tft.println("PREVERJANJE...  ");
    
    // Preveri prvo napravo
    bool status1 = Ping.ping(ip_prva);
    prikaziStatus(60, "Naprava 1", status1);
    
    // Preveri drugo napravo
    bool status2 = Ping.ping(ip_druga);
    prikaziStatus(100, "Naprava 2", status2);
    
    delay(10000); // Osveži vsakih 10 sekund
}

Potreben material