| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- from __future__ import print_function, absolute_import, division
- print('receiver start')
- import sys
- import socket
- import traceback
- from path import Path
- from rgbmatrix import RGBMatrix, RGBMatrixOptions
- from rgbmatrix import graphics
- class Renderer(object):
- def __init__(self):
- o = RGBMatrixOptions()
- o.chain_length = 4
- self.matrix = RGBMatrix(options=o)
- self.canvas = self.matrix.CreateFrameCanvas()
- def swap(self):
- self.canvas = self.matrix.SwapOnVSync(self.canvas)
- self.canvas.Clear()
- def print_text(self, text):
- graphics.DrawText(self.canvas, fonts['10x20'], 0, 20, textColor, text)
- self.swap()
- def scroll_text(self, text, loop=1):
- pos = self.canvas.width
- i = 1
- while True:
- len = graphics.DrawText(self.canvas, fonts['10x20'], pos, 20, textColor, text)
- pos -= 1
- if (pos + len < 0):
- pos = self.canvas.width
- i += 1
- if i > loop:
- break
- time.sleep(0.02)
- self.swap()
- def fit_text(self, text, width=128):
- ff = reversed(sorted(fonts.items(), key=lambda e: int(e[0].split('x')[0])))
- temp_canvas = self.matrix.CreateFrameCanvas()
- for name, font in ff:
- w = graphics.DrawText(temp_canvas, font, 0, -100, textColor, text)
- if w < width:
- break
- else:
- print('str len %s exceeds space' % w)
- graphics.DrawText(self.canvas, font, 0, 20, textColor, text)
- self.swap()
- try:
- fonts = {}
- for f in Path('/matrix/fonts').files('*.bdf'):
- if not f.namebase.split('x')[0].isdigit() or not f.namebase[-1].isdigit():
- continue
- fo = graphics.Font()
- fo.LoadFont(f)
- fonts[f.namebase] = fo
- textColor = graphics.Color(96, 128, 255)
- r = Renderer()
- # Create a TCP/IP socket
- sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- # Bind the socket to the port
- server_address = ('0.0.0.0', 10000)
- print('starting up on %s port %s' % server_address)
- sock.bind(server_address)
- r.fit_text('Matrix ready.')
- r.fit_text('111')
- while True:
- print('waiting to receive message')
- data, address = sock.recvfrom(4096)
- print('received %s bytes from %s' % (len(data), address))
- method = ord(data[0])
- data = data[1:]
- if method == 0:
- r.print_text(data.decode('utf-8'))
- elif method == 1:
- r.scroll_text(data.decode('utf-8'))
- elif method == 2:
- r.fit_text(data.decode('utf-8'))
- except Exception:
- print(traceback.format_exc())
- finally:
- print('receiver exit')
|