Projektbeskrivelse - mpark1306/IndoorPos GitHub Wiki

Indhold


OBS!

Projektet er et "rough draft"! Der er mange ting man kan gøre bedre, flottere og mere præcist, men grundet tidsbegrænsning har vi restrikteret projektet.

Systemoversigt

PyShow-systemet bruger flere ESP32-enheder som "ankre" (anchors) til at opfange WiFi-enheder i nærheden. Hver ESP32 sender RSSI-målinger (signalstyrke) for fundne MAC-adresser til en central computer, hvor et Python-script beregner og visualiserer positioner vha. trilateration. Systemet understøtter nu 4 anchors.


Hardwarekrav

  • 4 stk. ESP32 (helst samme model)
  • 1 PC på samme WiFi/LAN som ESP32’erne
  • Stabilt WiFi-netværk (samme kanal for alle enheder)
  • (Evt. USB-strømforsyning eller powerbank til ESP32)

Netværksopsætning

  • Alle ESP32 skal være forbundet til samme WiFi som PC’en.
  • PC’en skal have en fast IP-adresse (fx 192.168.0.204).
  • UDP-port 5005 skal være åben på PC’en (Windows Firewall: tillad indgående på port 5005).

ESP32: Firmware og opsætning

1. Unik MAC-adresse pr. ESP32

Sæt en unik MAC-adresse på hver ESP32, så de matcher Python-scriptets ANCHORS:

Find MAC addressen

#include <WiFi.h>

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);  // Set as Station (no WiFi connection needed)
  Serial.print("ESP32 MAC Address: ");
  Serial.println(WiFi.macAddress());
}

void loop() {
  // Nothing here
}

Indsæt i koden

// Eksempel (Arduino-style)
uint8_t newMAC[] = {0xE8, 0x6B, 0xEA, 0xD4, 0x30, 0x34}; // Anchor A
esp_wifi_set_mac(WIFI_IF_STA, newMAC);

Gentag for Anchor B, C og D med de relevante MAC-adresser.

2. UDP-opsætning

ESP32’en skal sende UDP-pakker til PC’ens IP og port 5005:

WiFiUDP udp;
udp.beginPacket("192.168.0.204", 5005);
udp.write((uint8_t*)json, strlen(json));
udp.endPacket();

3. WiFi scanning (ikke promiscuous mode)

Brug WiFi scanning (fx WiFi.scanNetworks() eller esp_wifi_scan_start) for at kunne sende UDP-pakker. Promiscuous mode blokerer UDP.

4. JSON-format

Send data i dette format:

{"anchor":"EC:64:C9:85:72:C0","target":"68:FF:7B:0E:43:5E","rssi":-54}

Python-script: Installation og brug

1. Krav

  • Python 3.x
  • Pakker: matplotlib, threading, socket, json

Installer fx med:

pip install matplotlib

2. Konfiguration

Rediger ANCHORS-dictionary i toppen af scriptet, så MAC-adresser og koordinater matcher jeres fysiske opsætning.

ANCHORS = {
    "E8:6B:EA:D4:30:34": (0.0, 0.0),    # Anchor A
    "EC:64:C9:85:72:C0": (0.0, 15.0),   # Anchor B
    "0C:8B:95:76:AD:20": (5.0, 0.0),    # Anchor C
    "0C:8B:95:76:1F:00": (15.0, 5.0)    # Anchor D
}

3. Start scriptet

Kør scriptet på PC’en:

python Run.py

4. Visualisering

  • Blå firkanter: Anchors
  • Røde cirkler: Trilatererede positioner (set af 3+ anchors)
  • Gule trekanter: Approximerede positioner (set af 1-2 anchors)
  • Fadede røde cirkler: Sidst kendte position (op til 10 sekunder gammel)
⚠️ **GitHub.com Fallback** ⚠️