Decennium
Project Decennium | |
---|---|
Status | Completed |
Contact | Juerd, Sebastius, F0x |
Last Update | 2020-01-27 |
Om het 10-jarig bestaan van hackerspaces in Nederland te vieren, hebben we voor alle bezoekers van hoera10jaar een badge gemaakt. De badge heeft een ledje voor elke space die in dit eerste decennium is opgericht, en laat bijna-realtime zien welke spaces er geopend zijn. Het KiCad ontwerp vind je op github.
Er is wel 'n klein beetje DIY-werk: je moet op z'n minst iets solderen om de badge stroom te geven.
(Voor de enkeling van ons die nog nooit gesoldeerd heeft, of geen soldeerbout heeft: ga naar je/een hackerspace, daar is vast iemand die je wil helpen.)
Omdat we niet vanaf 't begin consequent een bepaalde naam hebben gebruikt, is deze badge bekend onder de namen hoera10jaar, decenniumbadge, en hsnl-badge.
Inhoud van het zakje
- 1 Decennium-badge
- 1 Klein zakje met:
- 2 schroefjes (M3x35)
- 2 ringen (M3)
- 2 moeren (M3)
- 2 dopmoeren (M3)
- 2 SMD-knopjes
- 1 screw-terminal (2,54 mm pitch, 2 pins)
In eerste instantie heb je alleen de badge en de screw terminal nodig.
Voeding aansluiten
Je kunt de badge voeden met 5 volt, maar je moet deze aansluiting wel zelf solderen, ongeveer in het Ruhrgebiet. Plaats de meegeleverde screw terminals aan de achterkant van het PCB, en soldeer de pinnen aan de voorkant vast. Het is handig om 'm zo te oriënteren, dat de kabel naar beneden hangt.
Schroef vervolgens de gestripte draden (als je een USB-kabel hebt verknipt hiervoor, gebruik je de rode en zwarte aders) van je voeding in de screw terminal. Check wel even met een multimeter de polariteit van je voeding, want de ervaring leert dat de draadkleuren niet altijd kloppen.
Alternatief: als je een usb-serial gaat gebruiken en die heeft een capabele 3v3-uitgang, dan kun je de 5V weglaten en de pads bovenaan gebruiken.
Pootjes vastschroeven
Schroefje vanaf de voorkant erdoorheen, een ringetje onder het moertje aan de achterkant, en dan de dopmoer op het uiteinde. Gaat best redelijk zonder een schroevendraaier, maar als je het stevig wilt aandraaien, pak dan een TX10.
Hang je 'm liever om je nek, of wil je 'm aan de muur? We hebben op alle hoeken een gaatje voor een schroef van 3 mm gemaakt, dus mogelijkheden zat!
Wifi-netwerk instellen
De badge heeft wifi met internet nodig om goed te werken. De eerste keer dat je 'm start, wordt de badge een access point. Deze configuratiemodus kun je herkennen aan dat alle leds tegelijkertijd wisselen tussen rood en groen.
- Verbind met "decennium-0123456789ab" (maar dan met het nummer van jouw badge...)
- Ga naar http://192.168.4.1/
- Kies een wifi-netwerk
- Schrijf het wachtwoord ergens op en zet de beveiliging van de wifi aan
- Submit
- Herstart de badge
Er staat ergens "/label>" op de configuratiepagina. Dat is een foutje omdat we last-minute nog een aanpassing hebben gedaan en dat niet hebben getest. Oeps :) Gelukkig is het puur cosmetisch.
Donaties
De kostprijs kon redelijk laag blijven omdat we de ESP32's gedoneerd hebben gekregen (dankjewel Hackzone!), er geen reset-circuit op zit, en je je eigen USB-serial moet solderen (als je daar behoefte aan hebt).
Toch kosten deze dingen uiteindelijk nog 4,90 € per stuk (735 € voor 150 stuks). Dat is wat meer dan we eigenlijk hoopten en daarom vragen we om een volledig vrijwillige bijdrage.
Vind je de badge stom? Geef 'm dan alsjeblieft aan iemand die 'm wel leuk vindt.
Vind je de badge leuk? We stellen een donatie erg op prijs! Je kunt onder vermelding van "donatie" iets overmaken naar NL45ABNA0826017606 of het commando "donate" gebruiken in revbank. En uiteraard is het ook leuk als je contant wat achterlaat in het geldkistje. Enorm bedankt voor je steun!
Betekenis van de ledjes
- uit: space opgeheven :'(
- groen: space open, dus kom gezellig langs :)
- rood: space dicht
- geel: status onbekend, space-state-informatie ontbreekt
- alles rood pulserend: wifi-verbinding wordt gemaakt
- alles rood/groen afwisselend: wifi configuratie portal actief (http://192.168.4.1/)
- alles traag uit/geel knipperend: mqtt-verbinding faalt
Lessons learned
Zoals bij elke badge hebben we weer bevestigd dat last-minute een badge regelen eigenlijk gewoon te ambitieus is, tot extra kosten leidt, en extra werk om fouten op te lossen. Voor badgemakers is sunk cost geen fallacy, maar een fact of life. Misschien zelfs wel een lifestyle.
Vanwege tijdgebrek hebben we meteen een productiebatch laten maken, zonder eerst een prototype te hebben getest. Enfin, bij deze eerste 50 bordjes moesten er daarom wat bodge wires worden toegevoegd. IO34 en IO35 zijn namelijk gelogen, want die doen niet input+output (IO), maar alleen input. Dus dat werden 27 en 26.
Daarna is die fout hersteld in het schema en de pcb, en is de rest van de badges (100 stuks) meteen besteld, want vanwege Chinees nieuwjaar durfden we geen dag te verspillen.
Een dag nadat de 2e batch besteld was, ongeveer op het moment dat in de fabriek de gaten werden geboord (zo snel zijn ze echt), ontdekten we dat we op de achterkant in het lijstje openingsjaren een space waren vergeten. "Wat betekent dat gele ledje bij Zwolle?" vroeg iemand. "Die space heeft geen space-state dus de status is onbekend", was het antwoord. "Welke space is dat dan?" -- "Kijk maar achterop." Maar Bhack stond er niet op! Fixen kan niet meer, en zou ook zonde zijn van de e-waste. Dus hebben we stickers gemaakt van screenshots van de 3d-render van KiCad. (Gelukkig hebben we alles in huis om zulke stickers zelf te maken.) Het was even werk om de kleur wat groener te maken en de schaal precies goed te krijgen, maar het is uiteindelijk gelukt om het niet al te lelijk te maken. Er zijn twee revisies van het bordje, en dus ook twee versies van de sticker, zodat bij iedereen de traces van de screenshot mooi aansluiten.
En toen kwam het vervelende nieuws dat Bhack stopt, en hebben we de 150 stickers opnieuw gemaakt om ook het eindjaartal te vermelden... De nieuwe stickers zijn gemaakt met SVG-exports omdat we daarmee makkelijker de kleur goed konden krijgen.
Optioneel soldeerwerk
Knopjes
Je kunt een reset-knopje en een flash-knopje toevoegen. Deze heeft twee verschillende functies: is Flash ingedrukt tijdens het opstarten, dan kun je de ESP32 programmeren. Als de badge is opgestart en wifi-verbinding maakt of heeft, kun je Flash lang ingedrukt houden om de wifi-configuratieportaal te activeren.
Serial
Een seriële verbinding is handig om de debugmeldingen te kunnen lezen, en om nieuwe firmware te flashen als het via OTA niet (meer) lukt.
Als je nog geen USB-Serial hebt, neem dan iets dat gebaseerd is op de CP2102, dat werkt in het algemeen erg betrouwbaar, en die heeft een 3v3 aan boord die meteen de badge kan voeden.
Soldeer RX van het USB-bordje op TX van de badge, en andersom. Werkt het niet, probeer dan toch RX op RX en TX op TX te solderen, want soms klopt de aanduiding niet.
Firmware flashen
Er zijn twee werkende firmwares beschikbaar. We hebben de simpelste firmware al voor je geïnstalleerd. Deze is gebaseerd op de ESP32 Arduino Core.
Wil je met Micropython of de Hatchery aan de slag, dan kun je ook kiezen voor de badge.team-firmware die door Renze is gemaakt.
- Source van de originele hoera10jaar-firmware: https://github.com/Juerd/hoera10jaar
- Source van de alternatieve badge.team-firmware: https://github.com/badgeteam/ESP32-platform-firmware/tree/badge/hsnl
badge.team | Arduino hoera10jaar | |
---|---|---|
Complexiteit | ∞ | 500 regels C++ |
Space states | ja | ja |
LED-matrix op eigen core | ja | ja |
Fadende ledjes | ja | ja |
Automatische updates | ja | nee |
OTA updates via LAN | nee | ja |
C | ja | ja |
C++ | nee | ja |
MicroPython | ja | nee |
Captive portal voor configuratie | ja | ja |
Via wifi flashen (OTA)
OTA staat standaard aan. Het wachtwoord kun je zien en veranderen in de captive portal, waarmee je kunt verbinden als je het flash-knopje lang ingedrukt houdt terwijl de badge al aan staat.
Serieel flashen
Je hebt hiervoor zowel de knopjes als een seriële verbinding nodig. Om te flashen moet je Flash ingedrukt hebben bij het opstarten:
- Druk op Flash en hou 'm ingedrukt.
- Druk op Reset en laat die meteen weer los.
- Laat Flash nu ook los.
- Upload de nieuwe firmware.
Databronnen
De badge haalt via MQTT informatie van een centrale server, die eens per minuut de SpaceAPI-jsons binnenhaalt van de diverse spaces, gebruik makend van de URLs die geregistreerd zijn bij SpaceAPI Directory.
Enkele spaces hebben zelf een publieke MQTT-server, en die statussen worden realtime weergegeven! (Daarna wordt de json van diezelfde space voor 1 a 2 minuten genegeerd.)
Let op: de retained messages van MQTT-topic hoera10jaar/+ zijn onderdeel van de publieke API. De rest, zoals hoera10jaar/spaceapi/+ en hoera10jaar/realtime/+, kun je beter niet in je software gebruiken, want dat kan allemaal nog veranderen. Het toepassen van de wet van Hyrum is geheel op eigen risico!
Beveiliging en privacy
OTA staat standaard aan, met een gegenereerd wachtwoord. Dat wachtwoord is via de configuratieportal in te zien, dus zolang je die niet hebt beveiligd, is ook je OTA niet veilig.
Om schaalbaarheidsredenen identificeert de badge zich met het unieke MAC-adres bij de MQTT-server dus als we zouden bijhouden wie welk MAC-adres heeft (doen we niet), zouden we kunnen zien wie de badge gebruikt.
De MQTT-verbinding is niet versleuteld.
Uitgaand maakt de badge als het goed is alleen verbinding met hoera10jaar.revspace.nl op poort 1883. Wie netjes een IoT-SSID met eigen vlan en firewall heeft (vrijwel niemand dus), moet dit dus nog even openzetten voordat de badge werkt.
Lasercut
polyfloyd heeft een lasercuttervriendelijk SVG paneeltje gemaakt in Inkscape: File:Hsnlbadge-lasercut.svg
NB: Deze tekening is snel in elkaar gehackt, de gaatjes zijn wat groot en zitten iets verkeerd. Mocht je een betere versie hebben, gaarne uploaden :)
Productie
Niet afgebeeld:
- Ontwerpfase
- Prototype (want ivm tijdsdruk was er geen prototype...)
- De ESP32's zijn geprogrammeerd in een jig, voordat ze zijn gesoldeerd
- Daarna zijn ze nog een keer de jig in gegaan, zodat de SPIFFS alvast geformatteerd is
- Diverse constructies voor de voetjes
- Papieren zakken door de laserprinter halen
- Inpakken van de kleine zakjes met onderdelen
- Printen en snijden van de Bhack-stickers
- Vervangen van DOA ledjes