this post was submitted on 11 Nov 2024
2 points (100.0% liked)

Arduino and other electronics projects info

125 readers
1 users here now

founded 2 years ago
MODERATORS
 

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.

Standalone panel

  • The plexiglas plate was taken from a defective LCD monitor

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 are viewing a single comment's thread
view the rest of the comments
[–] rtwin@lemmy.staphup.nl 1 points 1 week ago* (last edited 1 week ago)
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".