Last active
October 11, 2023 15:31
-
-
Save chubbyemu/4ca0c68878c6d978d067da4a36bcc71d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# THIS SCRIPT USES THE LIBRARY AT: | |
# https://github.com/hzeller/rpi-rgb-led-matrix | |
# BE SURE TO CLONE IT AND READ THE README, as highlighted in the video :) | |
import os, time, threading, random | |
import feedparser | |
from PIL import Image, ImageFont, ImageDraw | |
from random import shuffle | |
BITLY_ACCESS_TOKEN="BITLY_ACCESS_TOKEN" | |
items=[] | |
displayItems=[] | |
feeds=[ | |
#enter all news feeds you want here | |
"http://www.fda.gov/AboutFDA/ContactFDA/StayInformed/RSSFeeds/PressReleases/rss.xml", | |
"http://www.fiercepharma.com/feed", | |
"http://www.fiercebiotech.com/feed", | |
] | |
def colorRed(): | |
return (255, 0, 0) | |
def colorGreen(): | |
return (0, 255, 0) | |
def colorBlue(): | |
return (0, 0, 255) | |
def colorRandom(): | |
return (random.randint(0,255), random.randint(0,255), random.randint(0,255)) | |
def populateItems(): | |
#first clear out everything | |
del items[:] | |
del displayItems[:] | |
#delete all the image files | |
os.system("find . -name \*.ppm -delete") | |
for url in feeds: | |
feed=feedparser.parse(url) | |
posts=feed["items"] | |
for post in posts: | |
items.append(post) | |
shuffle(items) | |
def createLinks(): | |
try: | |
populateItems() | |
for idx, item in enumerate(items): | |
writeImage(unicode(item["title"]), idx) | |
except ValueError: | |
print("Bummer :( I couldn't make you 'dem links :(") | |
finally: | |
print("\nWill get more news next half hour!\n\n") | |
def writeImage(url, count): | |
bitIndex=0 | |
link, headLine="", url[:] | |
def randCol(index = -1): | |
if index % 3 == 0: | |
return colorRed() | |
elif index % 3 == 1: | |
return colorGreen() | |
elif index % 3 == 2: | |
return colorBlue() | |
else: | |
return colorRandom() | |
text = ((headLine, randCol(count)), (link, colorRandom())) | |
font = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeSans.ttf", 16) | |
all_text = "" | |
for text_color_pair in text: | |
t = text_color_pair[0] | |
all_text = all_text + t | |
width, ignore = font.getsize(all_text) | |
im = Image.new("RGB", (width + 30, 16), "black") | |
draw = ImageDraw.Draw(im) | |
x = 0; | |
for text_color_pair in text: | |
t = text_color_pair[0] | |
c = text_color_pair[1] | |
draw.text((x, 0), t, c, font=font) | |
x = x + font.getsize(t)[0] | |
filename=str(count)+".ppm" | |
displayItems.append(filename) | |
im.save(filename) | |
def run(): | |
print("News Fetched at {}\n".format(time.ctime())) | |
createLinks() | |
threading.Timer(len(items) * 60, run).start() | |
showOnLEDDisplay() | |
def showOnLEDDisplay(): | |
for disp in displayItems[:60]: | |
os.system("sudo ./led-matrix -r 16 -c 3 -t 60 -m 25 -D 1 "+disp) | |
if __name__ == '__main__': | |
run() |
Hi @mcwTexas. I don’t know much about these things. Now I put it running and my task manager doesn’t show increasing number of scrolling-text-example processes. Only one Sh too.
Maybe asking from others, which knows about coding.
My line is
os.system(sudo ./scrolling-text-example -f ../fonts/9x15.bdf -y0 -s9 -l2 -C ”+ randomColor +” —led-cols=32 —led-rows=16 —led-brightness=75 —led-chain=3 ”+title)
feedparser.pyc is also on examples-api-use-folder as is rssparse.py.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi @Jani73 You were so kind before in helping me, I thought I'd try my luck again. I've noticed a new problem and tried to troubleshoot for the past 2 days. I'm a newby so not much I know to do. The newsfeed matrix scroll looks good for x period of time, and then, for no reason I can tell, the data becomes garbled. It looks like multiple threads are trying to be written and display at the same time on the matrix. It happens at various points -sometimes a couple hours after I start the scroll. I can stop the program and restart it, and all works good again - for a while and then it happens again. Watching the code run in the bash window, everything appears to run normal. Here are the settings I'm using on the os.system line. Any thoughts?
os.system("sudo ./rpi-rgb-led-matrix/examples-api-use/scrolling-text-example -f ./rpi-rgb-led-matrix/fonts/7x13.bdf -y5 -s7 -l1 -C "+ randomColor +" -B 0,0,0 --led-cols=64 --led-rows=32 --led-chain=1 --led-slowdown-gpio=4 " +title)
After running the program all night and seeing the display issue again, I checked the task manager. It showed tons of Sh and scrolling-matrix-example processes. I'm now assuming each time through the loop it starts a new process then never kills the process before starting another. While almost all of the processed were using o CPU, a 2 or 3 of the instances were utilizing CPU. So going out on a limb here, is there a command to kill the process/instance at the end of each loop? I feel like that would solve my issue.