Beispiel #1
0
 def __init__(self, config):
     self.epd = EPD()
     self.epd.init()
     self.font = config['font']
     self.route = config['route']
     self.stop = config['stop']
     self.curlbus = config['curlbus']
Beispiel #2
0
class App(object):
    def __init__(self, config):
        self.epd = EPD()
        self.epd.init()
        self.font = config['font']
        self.route = config['route']
        self.stop = config['stop']
        self.curlbus = config['curlbus']

    def draw(self, eta, last_updated):
        self.epd.init()
        image = Image.new('1', (self.epd.height, self.epd.width), 255)
        draw = ImageDraw.Draw(image)

        # Draw the line number on the top conrner
        font = ImageFont.truetype(self.font, 30)
        draw.text((5, 2), self.route, font=font, fill=0)
        draw.rectangle([(0, 0), (60, 40)])

        # Draw the ETA
        font = ImageFont.truetype(self.font, 60)
        draw.text((self.epd.height / 2 - 50, self.epd.width / 2 - 50),
                  eta,
                  font=font,
                  fill=0)

        # Draw the last_updated timestamp
        font = ImageFont.truetype(self.font, 16)
        draw.text((0, self.epd.width - 20), last_updated, font=font, fill=0)
        self.epd.smart_update(image.rotate(90, expand=True))
        self.epd.sleep()

    def update(self):
        response = requests.get("{0}/{1}".format(self.curlbus, self.stop),
                                headers=HEADERS)
        response_data = response.json()
        last_updated = response_data['timestamp']
        next_eta = "Nothing :("
        etas = []
        for visit in response_data['visits'][self.stop]:
            if visit['line_name'] == self.route:
                etas.append(parse(visit['eta']))
        if len(etas) > 0:
            closest_eta = sorted(etas)[0]
            next_eta = round(
                (closest_eta -
                 datetime.now(dateutil.tz.tzlocal())).total_seconds() / 60)
            if next_eta <= 0:
                next_eta = 'Now'
            else:
                next_eta = '{0}m'.format(next_eta)
        self.draw(next_eta, last_updated)

    def run(self):
        while True:
            self.update()
            time.sleep(60)
Beispiel #3
0
def main():
    print("initializing", end="")
    sys.stdout.flush()
    epd = EPD()
    epd.init()
    print(".", end="")
    sys.stdout.flush()

    image = Image.new('1', (epd.width, epd.height), 255)
    draw = ImageDraw.Draw(image)

    font = ImageFont.truetype(
        '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', 20)
    draw.text((0, 5), 'Partial refresh', font=font, fill=0)

    font = ImageFont.truetype(
        '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', 18)
    draw.line([0, 28, epd.width, 28], fill=0, width=3)
    epd.display_frame(image)
    print(".")
    loc = 30

    draw.text((0, loc), "Look!", font=font, fill=0)
    epd.smart_update(image)
    loc += 20
    print(".", end="")
    sys.stdout.flush()

    draw.text((0, loc), "No need to refresh", font=font, fill=0)
    draw.text((0, loc + 20), "the entire screen.", font=font, fill=0)
    epd.smart_update(image)
    loc += 45
    print(".", end="")
    sys.stdout.flush()

    draw.text((0, loc), "It's fast", font=font, fill=0)
    draw.text((0, loc + 20), "and convenient", font=font, fill=0)
    epd.smart_update(image)
    loc += 20
    print(".", end="")
    sys.stdout.flush()

    epd.sleep()
    print("!")
Beispiel #4
0

# def loop1():
#         while True:
#                 tottime( tottimevar )
#                 time.sleep(60)

# def loop2():
#         while True:
#                 tottimevar += 1
#                 print (tottimevar)
#                 time.sleep(1)

print("Init", end="")
sys.stdout.flush()
epd = EPD()
# epd = EPD(fast_refresh=True)
epd.init()
sys.stdout.flush()

fontsml = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf',
                             18)
fontmed = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf',
                             20)
fontlrg = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf',
                             30)

image = Image.new('1', (epd.width, epd.height), 255)
draw = ImageDraw.Draw(image)

draw.text((0, 0), 'TechTesters GPS', font=fontmed, fill=0)
def main():
    print("initializing...")
    epd = EPD()
    epd.init()

    image = Image.new('1', (epd.width, epd.height), 255)
    draw = ImageDraw.Draw(image)

    font = ImageFont.truetype(
        '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', 18)
    draw.text((0, 5), 'Interactive demo', font=font, fill=0)

    font = ImageFont.truetype(
        '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', 16)
    epd.display_frame(image)
    loc = 25
    full_update = False
    print("Ready.")
    try:
        while True:
            text = input("> ")
            if loc > epd.height - 10:
                loc = 0
                image = Image.new('1', (epd.width, epd.height), 255)
                draw = ImageDraw.Draw(image)
                full_update = True

            draw.text((5, loc), text, font=font, fill=0)
            if full_update:
                print("Doing a full update...")
                epd.display_frame(image)
                full_update = False
            else:
                print("...")
                epd.display_partial_frame(image,
                                          0,
                                          loc,
                                          20,
                                          epd.width,
                                          fast=True)

            loc += 20
    except KeyboardInterrupt:
        epd.sleep()
        print("Bye!")
        raise
Beispiel #6
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont
import sys, os
import time
from rpi_epd2in7.epd import EPD

epd = EPD()
epd.init()
height, width = epd.width, epd.height


def newFrame():
    return Image.new("1", (width, height), 255)


def drawFrame(frame, full_refresh):
    if full_refresh:
        epd.display_frame(frame.transpose(Image.ROTATE_90))
    else:
        epd.smart_update(frame.transpose(Image.ROTATE_90))
    # ### for debugging
    # from matplotlib.pyplot import imshow
    # import numpy as np
    # imshow(np.asarray(frame))


def lineHeight(number):
    return 5 + number * width / 6.0