rpi-rgb-led-matrix icon indicating copy to clipboard operation
rpi-rgb-led-matrix copied to clipboard

Help with scrolling 2 lines of text with runtext.py or other *.py

Open absolutspl opened this issue 4 years ago • 7 comments

I have read through all the pertinent info from adafruit and rpi-rgb-led-matrix. Sorry if this is a repeated question. Is it done with multiple lines? like this: self.parser.add_argument("-t", "--text", help="The text to scroll on the RGB LED panel", default="ZZZZZZ") self.parser.add_argument("-t", "--text", help="The text to scroll on the RGB LED panel", default="XXXXXX") Thanks in advance.

absolutspl avatar Jun 23 '20 13:06 absolutspl

Not clear what you mean, but do you want two different lines shown on the panel ? Of course - just modify the code to do that. You have the power of Python or C++ at your hands, you can do anything you want with the canvas the LED matrix provides.

hzeller avatar Jun 23 '20 15:06 hzeller

I am a systems/network administrator. Yes i would like to scroll 2 different lines of text simultaneously.
Can you explain about the "canvas"? I am only lightly versed in python,near zero in C++. I truly appreciate all of your coding and help to everyone on the forum.

If I stick with runtext.py, can you point me where to change the code.

#!/usr/bin/env python

Display a runtext with double-buffering.

from samplebase import SampleBase from rgbmatrix import graphics import time

class RunText(SampleBase): def init(self, *args, **kwargs): super(RunText, self).init(*args, **kwargs) self.parser.add_argument("-t", "--text", help="The text to scroll on the RGB LED panel", default="Hello world!")

def run(self):
    offscreen_canvas = self.matrix.CreateFrameCanvas()
    font = graphics.Font()
    font.LoadFont("../../../fonts/7x13.bdf")
    textColor = graphics.Color(255, 255, 0)
    pos = offscreen_canvas.width
    my_text = self.args.text

    while True:
        offscreen_canvas.Clear()
        len = graphics.DrawText(offscreen_canvas, font, pos, 10, textColor, my_text)
        pos -= 1
        if (pos + len < 0):
            pos = offscreen_canvas.width

        time.sleep(0.05)
        offscreen_canvas = self.matrix.SwapOnVSync(offscreen_canvas)

Main function

if name == "main": run_text = RunText() if (not run_text.process()): run_text.print_help()

On Tue, Jun 23, 2020 at 11:16 AM Henner Zeller [email protected] wrote:

Not clear what you mean, but do you want two different lines shown on the panel ? Of course - just modify the code to do that. You have the power of Python or C++ at your hands, you can do anything you want with the canvas the LED matrix provides.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/hzeller/rpi-rgb-led-matrix/issues/1087#issuecomment-648230594, or unsubscribe https://github.com/notifications/unsubscribe-auth/AQBUPSKSPYGFJDYDJCWZKVLRYDBOTANCNFSM4OFURVXA .

absolutspl avatar Jun 24 '20 10:06 absolutspl

I also have a similar requirement.

Please provide if a solution exists!

I am using c-code to make program for running two lines simultaneously, and for that i will have to run 2 for loops simultaneously inside main() function, is it possible?

i think for that i will have to create a thread and in that thread the "canvas" will not be recognized, the "canvas" is only accessible in main() function isn't it?

Please guide me in the right direction, Thank you!

anandrajgupta avatar Jul 19 '22 09:07 anandrajgupta

I will have to look over my notes and see how i finally got that to work. I will get back to you shortly.

On Tue, Jul 19, 2022 at 5:43 AM ARG @.***> wrote:

I also have a similar requirement.

Please provide if a solution exists!

I am using c-code to make program for running two lines simultaneously, and for that i will have to run 2 for loops simultaneously inside main() function, is it possible?

i think for that i will have to create a thread and in that thread the "canvas" will not be recognized, the "canvas" is only accessible in main() function isn't it?

Please guide me in the right direction, Thank you!

