WS2812 displays als samengesteld display gebruiken met NodeMCU

Met de komst van de WS2812 individueel-adresseerbare RGB leds ontstaat de mogelijkheid om displays te maken in elk gewenst formaat. Op dit moment zijn displaymodules te koop met afmetingen 2x2, 4x4 en 8x8 WS2812 leds met afmetingen van 15x15mm, 30x30mm en 71x71mm die onderling kunnen worden doorgelust om een groter geheel te maken. De leds hebben een individueel volgnummer, genummerd 1 tot aantal modules x aantal leds per module.

In de afbeelding hierboven zijn 8 WS2812-ledmodules van 8x8 leds aaneengeschakeld tot een groter display. De led linksboven in de eerste module heeft nummer 1, de led linksboven in de tweede module heeft 65, enzovoorts. Het omrekenen van een  coördinatenpaar (x, y) naar een led-volgnummer gaat als volgt:

1
2
3
4
5
6
7
function toLineair(x, y)
  boardNumber = math.floor((y - 1) / boardHeight) * boardsWide + math.floor((x - 1) / boardWidth)
  boardX = x - math.floor((x - 1) / boardWidth) * boardWidth
  boardY = y - math.floor((y - 1) / boardHeight) * boardHeight
  linPos = boardNumber * ledsPerBoard + (boardY - 1) * boardHeight + boardX
  return linPos
end

De programma's en documentatie zijn te vinden op GitHub: https://github.com/rudiniemeijer/NodeMCU-Lua-WS2812-matrix-displays