Giter VIP home page Giter VIP logo

network-rgb-matrix-display's Introduction

Network Matrix Display

Network Matrix Display is a set of libraries that allows you create a scalable network of matrix displays using Raspberry Pi Single Board Computers. It does this by using TCIP/IP as a transport method for the display data and is broken into two discrete sections; Client and Server.

Please refer to our how it works document for a detailed description of this projects functionality.

This project is choc-full of dependencies and is not just for the faint of heart. It requires you to put in effort to set things up.

It's worth noting that the scale of our project was not the cheapest solution for the desired result. The purpose of this project was to demonstrate what can be done with a hand full of available parts and open source libraries.
For the cheapest solution, we recommend display controllers like these.

Related documents:

General requirements

  • Good knowledge in C++
  • Basic understanding of how RGB Matrices work
  • Parts for your project

Client Requirements:

Server Requirements

Additional hardware

  • For Full Motion video, GigaBit Network switch
  • For low-framerate animations or periodic switches to static images, WIFI is fine
  • Frame for your matrix
  • Power supplies for your SBCs
  • Power supply for your RGB Matrix

Installation

Install DietPi on a Raspberry Pi 2 or greater. Make sure it has Internet connectivity. Then run this script to provision the system and install the Network Matrix Display project:

curl https://raw.githubusercontent.com/ModusCreateOrg/network-rgb-matrix-display/master/bin/install.sh | bash

If you want to perform these steps by hand, be sure to clone the network-rgb-matrix-display with the --recursive --submodules option.

If you forget to clone it this way, you can fix up your checked out copy by issuing this command:

git submodule update --init --recursive

Client example.

The following example will generate the proper network display client configuration and kick off

  NetworkDisplayConfig displayConfig;

  displayConfig.frameRate = 60; // -1 to disable

  // This is your source display dimensions
  displayConfig.inputScreenWidth = 320;
  displayConfig.inputScreenHeight = 240;

  // Dimensions for your panels
  displayConfig.singlePanelWidth = 64;
  displayConfig.singlePanelHeight = 64;

  // How you will lay out your segments
  displayConfig.segmentPanelsTall = 3;
  displayConfig.segmentPanelsWide = 1;

  // How you will lay out your panels per segment
  displayConfig.totalPanelsWide = 5;
  displayConfig.totalPanelsTall = 3;

  displayConfig.totalSegments = 5;

  displayConfig.destinationPort = "9890";
  
  // In this scheme, the last IP address octet rolls up for multiple segments. 
  // Segment 1 is 201, segment 2 is 202, etc..
  displayConfig.destinationIP = "10.0.1.20%i";
  displayConfig.destinationIpStartDigit = 1;

  displayConfig.outputScreenWidth = displayConfig.singlePanelWidth * displayConfig.totalPanelsWide;
  displayConfig.outputScreenHeight = displayConfig.singlePanelHeight * displayConfig.totalPanelsTall;

  NetworkDisplay *networkDisplay = new NetworkDisplay(displayConfig);

  std::thread(interrupterThread).detach();

  uint16_t color = 0;
  while (! interrupt_received) {
    // Your code could easily populate the input buffer (array of uint16_t) with the pixel data
    memset(networkDisplay->GetInputBuffer(), color += 1, networkDisplay->GetInputBufferSize());
    
    // Flush the display buffer to the network
    networkDisplay->Update();
  }

License

This library is licensed under MIT.

Contributing

Interested in contributing? Please see our contribution and code of conduct guidelines.

Modus Create

network-rgb-matrix-display's People

Contributors

jaygarcia avatar obscurerichard avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

network-rgb-matrix-display's Issues

Investigate ways to power Raspberry PIs from alternate 5V source

Notes from our Slack on powering the RPi4 from 5V PSUs:

Thursday, Aug 22nd, 2019

Jay Garcia 11:52 AM
sergiu should be able to power RPi4s via direct +5V @ 3Amps via direct connection to the GPIO Pins.

https://www.tomshardware.com/reviews/raspberry-pi-gpio-pinout,6122.html

Richard:
Lots of caveats in there though- no voltage regulator, no fuse. Be super careful... what 5V supply would we connect it to?
27 replies

