Skip to content

How to Connect Segment Displays as Lights to MPF

Related Config File Sections:

MPF can map segment displays to arbitrary lights which can be controlled via any hardware platform. You can select from multiple mappings (see platform_settings for details). Let us know if you need another mapping.

Video about segment displays:

Hardware

BCD Seven Segment

Segment displays are readily available at most electronics suppliers. Most of them use some BCD encoder to save connectors. Those are easily recognizable because they got less than 8 connectors. You can use any driver or digital outputs on those. Be a bit careful with current driven light controllers (i.e. the PD-LED) here. Those cannot be dimmed currently (let us know if you need that).

Parallel Seven Segment

Those are not as common as BCD segment displays but still available. You can recognize them by more than 8 connectors. Make sure that your display is not multiplexed or it will not work without an additional controller chip. Those can be driven by any parallel LED controller (see LEDs for details). If you use drivers you will probably need current limiting resistors. In most cases BCD is simpler to use and will save you some outputs.

Those are also available as RGB. However, they often are multiplexed and will not work without an additional chip.

Serial Segment Displays

Additionally, there are serial segment displays which use chips such as WS2811 internally. Those can also be used here using a serial LED controller (see LEDs for details).

There is a hackaday project for monochrome serial segment displays. Furthermore, there are also full RGB serial segment displays. Both are controlled using WS2811 controllers.

You can also buy WS2811 controller with PCB in China (bulk 100 pcs) for about ten bucks solder your own display.

Color and Brightness

There is no color or brightness support for segment displays in MPF yet. Let us know if you need that. However, you can control both using normal light shows.

Config

This is an example:

hardware:
  segment_displays: light_segment_displays

lights:
  segment1_a:
    number: 1
  segment1_b:
    number: 2
  segment1_c:
    number: 3
  segment1_d:
    number: 4
  segment1_e:
    number: 5
  segment1_f:
    number: 6
  segment1_g:
    number: 7
  segment2_a:
    number: 8
  segment2_b:
    number: 9
  segment2_c:
    number: 10
  segment2_d:
    number: 11
  segment2_e:
    number: 12
  segment2_f:
    number: 13
  segment2_g:
    number: 14

segment_displays:
  display1:
    number: 1
    platform_settings:
      lights:
        - a: segment1_a
          b: segment1_b
          c: segment1_c
          d: segment1_d
          e: segment1_e
          f: segment1_f
          g: segment1_g
        - a: segment2_a
          b: segment2_b
          c: segment2_c
          d: segment2_d
          e: segment2_e
          f: segment2_f
          g: segment2_g
      type: 7segment

Here is another example for a monochrome serial 16-segment display using a WS2811 controller on OPP:

hardware:
  segment_displays: light_segment_displays

lights:
  l_neoseg_0_0_a:
    start_channel: 0-0-60  #When using other RGB pixels in the chain before the display,
                           #             start_channel = 3 x start_pixel
                           #Using RGBW,  start_channel = 4 x start pixel
                           #Here, there are 20 RGB neopixels before the display
    type: w
    subtype: led
  l_neoseg_0_0_m:
    previous: l_neoseg_0_0_a
    type: w
    subtype: led
  l_neoseg_0_0_k:
    previous: l_neoseg_0_0_m
    type: w
    subtype: led
  l_neoseg_0_0_h:
    previous: l_neoseg_0_0_k
    type: w
    subtype: led
  l_neoseg_0_0_u:
    previous: l_neoseg_0_0_h
    type: w
    subtype: led
  l_neoseg_0_0_s:
    previous: l_neoseg_0_0_u
    type: w
    subtype: led
  l_neoseg_0_0_t:
    previous: l_neoseg_0_0_s
    type: w
    subtype: led
  l_neoseg_0_0_g:
    previous: l_neoseg_0_0_t
    type: w
    subtype: led
  l_neoseg_0_0_f:
    previous: l_neoseg_0_0_g
    type: w
    subtype: led

  l_neoseg_0_0_e:
    previous: l_neoseg_0_0_f
    type: w
    subtype: led
  l_neoseg_0_0_dp:
    previous: l_neoseg_0_0_e
    type: w
    subtype: led
  l_neoseg_0_0_d:
    previous: l_neoseg_0_0_dp
    type: w
    subtype: led
  l_neoseg_0_0_r:
    previous: l_neoseg_0_0_d
    type: w
    subtype: led
  l_neoseg_0_0_p:
    previous: l_neoseg_0_0_r
    type: w
    subtype: led
  l_neoseg_0_0_c:
    previous: l_neoseg_0_0_p
    type: w
    subtype: led
  l_neoseg_0_0_n:
    previous: l_neoseg_0_0_c
    type: w
    subtype: led
  l_neoseg_0_0_b:
    previous: l_neoseg_0_0_n
    type: w
    subtype: led
  l_neoseg_0_0_na:
    previous: l_neoseg_0_0_b
    type: w
    subtype: led

segment_displays:
  display1:
    number: 1
    platform_settings:
      lights:
        - a: l_neoseg_0_0_a
          b: l_neoseg_0_0_b
          c: l_neoseg_0_0_c
          d: l_neoseg_0_0_d
          e: l_neoseg_0_0_e
          f: l_neoseg_0_0_f
          g: l_neoseg_0_0_g
          h: l_neoseg_0_0_h
          k: l_neoseg_0_0_k
          m: l_neoseg_0_0_m
          n: l_neoseg_0_0_n
          p: l_neoseg_0_0_p
          r: l_neoseg_0_0_r
          s: l_neoseg_0_0_s
          t: l_neoseg_0_0_t
          u: l_neoseg_0_0_u
      type: 16segment

What if it did not work?

Have a look at our hardware troubleshooting guide.


Something missing or wrong? You can fix it!

This website is edited by people like you! Is something wrong or missing? Is something out of date, or can you explain it better?

Please help us! You can fix it yourself and be an official "open source" contributor!

It's easy! See our Beginner's guide to editing the docs.

Page navigation via the keyboard: < >

You can navigate this site via the keyboard. There are two modes:

General navigation, when search is not focused:

  • F , S , / : open search dialog
  • P , , : go to previous page
  • N , . : go to next page

While using the search function:

  • Down , Up : select next / previous result
  • Esc , Tab : close search
  • Enter : go to highlighted page in the results