SpaceMap
De SpaceMap is een elektronische landkaart die van alle hackerspaces in Nederland aangeeft of ze open of dicht zijn. Op de locatie van elke hackerspace zit een lampje die met kleur de status aangeeft. Bij het opvragen van de status wordt gebruik gemaakt van WiFi en de SpaceApi standaard. Naast de lampjes op de landkaart worden de namen van de hackerspaces ook weergegeven op een led matrix. Wanneer een hackerspace open of dicht gaat zal er ook een geluid klinken.
Op dit moment wordt de status van de volgende 16 hackerspaces op de SpaceMap weergegeven: Frack, Hackerspace Drenthe, Hackerspace Drenthe (Emmen), TkkrLab, Hack42, Bitlair, TechInc, RevSpace, The Space Leiden, Pixelbar, RandomData, NURDspace, Hackerspace Nijmegen, Hackalot, Hackerspace TDvenlo, Ackspace .
Om een hackerspace aan de kaart toe te voegen moet deze in de software toegevoegd worden, samen met een nieuwe LED op de landkaart. SpaceAPI urls worden van de SpaceAPI directory opgehaald.
Van start project tot aan de muur bij TDvenlo: Juni 2019…Juni 2020
— Ron Theelen
Verschillende schermen
Op de led matrix worden de schermen A, B en C afwisselende schermen weergegeven volgens het onderstaande tijdsschema dat zich elke 5 minuten herhaalt. Met de onderste knop aan de zijkant van het scherm kun je ook de schermen handmatig wisselen.
[A] Naam en status
Van alle hackerspaces wordt een voor een de naam en de status op regel 2 en 3 weergegeven. Van de hackerspace die weergegeven wordt gaat het lampje op de kaart knipperen. Op regel 4 wordt weergegeven hoeveel hackerspaces er open of dicht zijn.
Met de bovenste twee knoppen aan de zijkant van het scherm kun je handmatig door alle hackerspaces scrollen.
Aan de rechterzijde staat een balkje waar elke led een hackerspace voorstelt. Aan de linkerzijde van het balkje geeft een witte led aan welke hackerspace er op dat moment op het scherm weergegeven wordt. Aan de rechterzijde geeft een blauwe led aan waar op dat moment de status van opgehaald wordt.
[B] Scrollende namen
[C] Grafiek
De gestapelde grafiek geeft weer hoeveel hackerspaces er de laatste 5 uur en 20 minuten open en dicht zijn geweest. Elke 5 minuten wordt de status opgeslagen in het flashheugen met een maximum van 64 samples. De nieuwste sample verschijnt aan de rechterkant en schuift elke keer door naar links. De getallen onderaan het scherm geven de hele uren aan.
Notificatie statusverandering
Wanneer er een hackerspace open of dicht gaat wordt dit aangegeven met een notificatie. Hierbij wordt de naam en de nieuwe status van de hackerspace weergegeven omringd door gekleurde balken die een cirkelende beweging maken. Naast de visuele notificatie klinkt er ook een geluid waaraan je kunt horen dat een hackerspace open of dicht is gegaan.
Notificatie Deurbel
De SpaceMap luistert via MQTT naar de deurbel van TDvenlo. Wanneer er op de deurbel word gedrukt verschijnt de knipperende tekst “Deurbel!” en wordt het deurbelgeluid afgespeeld. Het geluid kun je op de configuratiepagina aan- en uitzetten.
Zie ook:
Menu
Via het menu kun je meerdere instellingen van de SpaceMap veranderen. Het menu wordt bediend met de vier knoppen aan de zijkant. De symbolen op het scherm geeft de functie van elke knop aan. Je komt in het menu door twee aangrenzende knoppen tegelijkertijd ingedrukt te houden.
Alle menu-items in een tabel
Menu-item | Beschrijving | |
---|---|---|
1 | Audio volume | Het volume van geluiden aanpassen |
2 | Led helderheid | Helderheid van de leds op de kaart aanpassen |
3 | Matrix helderheid | Helderheid van het scherm aanpassen |
4 | Wifi info | Geeft het IP adres van de SpaceMap weer |
5 | Wifi instellen | Activatie van de Wifi protal om het netwerk in te stellen |
6 | Bedrijfsuren | Weergave van het aantal uren dat de SpaceMap aan heeft gestaan vanaf 8-5-2020 |
7 | Interne temperatuur | Geeft de interne temperatuur van de ESP32 weer |
8 | Reset alle instellingen | Reset van alle instellingen, inclusief MQTT en NTP instellingen! |
Klok verstellen
De klok kun je verstellen door op de configuratiepagina van de webinterface een tijdzone in te stellen. De SpaceMap haalt dan de tijd op van een NTP server en past zich automatisch aan aan de zomer- en wintertijd.
Wifi-netwerk instellen
Met het menu-item “Wifi instellen” kun je het wifi-netwerk wijzigen of instellen waarmee de SpaceMap verbinding maakt. Dit gaat via een wifiportal. Dit wilt zeggen dat de SpaceMap zelf een netwerk opzet waarmee je met jouw telefoon verbinding mee maakt. Jouw telefoon zal een melding tonen dat je bij dit netwerk in moet loggen. Als je hierop drukt kom je op een webpagina waar je het wifi-netwerk van de SpaceMap in kunt stellen.
Wanneer de SpaceMap verbinding aan het maken is met het netwerk zal dit scherm getoond worden. De scrollende witte tekst laat zien met welk netwerk er verbinding wordt gemaakt. Deze tekst wordt vergezeld door een mooie regenboogkleurige golf. Als het verbinden mislukt zal de wifi portal voor 60 seconden geactiveerd worden. Na deze tijd zal nogmaals geprobeerd worden om te verbinden.
Webinterface
De SpaceMap serveert een webpagina waarop je informatie kunt inzien en bepaalde configuraties kunt doen. Via MQTT publiceert de SpaceMap zijn IP adres waarop je de webpagina kunt bereiken. Via het menu-item "Wifi info" kun je ook het IP adres vinden.
Hoofdpagina
Op de hoofdpagina van de SpaceMap, die hier links is te zien, worden meer gegevens weergegeven dan dat er op de fysieke kaart weergegeven worden. Hier kun je onderandere statistische informatie inzien. Bijvoorbeeld hoeveel succes de SpaceMap heeft bij het opvragen van de status van elke hackerspace en hoeveel tijd dit kost. Waneer er een fout optreedt zal dit met een HTTP code weergegeven worden in de kolom State.
Op deze pagina is ook de grafiek te zien die aangeeft hoeveel hackerspaces er de laatste 5 uur open zijn geweest. Gewoon omdat het kan. Ook is er een landkaart te zien met stippen en namen van de hackerspaces die met javascript is opgebouwd.
Configuratiepagina
Op de configuratiepagina van de SpaceMap kun je instellingen wijzigen van MQTT, NTP en de deurbel. Zie hiernaast een screenshot van deze pagina. Hieronder in de tabel staan alle parameters beschreven.
Parameter | Beschrijving |
---|---|
MQTT_Domain | MQTT broker adres |
MQTT_Port | MQTT broker poort |
MQTT_User | MQTT gebruikersnaam |
MQTT_Password | MQTT wachtwoord |
MQTT_Name | Root naam voor MQTT publishing topics, en WiFi host naam. |
NTP_Server | Het adres van de NTP server waarvan de SpaceMap de tijd van ophaalt. |
NTP_TimeZone | De tijdzone die de SpaceMap gebruikt om de klok in te stellen. Zie deze lijst met tijdzones. |
DEURBEL_Topic | De MQTT topic van de deurbel. |
DEURBEL_Audio | Het geluid van de deurbel in of uitschakelen. 1=geluid 0=geen geluid |
SPACEAPI_Url | Url voor het instellen van de SpaceAPI directory |
MQTT functionaliteit
Zie hieronder de MQTT topics die de SpaceMap gebruikt:
Topic | Payload | Beschrijving | |
---|---|---|---|
PUB | spacemap/ip | raw (0.0.0.0) | IP adres |
PUB | spacemap/ontime | raw (int 0) | Aantal seconden sinds inschakelen |
PUB | spacemap/operating_hours | raw (float 0.00) | Aantal bedrijfsuren |
PUB | spacemap/status/num_open | raw (int 0) | Aantal open hackerspaces |
PUB | spacemap/status/num_closed | raw (int 0) | Aantal gesloten hackerspaces |
PUB | spacemap/status/num_unknown | raw (int 0) | Aantal hackerspaces met onbekende status |
PUB | spacemap/status/num_null | raw (int 0) | Aantal hackerspaces met niet-geïnitialiseerde status |
PUB | spacemap/status/num_spaces | raw (int 0) | Totaal aantal hackerspaces |
PUB | spacemap/status_change_msg | raw (string) | Bericht voor de lichtkrant dat wordt verstuurd wanneer een hackerspace van status veranderd. Geopend: “+TDvenlo” Gesloten: “-TDvenlo” |
PUB | spacemap/status_change_msg_json | json | Een json bericht dat wordt verstuurd wanneer een hackerspace van status veranderd. Zie hieronder de opbouw van de payload. |
SUB | toegangscontrole/voordeur/deurbel | raw (int 0) | De SpaceMap luistert naar de deurbel en toont een bericht en maakt geluid wanneer de waarde van 0 naar 1 veranderd. |
spacemap/status_change_msg_json payload
{ "name": "Hack42", "oldState": "Open", "newState": "Closed", "epochSec": 1674855392 }
States: “Open”, “Closed”, “Unknown”, “NULL”
epochSec: Timestamp in epoch seconden (unix time)
Gebruikte onderdelen
Zie hieronder een lijst van onderdelen die voor de SpaceMap worden gebruikt.
Beschrijving | Onderdeel |
---|---|
Microprocessor | Heltec WiFi Kit 32 (ESP32) |
Scherm | P3 smd RGB 32×64 led matrix |
Donker plexiglas | Plexiglas plaat GS smoke 923 3mm |
Leds op kaart | WS2812 8mm led pixels |
MP3 module | MP3-module serieel |
Speakers | Speakerset 8Ω 5W WS-14595 |
Audio versterker | Adafruit 2x10W (aparte voeding) |
Level shifter | TXS0108E module |
Voeding1 | Meanwell RS-25-5 (5V 5A) |
Voeding2 (Audio) | Stekkervoeding 12V 1A |
Poster | Posterpoint 50x70cm Nederland |
Wissellijst | 50x70cm aluminium frame |
Hout | Vuren balken, MDF platen |
Behuizing
Voor de behuizing van de SpaceMap is een posterlijst gebruikt die aan de achterzijde is uitgebouwd met hout.
Hieronder is het achteraanzicht van de SpaceMap te zien toen het houtwerk bijna klaar was. Hiervoor zijn geen 3D/cad tekeningen gemaakt en is er gewoon gezaagd en gevijld totdat alles op zijn plek viel.
LED matrix
Het scherm van de SpaceMap is een RGB led matrix van 64×32 pixels. Deze panelen worden normaal gesproken gebruikt om grote videoschermen te maken. Gelukkig zijn ze ook met een ESP8266 of ESP32 vrij gemakkelijk aan te sturen. Het enige nadeel is dat deze schermen actief aangestuurd moeten worden omdat de leds met shiftregisters aan worden gestuurd. Dit betekend dat de ESP rij voor rij de leds moet afgaan en de gewenste kleuren inschakelt. Dit gebeurt zo snel dat het met het oog niet te zien is. Deze manier van aansturen heet multiplexen. Om het voor de ogen iets prettiger te maken om naar de matrix te kijken heb ik voor de matrix donker een getinte plaat van plexiglas geplaatst. Dit vergroot ook het contrast.
- Resolutie: 64×32 leds
- Pixelafstand: 3mm (tussen middelpunten)
- Kleuren: Rood, groen, blauw
- Voeding: 5V 5A (2A is te weinig)
- Aanstuurwijze: Actief multiplexen (1/16 scan)
Adresseerbare leds
MP3 module
- Speelt geluiden af wanneer een hackerspace open of dicht gaat.
- De geluiden bevinden zich op een SD kaart die in het voedingscompartiment gevonden kan worden. Deze steekt door een kleine gleuf in het hout.
- De geluidsuitgang van de MP3 module wordt versterkt met een aparte geluidsversterker die met een aparte netvoeding wordt gevoed. Dit is om hem te ontkoppelen van de stoorsignalen die door het aansturen van de led matrix ontstaan.
- De speakers zitten aan de linker en rechter zijkant van de SpaceMap.
SpaceMap op breadboard
Software
De software van de SpaceMap is oorspronkelijk geprogrammeerd in Arduino en is laterna omgezet naar PlatformIO. Hieronder staan de verschillende softwareversies in een tabel opgesomd. Ook is er beschreven hoe je een hackerspace toe kunt voegen.
Broncode
Versie | Beschrijving | IDE | Datum |
---|---|---|---|
spacemap_v1.2.zip | The Space Leiden en Hackerspace Drenthe toegevoegd (zonder LED) | Arduino | |
spacemap_v1.3.zip | Probleem opgelost bij het ontvangen van HTTP code 404 | Arduino | 9-6-2021 |
spacemap_v1.4.zip | Leds toegevoegd voor The Space Leiden en Hackerspace Drenthe | Arduino | 11-8-2021 |
spacemap_v1.5 | MQTT functionaliteit toegevoegd. | Arduino | |
spacemap_v1.6 PlatformIO | Omzet naar PlatformIO en code opschonen | PlatformIO | |
spacemap_v1.7_platformio.zip | Toevoeging deurbel met geluid | PlatformIO | 26-1-2023 |
spacemap_v1.8 PlatformIO | Buienradar API toegevoegd | PlatformIO | 10-5-2023 |
spacemap_v1.9_platformio.zip | SpaceAPI_Url parameter toegevoegd. (spaceapi.io was offline) | PlatformIO | 11-9-2024 |
spacemap_v1.10 PlatformIO | mDNS toegevoegd met de naam “spacemap”. Nu is de spacemap te bereiken met de url spacemap.local | PlatformIO | 13-9-2024 |
spacemap_v1.10 PlatformIO | Hackerspace Drenthe (Emmen) toegevoegd | PlatformIO | 25-10-2024 |
Libraries en boards
Library | Auteur | Versie | Bron |
---|---|---|---|
FastLED | Daniel Garcia | 3.3.3 | Arduino Library Manager |
U8g2 | oliver | 2.25.10 | Arduino Library Manager |
PxMatrix | Dominic Buchtaller | 1.7.0 | Arduino Library Manager |
ArduinoJson | Benoit Blancho | 6.14.1 | Arduino Library Manager |
ESP_WiFiManager | khoih-prog | 1.7.2 | https://github.com/khoih-prog/ESP_WiFiManager |
Board | Auteur | Versie | Board Manager URL |
---|---|---|---|
esp32 | Espressif Systems | 1.0.4 | https://dl.espressif.com/dl/package_esp32_index.json |
Taken verdeeld over 2 cores
Core | Prio | Taak | Beschrijving |
---|---|---|---|
0 | 2 | task_updateLEDS | Aansturen van leds op landkaart |
0 | 2 | task_drawDisplay | Naar de buffer van de led matrix schrijven |
0 | 0 | task_manageWifi | Wifi gerelateerde taken uitvoeren |
1 | 2 | task_displayUpdater | Aansturen van de led matrix (multiplexen) |
Een hackerspace toevoegen
Alle hackerspaces worden in het geheugen geladen als een array van het object space.
//LEDpx is the distance in mm from the left side of the map //LEDpy is the distance in mm from the bottom side of the map //Sort all spaces with LEDpy in decending order. (The spaces are displayed in this order) //Spaces with no spaceAPI url get the following url string: "" //space(LEDindex, LEDpx, LEDpy, display name, city name, spaceAPI url or name) space spaces[] = { // space(LEDindex, LEDpx, LEDpy, display name, city name , spaceAPI url or name ) /* 0*/ space( 15, 317, 567, "Frack" , "Leeuwarden" , "Frack" ), /* 1*/ space( 14, 447, 470, "H.Emmen" , "Emmen" , "Hackerspace Drenthe (Emmen)"), /* 2*/ space( 13, 434, 454, "H.Drenthe" , "Coevorden" , "Hackerspace Drenthe" ), /* 3*/ space( 12, 448, 362, "TkkrLab" , "Enschede" , "TkkrLab" ), /* 4*/ space( 11, 328, 320, "Hack42" , "Arnhem" , "Hack42" ), /* 5*/ space( 10, 268, 350, "Bitlair" , "Amersfoort" , "Bitlair" ), /* 6*/ space( 9, 195, 388, "TechInc" , "Amsterdam" , "Technologia Incognita"), /* 7*/ space( 8, 155, 345, "Sp.Leiden" , "Leiden" , "The Space Leiden" ), /* 8*/ space( 7, 137, 332, "RevSpace" , "Leidschendam", "RevSpace" ), /* 9*/ space( 6, 143, 297, "Pixelbar" , "Rotterdam" , "Pixelbar" ), /*10*/ space( 5, 230, 332, "RandomData", "Utrecht" , "https://api.thingspeak.com/channels/886012/feed/last.json"), /*Not using spaceAPI!! Created a special.*/ /*11*/ space( 4, 300, 307, "NURDspace" , "Wageningen" , "NURDSpace" ), /*12*/ space( 3, 326, 279, "H.Nijmegen", "Nijmegen" , "Hackerspace Nijmegen" ), /*13*/ space( 2, 280, 197, "Hackalot" , "Eindhoven" , "Hackalot" ), /*14*/ space( 1, 363, 182, "TDvenlo" , "Venlo" , "TDvenlo" ), /*15*/ space( 0, 339, 81, "ACKspace" , "Heerlen" , "ACKspace" ), }; #define numSpaces 16 //Please count manually :)