— Reply to this email directly, view it on GitHub https://github.com/hzeller/rpi-rgb-led-matrix/issues/1087#issuecomment-1188835923, or unsubscribe https://github.com/notifications/unsubscribe-auth/AQBUPSJJBI7LCZAB626AR7DVUZ2CZANCNFSM4OFURVXA . You are receiving this because you authored the thread.Message ID: @.***>

absolutspl avatar Jul 19 '22 17:07 absolutspl

Thank you very much, i will be waiting...

anandrajgupta avatar Jul 21 '22 09:07 anandrajgupta

With script & python i am :
1 taking temperature readings from a database 2 combining all the information into 1 line 3 adjusting color of led text based on temp or humidity 4 creating a ppm 5 displaying ppm

Here my information Dump:

pi@BondRoomLed:~ $ sudo crontab -l

Edit this file to introduce tasks to be run by cron.

Each task to run has to be defined through a single line

indicating with different fields when the task will be run

and what command to run for the task

To define the time you can provide concrete values for

minute (m), hour (h), day of month (dom), month (mon),

and day of week (dow) or use '*' in these fields (for 'any').

Notice that tasks will be started based on the cron's system

daemon's notion of time and timezones.

Output of the crontab jobs (including errors) is sent through

email to the user the crontab file belongs to (unless redirected).

For example, you can run a backup of all your user accounts

at 5 a.m every week with:

0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

For more information see the manual pages of crontab(5) and cron(8)

m h dom mon dow command

*/5 * * * * /home/pi/rpi-rgb-led-matrix-master/ledcron >> /home/pi/rpi-rgb-led-matrix-master/error.log 2>&1

pi@BondRoomLed:~ $ cat /home/pi/rpi-rgb-led-matrix-master/ledcron #!/bin/bash #A Bash script to copy data from database to prep led file,and display new data every 5 minutes by Shawn Logan #/home/pi/rpi-rgb-led-matrix-master/ledcron# #1 script started every 5 minutes from crontab sudo /usr/bin/killall led-matrix sudo /usr/bin/killall python cd /home/pi/rpi-rgb-led-matrix-master/ sudo /home/pi/rpi-rgb-led-matrix-master/rem.sh

pi@BondRoomLed:~ $ cat /home/pi/rpi-rgb-led-matrix-master/rem.sh #!/bin/bash #A Bash script to copy data from database to prep led file, by Shawn Logan #/home/pi/rpi-rgb-led-matrix-master/rem.sh #2 Script cd /home/pi/rpi-rgb-led-matrix-master/ echo " " >/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p88888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT device_desc FROM telemetry_log WHERE device_id='30' and unit_of_measure='F' ORDER BY date DESC Limit 1" >>/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p88888 -h 10.10.16.9 sensor_logs -e "SELECT SUBSTRING_INDEX(date,' ',-1) FROM telemetry_log WHERE device_id='30' ORDER BY date DESC Limit 1" >>/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p88888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT Value,unit_of_measure FROM telemetry_log WHERE device_id='30' and unit_of_measure='F' ORDER BY date DESC Limit 1" >>/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p8888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT Value,unit_of_measure FROM telemetry_log WHERE device_id='30' and unit_of_measure='%' ORDER BY date DESC Limit 1" >>/home/pi/rpi-rgb-led-matrix-master/exp.txt echo " " >>/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p88888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT device_desc FROM telemetry_log WHERE device_id='72' and unit_of_measure='F' ORDER BY date DESC Limit 1" >>/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p 88888 -h 10.10.16.9 sensor_logs -e "SELECT SUBSTRING_INDEX(date,' ',-1) FROM telemetry_log WHERE device_id='72' ORDER BY date DESC Limit 1" >>/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p 88888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT Value,unit_of_measure FROM telemetry_log WHERE device_id='72' and unit_of_measure='F' ORDER BY date DESC Limit 1" >>/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p 88888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT Value,unit_of_measure FROM telemetry_log WHERE device_id='72' and unit_of_measure='%' ORDER BY date DESC Limit 1" >>/home/pi/rpi-rgb-led-matrix-master/exp.txt

