mcuadros / go-rpi-rgb-led-matrix Goto Github PK
View Code? Open in Web Editor NEWGo binding for rpi-rgb-led-matrix an excellent C++ library to control RGB LED displays with Raspberry Pi GPIO.
License: MIT License
Go binding for rpi-rgb-led-matrix an excellent C++ library to control RGB LED displays with Raspberry Pi GPIO.
License: MIT License
programs run but fail to render to matrix under raspbian stretch due to magic memory value. See hzeller/rpi-rgb-led-matrix@9c1f6bb
pulling in latest version to vendor fixes on stretch but I have not verified on other systems.
Started the client. It listens on IPv6 (tcp6)
tcp6 0 0 :::1234 :::* LISTEN 29868/main
adjusted the client to connect to:
rpc.NewClient("tcp6", "[::]:1234")
Testing it with emulator, but unfortunately the window remains black. Nothing is displayed.
I tested it under user root.
Does this also work with emulator?
This repository is licensed MIT, but the vendor repository is GPL 2. Doesn't that mean that this must be released as GPL 2 or later? The upstream author calls this out explicitly.
Really a good work. It helped me alot to understand and start our own development further.
I am able to display the text with tk.DrawString function, however, I am looking for a function to scroll the text. I have gone through the resources, I didn't find any related to scroll text in golang. I am new to this language, learning it with small steps. Would be great if anybody can help me.
The library panics when not run as root, because the rip-rgb-led-matrix
needs to do some low-level stuff which requires root access. Instead of panicing, it might be better to recover and return an error in NewRGBLedMatrix()
.
Hi @mcuadros. A while back I blindly submitted a PR which I prepared in my head. My idea was to catch panics which were caused by an invalid config or not running as root. But I just noticed that this doesn't work as expected.
The reason why the code panics is located in these two lines.
m := C.led_matrix_create_from_options(config.toC(), nil, nil)
b := C.led_matrix_create_offscreen_canvas(m)
// Some other code ...
if m == nil {
return nil, fmt.Errorf("unable to allocate memory")
}
If the application is not running as root, m
will benil
. Why this case is handled, m
is still passed to b := C.led_matrix_create_offscreen_canvas(m)
without checking that m
is not nil
! This causes the panic.
A simple solution could look like this:
m := C.led_matrix_create_from_options(config.toC(), nil, nil)
if m == nil {
return nil, fmt.Errorf("unable to allocate memory for matrix")
}
b := C.led_matrix_create_offscreen_canvas(m)
if b == nil {
return nil, fmt.Errorf("unable to allocate memory for offscreen canvas")
}
// Do some other stuff ...
Feel free to suggest a different solution or drop me line if you want me to prepare a PR.
Got little bit confused with program parameters, so with 2 panels 32x64 I have to pass:
go run main.go -image mariosmall.gif -led-chain 2 -led-parallel 2 -led-rows 32
is this correct?
Thanks,
Hello,
I am trying to use your library with an Adafruit Bonnet adapter board. I have installed the C and Python code with the script that Adafruit recommends for installation:
curl https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/rgb-matrix.sh >rgb-matrix.sh
sudo bash rgb-matrix.sh
The script runs fine, it installs everything.
I have tried the examples in the examples-api-use folder, they run fine, for example with the following code:
sudo ./clock --led-rows=32 --led-cols=64 --led-slowdown-gpio=1 --led-multiplexing=1 -f ../fonts/7x13.bdf -d "%H:%M:%S"
But if I install your library (including the compilation of the C code) and try to run any of your examples, they run, but nothing shows up in the RGB matrix. I have the feeling that I am missing some obvious step. Could you please help me?
(If I try the C library examples downloaded with Adafruit they still work...)
Hi @mcuadros. If a user of this package wants to get the image currently showing on the matrix (for example by using the draw
package) he is not able to do so. The reason for this is located in this single line. After rendering, the led buffer is re-allocated and thus initialised with zero values. So after calling the Render()
method on a matrix (or canvas), you only get 0 (color.Black
). An easy fix is to just remove the mentioned line and keep the led buffer filled. Since users will usually just draw over with new content, this shouldn't be an issue.
Any hints or other ideas on this? I can also prepare a PR if you want to.
Followed the instructions on the in README.md but got this:
borud@raspberrypi:~/gocode/src/github.com/mcuadros/go-rpi-rgb-led-matrix $ go install -v ./...
matrix.go: malformed #cgo argument: -I${SRCDIR}/vendor/rpi-rgb-led-matrix/include
examples/basic/main.go:8:2: /home/borud/gocode/src/github.com/mcuadros/go-rpi-rgb-led-matrix/matrix.go: malformed #cgo argument: -I${SRCDIR}/vendor/rpi-rgb-led-matrix/include
Hi,
I was trying to install the binding. It throws an error as mentioned in the readme. But not the same.
# github.com/mcuadros/go-rpi-rgb-led-matrix
../../../work/pkg/mod/github.com/mcuadros/[email protected]/matrix.go:6:10: fatal error: led-matrix-c.h: No such file or directory
#include <led-matrix-c.h>
^~~~~~~~~~~~~~~~
compilation terminated.
How should i deal with it ?
go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/username/.cache/go-build"
GOENV="/home/username/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/username/work/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/username/work"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/username/gocv_work/src/rgbtest/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build058517942=/tmp/go-build -gno-record-gcc-switches"
Any guidance?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.