Sergiu:
nothing special in mind. I know there is no voltage reg on that but we can use led quality level power supply

Sergiu:
these are really good quality and provide stable 5V

Jay Garcia:
we can use a small ATX power supply

Jay Garcia:
or the Chinly PSU we are driving the LEDs with

Richard:
Oooh, that’s 5V too? I couldn’t remember.., killing off one of the power supplies in the build would be awesome. What’s the part number for the Chinly supply?

Jay:
yes.
We would not be killing, but replacing.

Jay Garcia:
right now, this is a thought experiment. Not worth your time, Richard. 🙂

Richard:
I ❤️ thought experiments though. It would be cool if we could run some more 5V power off those Chinly PSUs, the Pis are not going to use very much power each. Maybe drawing 10A max? Probably much more like 5A unless we're really maxing out the power consumption. (edited)

Sergiu:
the Pi 4 official power supply is 5V 3A

Richard:
So 4x would be 5V 16A max

Sergiu:
yes, the problem is that here we care about having stable V.
On LEDs we have A stable

Sergiu:
For the Ro office I can get an A grade 20A 5V voltage regulated PSU (edited)

Sergiu:
maybe with the 16A we are to close to the PSU peak ?

Richard:
Depends on the power factor and possibly other concerns.

Sergiu:
A small PC PSU may be too much but that delivers really stable V on the rails

Sergiu:
usually PF is 0,9 on the good PSUs as I remember. I may be wrong (edited)

Sergiu:
I am not very good with electronics, only things I did are arduino automation for reef aquariums. I know basics (edited)

Matthew Kelch:
I’m not sure how cheap the Chinly supplies were, but have we priced out the difference to a quality Mean Well supply instead when it comes to future iterations/public documentation?

Matthew:
I’m a bit picky when it comes to power supplies — I’ve had too many bad experiences with the cheap ones.

Jay:
I’ve had bad experiences too. Mainly PSUs fizzing out. The Chinly psu seems to work very well.
The Project root folder has a spreadsheet that has links to most of the parts so that we can track details, etc. (edited)
👌
1

Jay:
I got this from amazon in the USA https://www.amazon.ae/CHINLY-Universal-Regulated-Switching-Transformer/dp/B01M0EW9H7
amazon.aeamazon.ae
CHINLY 5V Power Supply, CHINLY 60A Universal Regulated Switching Power Supply Transformer For WS2811 2801 WS2812B WS2813 APA102 LED Strip Light, CCTV, Radio, Computer Project (DC5V 60A 300W)
CHINLY 5V Power Supply, CHINLY 60A Universal Regulated Switching Power Supply Transformer For WS2811 2801 WS2812B WS2813 APA102 LED Strip Light, CCTV, Radio, Computer Project (DC5V 60A 300W) Brand : CHINLY(13 kB)
https://images-na.ssl-images-amazon.com/images/I/41S6fCbMJrL._SR600,315_SCLZZZZZZZ_.jpg

Matthew:
https://www.meanwell.com/webapp/product/search.aspx?prod=RSP-320
meanwell.commeanwell.com
RSP-320-MEAN WELL Switching Power Supply Manufacturer
MEAN WELL Switching Power Supply. MEAN WELL is a Switching Power Supply manufacturer in Taiwan. – SMPS, SPS manufacturer, AC DC , DC DC , DC AC, industrial power supply, Medical power supply, Din Rail power supply, LED power supply, LED driver, charger, inverter, adaptor, rack power, modular configurable power, open frame power

Matthew:
The cool thing with the Meanwell supplies is that you can usually find a pre-existing design for a 3D printed cover as well: https://www.thingiverse.com/thing:2078123
thingiverse.comthingiverse.com
PSU Cover - Meanwell RSP 320 by toolson
Cover made for a Meanwell RSP 320 power supply. Switch hole is for a Marquardt 1801 series switch. Update: 06.Feb.2017: - minor changes

Matthew:
Not that it would be hard to design one for the Chinly 🙂

Richard:
Oooh, only $42 for the RSP-320-5 https://www.amazon.com/Mean-RSP-320-5-Power-Supply-Signs/dp/B00IWC2RLS

Jay:
Nice. 60amps too

Richard:
I'm loving this review:
5 stars

The power supply easily handles the load