sudo mysql -sN -u root -p 88888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT Value FROM telemetry_log WHERE device_id='72' and unit_of_measure='%' ORDER BY date DESC Limit 1" >/home/pi/rpi-rgb-led-matrix-master/per.txt

echo $(cat /home/pi/rpi-rgb-led-matrix-master/exp.txt) > /home/pi/rpi-rgb-led-matrix-master/expNew.txt #Combine lines sed "s/BondRoom/$(cat /home/pi/rpi-rgb-led-matrix-master/expNew.txt)/" /home/pi/rpi-rgb-led-matrix-master/Multi.py > /home/pi/rpi-rgb-led-matrix-master/Multi-line.py sudo /home/pi/rpi-rgb-led-matrix-master/clr.sh

pi@BondRoomLed:~ $ cat /home/pi/rpi-rgb-led-matrix-master/clr.sh #!/bin/bash cd /home/pi/rpi-rgb-led-matrix-master/ #A Bash script to set led color depending on humidity by Shawn Logan #/home/pi/rpi-rgb-led-matrix-master/cls.sh #3 script if [ $(mysql -sN -u root -p 88888 -h 10.10.16.9 sensor_logs -e "SELECT (value AS SIGNED INTEGER) FROM telemetry_log WHERE device_id='72' and unit_of_measure='%' ORDER BY date DESC Limit 1;") -ge "52" ]; then sed "s/ZZZZZ/$(cat /home/pi/rpi-rgb-led-matrix-master/red.txt)/" /home/pi/rpi-rgb-led-matrix-master/Multi-line.py > /home/pi/rpi-rgb-led-matrix-master/Multi-clr.py else sed "s/ZZZZZ/$(cat /home/pi/rpi-rgb-led-matrix-master/green.txt)/" /home/pi/rpi-rgb-led-matrix-master/Multi-line.py > /home/pi/rpi-rgb-led-matrix-master/Multi-clr.py fi sudo python /home/pi/rpi-rgb-led-matrix-master/Multi-clr.py

pi@BondRoomLed:~ $ cat /home/pi/rpi-rgb-led-matrix-master/Multi-clr.py from PIL import ImageFont, Image, ImageDraw import textwrap import os

Source text, and wrap it.

userinput = "BondFront 17:02:26 68.88 F 44.75 % BondBack 14:03:20 69.96 F 51.87 %" text = textwrap.fill(userinput, 38)

Font size, color and type.

fontcolor = (0,255,0) fontsize = 14 font = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeSans.ttf", fontsize)

Determine text size using a scratch image.

img = Image.new("RGBA", (1,1)) draw = ImageDraw.Draw(img) textsize = draw.textsize(text, font)

Now that we know how big it should be, create

the final image and put the text on it.

background = (0, 0, 0, 15) img = Image.new("RGBA", textsize, background) draw = ImageDraw.Draw(img) draw.text((0, 0), text, fontcolor, font)

img.save("seesharp.ppm")

os.system("./led-matrix -t 288 -D 1 -c 2 seesharp.ppm")

Results with 2 lines of scrolling text that updates every 5 minutes Location of temp sensor, time of last read from sensor, and temp & humidity of last read. unnamed

unnamed

On Thu, Jul 21, 2022 at 5:04 AM ARG @.***> wrote:

Thank you very much, i will be waiting...

— Reply to this email directly, view it on GitHub https://github.com/hzeller/rpi-rgb-led-matrix/issuesimage.png/1087#issuecomment-1191234623, or unsubscribe https://github.com/notifications/unsubscribe-auth/AQBUPSL6ANDZSWPFVT44BITVVEHCFANCNFSM4OFURVXA . You are receiving this because you authored the thread.Message ID: @.***>

