Decennium

From RevSpace
Revision as of 15:41, 26 January 2020 by F0x (talk | contribs) (link naar kicad op github)
Jump to navigation Jump to search
Project Decennium
2020-01-14 224023 - DSC08465 (1024x768).jpg
Status Completed
Contact Juerd, Sebastius, F0x
Last Update 2020-01-26

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.)

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.

  1. Verbind met "decennium-0123456789ab" (maar dan met het nummer van jouw badge...)
  2. Ga naar http://192.168.4.1/
  3. Kies een wifi-netwerk
  4. Schrijf het wachtwoord ergens op en zet de beveiliging van de wifi aan
  5. Submit
  6. 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.

  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:

  1. Druk op Flash en hou 'm ingedrukt.
  2. Druk op Reset en laat die meteen weer los.
  3. Laat Flash nu ook los.
  4. 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 van Decennium

2020-01-14 215530 - DSC08449 (1024x768).jpg 2020-01-14 215530 - DSC08449 (1024x768).jpg 2020-01-14 215538 - DSC08450 (1024x768).jpg 2020-01-14 215718 - DSC08452 (1024x768).jpg 2020-01-14 215728 - DSC08453 (1024x768).jpg 2020-01-14 215812 - DSC08455 (1024x768).jpg 2020-01-14 215818 - DSC08456 (1024x768).jpg 2020-01-14 215827 - DSC08457 (1024x768).jpg 2020-01-14 215856 - DSC08459 (1024x768).jpg 2020-01-14 220016 - DSC08462 (1024x768).jpg 2020-01-14 220031 - DSC08463 (1024x768).jpg 2020-01-14 221635 - DSC08464 (1024x768).jpg 2020-01-14 224023 - DSC08465 (1024x768).jpg 2020-01-17 185040 - DSC08493 (1024x768).jpg 2020-01-17 185140 - DSC08494 (1024x768).jpg 2020-01-17 185218 - DSC08495 (1024x768).jpg 2020-01-17 185312 - DSC08496 (1024x768).jpg 2020-01-17 222940 - DSC08504 (1024x768).jpg 2020-01-17 223114 - DSC08505 (1024x768).jpg 2020-01-17 223147 - DSC08507 (1024x768).jpg 2020-01-18 220657 - DSC08522 (1024x768).jpg 2020-01-18 221245 - DSC08523 (1024x768).jpg 2020-01-18 224214 - DSC08526 (1024x768).jpg 2020-01-18 224218 - DSC08527 (1024x768).jpg 2020-01-18 224534 - DSC08528 (1024x768).jpg 2020-01-18 224539 - DSC08529 (1024x768).jpg 2020-01-18 225952 - DSC08530 (1024x768).jpg 2020-01-18 230816 - DSC08531 (1024x768).jpg 2020-01-18 230819 - DSC08532 (1024x768).jpg