scrolling text implimented in Python

This commit is contained in:
Neythen 2021-04-27 19:29:14 +01:00
parent 992251955d
commit 799fd16f8f
6 changed files with 88 additions and 6 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "rpi-rgb-led-matrix"]
path = rpi-rgb-led-matrix
url = https://github.com/hzeller/rpi-rgb-led-matrix/

1
rpi-rgb-led-matrix Submodule

@ -0,0 +1 @@
Subproject commit dfc27c15c224a92496034a39512a274744879e86

View File

@ -13,12 +13,15 @@ from PIL import Image, ImageDraw, ImageFont
import time
import csv
from rgbmatrix import RGBMatrix, RGBMatrixOptions
class StockTicker():
def __init__(self):
#Define global resources
self.symbols = []
self.ApiKeys = [["b1be6696d54342bdb5c8f59a052854fd","237d183faf984e7eba708a647c55153a","3012b3cb19784ed4be2b02e9907e53cb"],["f835e85df2a74df1904fe6dc53bcc17a","41ec268496744c34a96e3c408081300b","2d566fc71ade46d688713b13730c5219"]]
#self.ApiKeys = [["6172b84d1f464ad88b95ed52e4391bce","979f9b8c9ee748fbbb57cb490ccaaf42","593fa818a44144699b75433aafd92d15"]
#self.ApiKeys = [["b1be6696d54342bdb5c8f59a052854fd","237d183faf984e7eba708a647c55153a","3012b3cb19784ed4be2b02e9907e53cb"],["f835e85df2a74df1904fe6dc53bcc17a","41ec268496744c34a96e3c408081300b","2d566fc71ade46d688713b13730c5219"]]
self.ApiKeys = [["6172b84d1f464ad88b95ed52e4391bce","979f9b8c9ee748fbbb57cb490ccaaf42","593fa818a44144699b75433aafd92d15"]]
self.retrievedList = []
self.greenORred = (255, 255, 255)
self.ListStocks = []
@ -31,7 +34,64 @@ class StockTicker():
self.Delay = 20
self.parseCSV = 0
self.symbolLength = 0
self.brightness = 1.0
# Configuration for the matrix
options = RGBMatrixOptions()
options.rows = 64
options.cols = 64
options.chain_length = 1
options.parallel = 1
options.hardware_mapping = 'adafruit-hat' # If you have an Adafruit HAT: 'adafruit-hat'
options.gpio_slowdown = 4
self.matrix = RGBMatrix(options = options)
def openImage(self, image_file):
image = Image.open(image_file)
# Make image fit our screen.
#image.thumbnail((self.matrix.width, self.matrix.height), Image.ANTIALIAS)
image = image.convert('RGB')
return image
def SetImage(self, image, pos_x = 0, pos_y = 0, offset_x = 0, offset_y = 0, unsafe=True):
if (image.mode != "RGB"):
raise Exception("Currently, only RGB mode is supported for SetImage(). Please create images with mode 'RGB' or convert first with image = image.convert('RGB'). Pull requests to support more modes natively are also welcome :)")
if unsafe:
#In unsafe mode we directly access the underlying PIL image array
#in cython, which is considered unsafe pointer accecss,
#however it's super fast and seems to work fine
#https://groups.google.com/forum/#!topic/cython-users/Dc1ft5W6KM4
img_width, img_height = image.size
self.matrix.SetPixelsPillow(offset_x, offset_y, img_width, img_height, image)
else:
# First implementation of a SetImage(). OPTIMIZE_ME: A more native
# implementation that directly reads the buffer and calls the underlying
# C functions can certainly be faster.
img_width, img_height = image.size
pixels = image.load()
for x in range(max(0, -offset_x), min(img_width, self.matrix.width - offset_x)):
for y in range(max(0, -offset_y), min(img_height, self.matrix.height - offset_y)):
(r, g, b) = pixels[x, y]
self.matrix.SetPixel(x + offset_x, y + offset_y, r*brightness, g*brightness, b*brightness)
def ScrollImage(self, image_file, pos_x = 0, pos_y = 0, delay = 0.05):
image = self.openImage(image_file)
i = 0
while True:
self.SetImage(image, offset_x = -i, offset_y = 0)
time.sleep(delay)
i += 1
#Get the logo from file that is the same as ticker name
def getLogo(self, Ticker):
try:
@ -72,7 +132,7 @@ class StockTicker():
#Draw Ticker, current and change onto one image
def textToImage(self, TICKER, CURRENT, CHANGE, ARROW):
font = ImageFont.truetype("EncodeSans.ttf", 18)
font = ImageFont.load("7x14.pil")
img = Image.new('RGB', (150, 32))
d = ImageDraw.Draw(img)
@ -110,7 +170,7 @@ class StockTicker():
#Get current prices and day prices for the ticker then format the response into an array
def getStockPrices(self, APIKEY, SYMBOLS):
APIKEY = "237d183faf984e7eba708a647c55153a"
try:
symbols_list = SYMBOLS.split(",")
td = TDClient(apikey=APIKEY)
@ -141,7 +201,7 @@ class StockTicker():
j=0
while (j<3):
print('API KEY: ' + str(self.ApiKeys[self.keySwapper][j]))
# NT: this weird API key thing doesnt work, when I hard code the API key in the above function it does
self.getStockPrices(self.ApiKeys[self.keySwapper][j], self.symbols[(j+self.parseCSV)][0])
if (self.ApiCalledError == False):
@ -203,7 +263,7 @@ class StockTicker():
self.keySwapper += 1
self.running = True
self.parseCSV += 3
while (True):
if (self.running == True):
if (self.keySwapper<=1):

Binary file not shown.

18
test.py Normal file
View File

@ -0,0 +1,18 @@
from twelvedata import TDClient
import sys
import os
import threading
from PIL import Image, ImageDraw, ImageFont
import time
import csv
from rgbmatrix import RGBMatrix, RGBMatrixOptions
from stockTicker import StockTicker
if __name__ == '__main__':
stock_ticker = StockTicker()
while(True):
stock_ticker.ScrollImage('final.ppm')
time.sleep(100)