absolutspl avatar Jul 21 '22 13:07 absolutspl

Thank you!

As i mentioned earlier i am using C-Code so this help is not usable for me, thank you for the efforts anyway :)

anandrajgupta avatar Jul 22 '22 16:07 anandrajgupta

In python i am : 1 taking temperature readings from a database 2 combining all the information into 1 line 3 adjusting color of led text based on temp or humidity 4 creating a ppm 5 displaying ppm

Here my information Dump:

@.**:~ $ sudo crontab -l

Edit this file to introduce tasks to be run by cron.

Each task to run has to be defined through a single line

indicating with different fields when the task will be run

and what command to run for the task

To define the time you can provide concrete values for

minute (m), hour (h), day of month (dom), month (mon),

and day of week (dow) or use '*' in these fields (for 'any').

Notice that tasks will be started based on the cron's system

daemon's notion of time and timezones.

Output of the crontab jobs (including errors) is sent through

email to the user the crontab file belongs to (unless redirected).

For example, you can run a backup of all your user accounts

at 5 a.m every week with:

0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

For more information see the manual pages of crontab(5) and cron(8)

m h dom mon dow command

*/5 * * * * /home/pi/rpi-rgb-led-matrix-master/ledcron >> /home/pi/rpi-rgb-led-matrix-master/error.log 2>&1

@.**:~ $ cat /home/pi/rpi-rgb-led-matrix-master/ledcron #!/bin/bash #A Bash script to copy data from database to prep led file,and display new data every 5 minutes by Shawn Logan #/home/pi/rpi-rgb-led-matrix-master/ledcron# #1 script started every 5 minutes from crontab sudo /usr/bin/killall led-matrix sudo /usr/bin/killall python cd /home/pi/rpi-rgb-led-matrix-master/ sudo /home/pi/rpi-rgb-led-matrix-master/rem.sh #sudo python /home/pi/rpi-rgb-led-matrix-master/Multi-clr.py

@.**:~ $ cat /home/pi/rpi-rgb-led-matrix-master/rem.sh #!/bin/bash #A Bash script to copy data from database to prep led file, by Shawn Logan #/home/pi/rpi-rgb-led-matrix-master/rem.sh #2 Script cd /home/pi/rpi-rgb-led-matrix-master/ echo " " >/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p88888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT device_desc FROM telemetry_log WHERE device_id='30' and unit_of_measure='F' ORDER BY date DESC Limit 1"

/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p88888 -h 10.10.16.9 sensor_logs -e "SELECT SUBSTRING_INDEX(date,' ',-1) FROM telemetry_log WHERE device_id='30' ORDER BY date DESC Limit 1" >>/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p88888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT Value,unit_of_measure FROM telemetry_log WHERE device_id='30' and unit_of_measure='F' ORDER BY date DESC Limit 1" /home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p8888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT Value,unit_of_measure FROM telemetry_log WHERE device_id='30' and unit_of_measure='%' ORDER BY date DESC Limit 1" /home/pi/rpi-rgb-led-matrix-master/exp.txt echo " " >>/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p88888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT device_desc FROM telemetry_log WHERE device_id='72' and unit_of_measure='F' ORDER BY date DESC Limit 1" /home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p 88888 -h 10.10.16.9 sensor_logs -e "SELECT SUBSTRING_INDEX(date,' ',-1) FROM telemetry_log WHERE device_id='72' ORDER BY date DESC Limit 1" >>/home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p 88888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT Value,unit_of_measure FROM telemetry_log WHERE device_id='72' and unit_of_measure='F' ORDER BY date DESC Limit 1" /home/pi/rpi-rgb-led-matrix-master/exp.txt sudo mysql -sN -u root -p 88888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT Value,unit_of_measure FROM telemetry_log WHERE device_id='72' and unit_of_measure='%' ORDER BY date DESC Limit 1" /home/pi/rpi-rgb-led-matrix-master/exp.txt