July 26, 2018
Verified Purchase

I am using one of these to power 16 Odroid XU4 computer boards. Running all of the boards uses around 240W which is 80% of what this unit can put out. The power supply easily handles the load. As others mentioned, the fan is a little loud for the amount of air it moves.

I measured the voltage when I first got it and it was a little below 5 volts so I used a small screwdriver to adjust it to exactly 5 volts.
It's been running continuously for several months now without a problem.

I'm planning to buy another one to power more Odroid computers.
(edited)

Richard:

https://www.aliexpress.com/item/32506618623.html
Ali Express is a rabbit hole, a beautiful, beautiful rabbit hole. Behold this power distribution board... maybe not the perfect one for this application, but in the neighborhood, especially if we are going to power Raspberry PIs directly from a single 5V power supply. This has fuses and is pre-populated with 2A fuses, which might work just fine for the RPis, given http://www.pidramble.com/wiki/benchmarks/power-consumption
How much amperage does each LCD panel draw?

aliexpress.comaliexpress.com
US $17.2 |5V 12V 24V DC power distribution 18 ch PCB board terminal block for switching power supply electricity current wiring LED switch-in Instrument Parts & Accessories from Tools on Aliexpress.com | Alibaba Group
Smarter Shopping, Better Living! Aliexpress.com
Jay Garcia 1:41 PM
shit. that's a nice find dude.
:awthanks:
1

Richard:
I liked their application picture. Look familiar ?

image

How to documentation needed

I was able to compile the network-display-client and the matrix-server but I'm kind of confused on how to make this work since there is no how to doc available.
Can you guys please make some examples?

Change server library to use CLI switch instead of hard coded for the port

Is your feature request related to a problem? Please describe.
Feature Request

Describe the solution you'd like
Would like to see the server library implementation allow for the use of a CLI parameter for a port number. Currently it's hardcoded.
https://github.com/ModusCreateOrg/network-rgb-matrix-display/blob/master/server/src/NetworkServer.cpp#L207

Describe alternatives you've considered
Could use a .ini file, but that's too much, IMHO.

Additional context

Create specifications for a networked display system driven by a chat bot so that Modites can display images or animations on the remote screens

Problem Statement

It would be great to have some way for Modites to send graphics, messages, or animations to the RGBrite boards.

Creating some sort of integration through Slack is one obvious way to do this.

We would need to build some more detailed specifications for this, though, and maybe do some proof of concept work. This issue is for creating the specifications.

Implementation Ideas

Here's a starting point for the specs:

  • We could start with a Hubot base and extend it
  • We might have Hubot listen for messages from our Slack, and then have it post to an AWS SNS topic.
  • We could have the matrix controller listening to an AWS SQS queue hooked up to the SNS topic. It could then pull down a message, graphics file, or animation to play on the display.
  • The sender should definitely be logged and displayed on the matrix as a social anti-abuse tactic

Unable to build client

I am struggling to build the client.
Issues:

  • Need CMake 3.17, not CMake 3.14+
  • Had to manually disable SDL2 from CMake (maybe there was a command for this?)
  • CMake wanted to build example that does not exist (CMake indicated it should have been in examples, but I could not find it.)
  • CMake errors out during linking something about CMake -E (I just stopped at this point)

I am not a CMake guru, I disabled OpenSSL in my CMake 3.21 build from source. I changed it to use direct-draw-on-buffer, but it then complained about image.bmp. I tried commenting that out. This is on Linux.

I am trying to test my library against this code base. I found two bugs in server.
Issues:

  • Possible race condition using mFrameCount to switch buffers inside thread (rare)
  • Pixels per panel is not computed correctly: width * width (easy fix)

Make Controller Node have its own touchscreen control panel

How cool would it be to have the control node for RGBrite be more accessible and have a visible control panel?
https://www.amazon.com/ideas/amzn1.account.AGKTLJXRIPJPGQGXPCJTSZRLAIRA/21867MM9DRB2Q?type=explore&ref=idea_cp_vl_ov_d
We'd need at least these 3 items, plus an easy way to connect it to the screen. It might be cool to devise a mounting system on hinges so that it could fold up into the rear of the display when not in use.

This could enhance #6 by adding message recall with a touchscreen interface

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.