Outline
Used hardware
Panel frontside
Panel backside
- The larger 4 pin connector is for 9 volt power supply. All LED’s lit takes about 3.5-4 Amps!
- The smaller 4 pin connector has: “gnd”, “latch/enable”, “clock”, “data”
- The data pushed in via “clock” and “data” has the following parts: tail[control byte][bit 89]…[bit 0]head
- [control byte] has following bits: [1 bit n/u] [4 bit counter value][3 bit line select]
- [4 bit counter value] is decremented each clock pulse if ‘enable’ is active. Once the counter reaches ‘0’, the line-select will be suppressed. This is used for built-in brightness control
- [3 bit line select] the bits at this position dictate which of the 7 lines (traversing all 3 text-rows) is/are lit.
- [control byte] has following bits: [1 bit n/u] [4 bit counter value][3 bit line select]
Standalone panel
Involved MCU’s
- ESP8266 : NodeMCU 1.0(ESP-12E Module)
- USB-serial receives bitmap-packages and forwards these to the Wemos using “ESPNOW”
- ESP32 : Wemos D1 mini
- Receives bitmap packages and displays it on the LED-panel
- SPI-pins connect to the LED-panel clock- and data-line
- Separate output pin connects to the LED-panel latch/enable pin
Notes
- The Wemos D1 mini runs the LED Panel controller software.
- On CPU0 runs a task which pushes out the data via SPI.
- CPU1 is used by the WIFI/ESPNOW library to receive the display-packages.
- A display package consists of [1 byte for payload length][1 byte for brightness 0-15][237 bytes of which 90 bits represent the 90x21 pixels picture].
- Because of maximum SPI clock speed, the hardware brightness logic, and the fact that data-shifting can only be done while the ‘enable’ is off, the display refresh rate lies at about 60hz.
- The NodeMCU runs a simple package forwarder at 115200 kbps. Receiving via Serial/USB and forwarding via ESPNOW. The first byte read is the length of the payload. Then it reads ‘length’-bytes. Once received, it forwards the package via ESPNOW to the dedicated MAC address of the Wemos. “ESPNOW” maximum package size is 250 bytes, so fits nicely.
- Python is used to provide the NodeMCU with frame-packages. The rendered image is 90x31 pixels. 2 bars of 5 pixels high are removed from the image, so that the LED-less areas are removed from the image and the destination image becomes the required 90x21 pixels.
- One Python program uses Pillow image library to generate the animation with the time centered, and a rotating 3d-cube.
- One Python program uses OpenCV to read a .mp4 video, to obtain the frames one by one. Each frame is scaled down to 90-pixels-wide, cropped to 90x31, turned into 2 color B&W before sending.
You must log in or register to comment.
Update
Replaced the ESP8266 “serial->espnow sender” board with an “ESP32 C3 mini” board. The C3 has a single core (similar like the Sx variants), but the C3 does support “ESPNOW”.