sudo mysql -sN -u root -p 88888 -h 10.10.16.9 sensor_logs -e "SELECT DISTINCT Value FROM telemetry_log WHERE device_id='72' and unit_of_measure='%' ORDER BY date DESC Limit 1"

/home/pi/rpi-rgb-led-matrix-master/per.txt

echo $(cat /home/pi/rpi-rgb-led-matrix-master/exp.txt) > /home/pi/rpi-rgb-led-matrix-master/expNew.txt #Combine lines sed "s/BondRoom/$(cat /home/pi/rpi-rgb-led-matrix-master/expNew.txt)/" /home/pi/rpi-rgb-led-matrix-master/Multi.py > /home/pi/rpi-rgb-led-matrix-master/Multi-line.py sudo /home/pi/rpi-rgb-led-matrix-master/clr.sh

@.**:~ $ cat /home/pi/rpi-rgb-led-matrix-master/clr.sh #!/bin/bash cd /home/pi/rpi-rgb-led-matrix-master/ #A Bash script to set led color depending on humidity by Shawn Logan #/home/pi/rpi-rgb-led-matrix-master/cls.sh #3 script if [ $(mysql -sN -u root -p 88888 -h 10.10.16.9 sensor_logs -e "SELECT (value AS SIGNED INTEGER) FROM telemetry_log WHERE device_id='72' and unit_of_measure='%' ORDER BY date DESC Limit 1;") -ge "52" ]; then sed "s/ZZZZZ/$(cat /home/pi/rpi-rgb-led-matrix-master/red.txt)/" /home/pi/rpi-rgb-led-matrix-master/Multi-line.py > /home/pi/rpi-rgb-led-matrix-master/Multi-clr.py else sed "s/ZZZZZ/$(cat /home/pi/rpi-rgb-led-matrix-master/green.txt)/" /home/pi/rpi-rgb-led-matrix-master/Multi-line.py > /home/pi/rpi-rgb-led-matrix-master/Multi-clr.py fi sudo python /home/pi/rpi-rgb-led-matrix-master/Multi-clr.py

@.**:~ $ cat /home/pi/rpi-rgb-led-matrix-master/Multi-clr.py from PIL import ImageFont, Image, ImageDraw import textwrap import os

Source text, and wrap it.

userinput = "BondFront 17:02:26 68.88 F 44.75 % BondBack 14:03:20 69.96 F 51.87 %" text = textwrap.fill(userinput, 38)

Font size, color and type.

fontcolor = (0,255,0) fontsize = 14 font = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeSans.ttf", fontsize)

Determine text size using a scratch image.

img = Image.new("RGBA", (1,1)) draw = ImageDraw.Draw(img) textsize = draw.textsize(text, font)

Now that we know how big it should be, create

the final image and put the text on it.

background = (0, 0, 0, 15) img = Image.new("RGBA", textsize, background) draw = ImageDraw.Draw(img) draw.text((0, 0), text, fontcolor, font)

img.save("seesharp.ppm")

os.system("./led-matrix -t 288 -D 1 -c 2 seesharp.ppm")

On Tue, Jul 19, 2022 at 5:43 AM ARG @.***> wrote:

I also have a similar requirement.

Please provide if a solution exists!

I am using c-code to make program for running two lines simultaneously, and for that i will have to run 2 for loops simultaneously inside main() function, is it possible?

i think for that i will have to create a thread and in that thread the "canvas" will not be recognized, the "canvas" is only accessible in main() function isn't it?

Please guide me in the right direction, Thank you!

— Reply to this email directly, view it on GitHub https://github.com/hzeller/rpi-rgb-led-matrix/issues/1087#issuecomment-1188835923, or unsubscribe https://github.com/notifications/unsubscribe-auth/AQBUPSJJBI7LCZAB626AR7DVUZ2CZANCNFSM4OFURVXA . You are receiving this because you authored the thread.Message ID: @.***>

absolutspl avatar Oct 11 '22 07:10 absolutspl