Projektbeskrivelse - mpark1306/IndoorPos GitHub Wiki
- Systemoversigt
- Hardwarekrav
- Netværksopsætning
- ESP32: Firmware og opsætning
- Python-script: Installation og brug
- Fejlfinding
- Tips og tricks
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.
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.
- 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)
- 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).
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.
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();
Brug WiFi scanning (fx WiFi.scanNetworks()
eller esp_wifi_scan_start
) for at kunne sende UDP-pakker. Promiscuous mode blokerer UDP.
Send data i dette format:
{"anchor":"EC:64:C9:85:72:C0","target":"68:FF:7B:0E:43:5E","rssi":-54}
- Python 3.x
- Pakker:
matplotlib
,threading
,socket
,json
Installer fx med:
pip install matplotlib
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
}
Kør scriptet på PC’en:
python Run.py
- 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)