示例#1
0
def fontDemo(sec=5, rot=False):
    tx = "FONTS"
    if rot:
        tx = "ROTATED " + tx
    header(tx, True)

    tx = "ESP32-MicrpPython"
    n = time.time() + sec
    while time.time() < n:
        frot = 0
        if rot:
            frot = math.floor(machine.random(359) / 5) * 5
        for font in fontnames:
            if (not rot) or (font != lcd.FONT_7seg):
                x = machine.random(maxx - 8)
                if font != lcd.FONT_7seg:
                    lcd.font(font, rotate=frot)
                    _, fsz = lcd.fontSize()
                    y = machine.random(miny, maxy - fsz)
                    lcd.text(x, y, tx, machine.random(0xFFFFFF))
                else:
                    l = machine.random(6, 12)
                    w = machine.random(1, l // 3)
                    lcd.font(font, rotate=frot, dist=l, width=w)
                    _, fsz = lcd.fontSize()
                    y = machine.random(miny, maxy - fsz)
                    lcd.text(x, y, "-12.45/", machine.random(0xFFFFFF))
        if buttonA.wasPressed():
            break
    lcd.resetwin()
示例#2
0
def mapView(lon=0, lat=0, zoom=0):
    m = MapData(lon, lat, zoom, 50)
    try:
        img = png(getMap(lon, lat, zoom, 50),
                  callback=lcd.drawPixel).render(0, 0)
        del img
    except MemoryError:
        lcd.text(0, 10, 'Not enough RAM', 0)
    gc.collect()
    sm = SelectionManagerV2(1, 7, selectionRenderer)
    while True:
        drawControls()
        s = sm.loop()
        callbacks = (m.scaleUp, m.scaleDown, m.moveLeft, m.moveRight, m.moveUp,
                     m.moveDown, mainMenu)
        if s != 6:
            callbacks[s]()
            del callbacks
            try:
                img = png(getMap(m.lon, m.lat, m.zoom, m.pitch),
                          callback=lcd.drawPixel).render(0, 0)
                del img
            except MemoryError:
                lcd.text(0, 10, 'Not enough RAM', 0)
            gc.collect()
        else:
            return mainMenu
示例#3
0
def header(tx, setclip):

    # adjust screen dimensions (depends on used display and orientation)

    global maxx, maxy, miny

    maxx, maxy = lcd.screensize()

    lcd.clear()

    if maxx < 240:

        lcd.font(lcd.FONT_Small, rotate=0)

    else:

        lcd.font(lcd.FONT_Default, rotate=0)

    _, miny = lcd.fontSize()

    miny += 5

    lcd.rect(0, 0, maxx - 1, miny - 1, lcd.OLIVE, lcd.DARKGREY)

    lcd.text(lcd.CENTER, 2, tx, lcd.CYAN, transparent=True)

    if setclip:

        lcd.setwin(0, miny, maxx, maxy)
示例#4
0
文件: views.py 项目: jschrbr/shelf
def get_partBtn():
    load_screen()
    parts = api.getParts()
    lcd.clear()
    for part in parts:
        if part['name'] == partName:
            partCount = part["quantity"]
            message = "{}-off {}".format(part['quantity'], part['name'])
            lcd.text(lcd.CENTER, lcd.CENTER, message)
    lcd.text(lcd.CENTER, lcd.BOTTOM, "Hold to refresh")
示例#5
0
文件: views.py 项目: jschrbr/shelf-io
def get_partBtn():
    load_screen()
    id = get_id()
    part = api.getPart(id)
    part = part['data']['getPart']
    lcd.clear()
    partCount = part['quantity']
    message = "{}x {}".format(part['quantity'], part['name'])
    lcd.text(lcd.CENTER, lcd.CENTER, message)
    lcd.text(lcd.CENTER, lcd.BOTTOM, "Hold to refresh")
    return part['id']
示例#6
0
 def over():
     Snake.timer.deinit()
     lcd.clear()
     lcd.text(lcd.CENTER, lcd.CENTER, "GAME OVER")
     lcd.text(lcd.CENTER, 10, "score: " + repr(len(Snake.tail)))
     while btnA.isPressed():
         pass
     while True:
         if btnA.isPressed():
             Snake.reset()
             Game.prepareField()
             return 0
示例#7
0
    def _draw_once(self):
        '''最初に一度だけ描画する処理'''
        # 枠を表示 (デバッグ用)
        #lcd.rect(0, 0, self.width + 1, self.height + 1, lcd.BLACK)

        # 温度計の液溜め部分(正式には「球部」)の円を描画
        lcd.circle(self.circle_x, self.circle_y, self.circle_radius,
                   self.color, self.color)

        # 目盛りの間隔 (摂氏度)
        tick = 10

        # 目盛りとグラフの隙間のピクセル数
        m = 2

        # 目盛りの長さ (ピクセル)
        l = 8

        # 目盛りと軸の数字の隙間のピクセル数
        m2 = 4

        # フォントの設定
        lcd.font(lcd.FONT_Default, color=self.axis_color, transparent=True)

        # TODO: ラベルを描画
        label_x = self.bar_x - m - l - m2 - lcd.textWidth(self.label)
        label_y = self.y
        lcd.text(label_x, label_y, self.label)

        # フォントの設定
        lcd.font(lcd.FONT_Default, color=self.axis_color, transparent=True)

        # フォントサイズ
        font_width, font_height = lcd.fontSize()
        half_font_height = int(round(font_height / 2))

        min_ylabel = int(math.ceil(self.min_value / 10)) * 10
        for i in range(min_ylabel, self.max_value + 1, tick):
            y1 = self._calc_y(i)

            # 目盛り (左)
            lcd.line(self.bar_x - m - l, y1, self.bar_x - m, y1,
                     self.axis_color)

            # 目盛り (右)
            lcd.line(self.bar_x + self.bar_width + m, y1,
                     self.bar_x + self.bar_width + m + l, y1, self.axis_color)

            # 目盛りラベル
            tick_label = '{}'.format(i)
            lcd.print(tick_label,
                      self.bar_x - m - l - m2 - lcd.textWidth(tick_label),
                      y1 - half_font_height, self.axis_color)
def renderChatMsg(usr, msg):
    global msgQueue
    if len(msgQueue) > 8:
        msgQueue.pop(0)
    lcd.clear()
    msgQueue.append(usr + ':' + msg)
    if tcfg['tickers']:
        for i in range(len(msgQueue)):
            ticker.text[i] = msgQueue[i]
    else:
        lcd.clear()
        lcd.text(0, 2, '\n'.join(msgQueue[-4:]))
示例#9
0
def draw(state):
    # draw time
    lcd.font(lcd.FONT_DejaVu40)
    m, s = divmod(state.time, 60)
    lcd.text(lcd.CENTER, 100, "{:02}:{:02}".format(m, s))
    # draw menu
    lcd.font(lcd.FONT_DejaVu24)
    if state.state == IDLE:
        lcd.print("inc", 50, lcd.BOTTOM)
        lcd.print("dec", 140, lcd.BOTTOM)
        lcd.print("start", 225, lcd.BOTTOM)
    elif state.state == RUNNING:
        lcd.print("     ", 50, lcd.BOTTOM)
        lcd.print("     ", 140, lcd.BOTTOM)
        lcd.print("stop ", 227, lcd.BOTTOM)
示例#10
0
def game_start():
	lcd.font(lcd.FONT_DejaVu18)
	GAME_RUNNING = True
	HEALTH = 10
	bird = [80,20,0,0,15] # y,x,vy,vx,r
	blns = [[80,-10,0,-1,15,lcd.BLUE],[40,-10,0.2,-0.5,10,lcd.GREEN]] # y,x,vy,vx,r,color
	GRAV = -1
	lastbtn = False
	while GAME_RUNNING:
		if HEALTH < 1: break
		if buttonA.isPressed() and not lastbtn: bird[2] += 15
		lastbtn = buttonA.isPressed()
		bird[2] += GRAV
		bird[2] *= 0.9
		bird[0] += bird[2]
		bird[0] = min(max(bird[4], bird[0]), 160-bird[4])
		lcd.clear()
		lcd.fillCircle(int(bird[0]), bird[1], bird[4], lcd.RED)
		lcd.fillCircle(int(bird[0])+6, bird[1]+2, 3, lcd.WHITE)
		lcd.fillCircle(int(bird[0])+6, bird[1]+10, 3, lcd.WHITE)
		lcd.fillCircle(int(bird[0])+6, bird[1]+2, 1, lcd.BLACK)
		lcd.fillCircle(int(bird[0])+6, bird[1]+10, 1, lcd.BLACK)
		lcd.fillTriangle(int(bird[0])-5, bird[1]+13, int(bird[0])-10, bird[1]+3, int(bird[0]), bird[1]+3, lcd.YELLOW)
		for b in blns:
			if b[1] < -b[4]:
				b[1] = 80+b[4]
				b[0] = randint(20,140)
				b[2] = (randint(0,10)-5)/5.0
				b[3] = -randint(5,10)/5.0
				b[4] = randint(5,15)
				b[5] = getrandbits(24)
			b[0] += b[2]
			b[1] += b[3]
			if((b[0]-bird[0])**2 + (b[1]-bird[1])**2 < (bird[4]+b[4])**2):
				HEALTH -= 1
				b[1] = -100
				tone([(440, 100)])
			lcd.line(int(b[0]),int(b[1]),int(b[0])-(4*b[4]),int(b[1]),lcd.WHITE)
			lcd.fillCircle(int(b[0]),int(b[1]),b[4],b[5])
		lcd.print(str(HEALTH)+" <3",140,0,lcd.WHITE,rotate=90)
		sleep_ms(30)
	
	lcd.setTextColor(lcd.WHITE)
	lcd.text(40,0,"GAME")
	lcd.text(20,0,"OVER")
	sleep_ms(700)
	tone(TONE_DENY)
	reset()
示例#11
0
def mainMenu():
    def worldMap():
        return mapView

    def leave():
        import sys
        sys.exit()

    lcd.clear(0x2b4860)
    lcd.fillRect(0, 0, 80, 12, 0xc6585a)
    lcd.font(lcd.FONT_Arial12)
    lcd.text(lcd.CENTER, 0, 'MAPS', 0xFFFFFF)
    lcd.font(lcd.FONT_Small)
    callbacks = (worldMap, search, findMe)
    s = SelectionManagerV2(0, 4, selectionRenderer).loop()
    return callbacks[s]
示例#12
0
 def render(self):
     if self.active:
         self.obs.render()
     else:
         lcd.setColor(0xffffff)
         lcd.text(20, 40, "Press")
         lcd.text(31, 55, "M5")
         lcd.text(22, 70, "Start")
         lcd.text(20, 85, "Game")
示例#13
0
def search():
    from accelKeyboard import Keyboard
    from geolocate import findPlace
    inputText = Keyboard().loop()
    coords = findPlace(inputText)
    del Keyboard
    del inputText
    del findPlace
    if coords:
        gc.collect()
        return mapView(coords[0], coords[1], 14 if coords[2] != 'city' else 8)
    else:
        lcd.clear()
        lcd.text(0, 20, 'Place not Found')
        lcd.text(lcd.CENTER, 100, 'ok')
        while not btnA.isPressed() or btnB.isPressed():
            while btnA.isPressed() or btnB.isPressed():
                pass
        return search
def trippleText(x, y, txt, clr):
    if tcfg['textBG'] is not False:
        lcd.textClear(x, y, txt, int(tcfg['textBG']))
    else:
        lcd.text(x, y + 1, txt, 0)
        lcd.text(x, y - 1, txt, 0)
    lcd.text(x, y, txt, clr)
def gamesMenu(itemOffset=0):
    ofy = 0
    data = twitchAPI('games/top', {'limit': 3, 'offset': itemOffset})
    games = []
    lcd.clear()
    lcd.drawLine(0, 0, 80, 0, 0x6441a5)
    for item in data['top']:
        lcd.fillRect(0, ofy, 80, 45, 0x333333)
        lcd.text(lcd.CENTER, ofy + 16, 'LOADING')
        loadAndDrawOnePreview(
            item['game']['box']['template'].replace('{width}', '80').replace(
                '{height}', '45'), 0, 1 + ofy)
        trippleText(2, ofy + 2, item['game']['name'], 0xffffff)
        games.append(item['game']['name'])
        trippleText(lcd.RIGHT, ofy + 32, str(item['viewers']), 0xFF0000)
        ofy += 46
    lcd.text(4, 144, 'more', 0xFFFFFF)
    lcd.text(44, 144, 'back', 0xFFFFFF)

    def gameCallback(sel):
        global gameFilter
        if sel < 3:
            if sel >= len(games):
                return mainMenu
            gameFilter = games[sel].replace(' ', '+')
        return [(streamsMenu, streamsMenu, streamsMenu, gamesMenu,
                 mainMenu)[sel], (itemOffset + sel if sel == 3 else 0)]

    return SelectionManager(3,
                            offsetY=1,
                            boxH=46,
                            callback=gameCallback,
                            menu=2).loop()
def streamsMenu(streamOffset=0):
    ofy = 0
    data = twitchAPI('streams', {
        'limit': 3,
        'offset': streamOffset,
        'game': gameFilter
    })
    channels = []
    lcd.clear()
    lcd.drawLine(0, 0, 80, 0, 0x6441a5)
    for item in data['streams']:
        lcd.fillRect(0, ofy, 80, 45, 0x333333)
        lcd.text(lcd.CENTER, ofy + 16, 'LOADING')
        loadAndDrawOnePreview(item['preview']['small'], 0, 1 + ofy)
        trippleText(2, ofy + 2, item['channel']['name'], 0xffffff)
        channels.append(item['channel']['name'])
        trippleText(lcd.RIGHT, ofy + 32, str(item['viewers']), 0xFF0000)
        ofy += 46
    del data
    lcd.text(4, 144, 'more', 0xFFFFFF)
    lcd.text(44, 144, 'back', 0xFFFFFF)

    def sc(n=0):
        return selectChannel(channels[n])

    def channelCallback(sel):
        return [(sc, sc, sc, streamsMenu, mainMenu)[sel],
                (streamOffset + sel if sel == 3 else sel)]

    return SelectionManager(3,
                            offsetY=1,
                            boxH=46,
                            callback=channelCallback,
                            menu=2).loop()
示例#17
0
    def resdisplay(apresults, n, time):
        lcd.rect(0, 0, 320, 24, lcd.BLUE, lcd.BLUE)
        lcd.font(lcd.FONT_Ubuntu, transparent=True)
        lcd.text(0, 2, 'N_AP:%d N_SCAN:%d TIME:%d' % (len(apresults), n, time),
                 lcd.WHITE)
        lcd.rect(0, 24, 320, 186, lcd.BLACK, lcd.BLACK)
        lcd.setCursor(0, 24)
        lcd.font(lcd.FONT_DefaultSmall)

        if len(apresults) < 15:
            i = 0
            for apresult in apresults:
                resstr = '%02d, ch: %02d, rs: %d, %s\n' % (
                    i + 1, apresult[2], apresult[3], apresult[0].decode())
                lcd.print(resstr, color=lcd.WHITE)
                i = i + 1
        else:
            for i in range(0, 15):
                apresult = apresults[i]
                resstr = '%02d, ch: %02d, rs: %d, %s\n' % (
                    i + 1, apresult[2], apresult[3], apresult[0].decode())
                lcd.print(resstr, color=lcd.WHITE)
def mainMenu(idk=0):
    global gameFilter
    gameFilter = ''
    lcd.font(lcd.FONT_Small)
    lcd.clear()
    drawHeader()
    lcd.text(lcd.CENTER, 20, 'Streams')
    lcd.text(lcd.CENTER, 40, 'Games')
    lcd.text(lcd.CENTER, 60, 'Users')
    lcd.text(lcd.CENTER, 80, 'Exit')

    def mainCallback(sel):
        return (streamsMenu, gamesMenu, searchMenu, leave)[sel]

    return SelectionManager(4, offsetY=18, callback=mainCallback).loop()
def selectChannel(name):
    global ticker
    import uwebsockets.client as uwc
    lcd.clear()
    lcd.text(lcd.CENTER, 40, 'joining')
    lcd.text(lcd.CENTER, 60, 'chat')
    lcd.font(lcd.FONT_UNICODE)
    if tcfg['tickers']:
        ticker = Ticker([''] * 9,
                        0xffffff,
                        rotation=0,
                        sliding=False,
                        speed=16,
                        delay=10,
                        x=2,
                        multiline=True)

    exitChat = False
    with uwc.connect('wss://irc-ws.chat.twitch.tv') as ws:
        ws.send('NICK justinfan123')
        #ws.send('CAP REQ :twitch.tv/tags')
        ws.send('JOIN  #' + name)
        msg = ws.recv()
        i = 0
        while msg.find('/NAMES') == -1:
            msg = ws.recv()
        msg = ws.recv()
        while not exitChat:
            if msg != '':
                #gc.collect()
                parseChatMsg(msg)
            msg = ws.recv()
            while btnB.isPressed():
                exitChat = True
        if tcfg['tickers']:
            ticker.stop()
            del ticker
    return mainMenu
示例#20
0
def dispFont(sec=5):
    header("DISPLAY FONTS", False)

    if maxx < 240:
        tx = "MicroPython"
    else:
        tx = "Hi from MicroPython"
    starty = miny + 4

    n = time.time() + sec
    while time.time() < n:
        y = starty
        x = 0
        i = 0
        while y < maxy:
            if i == 0:
                x = 0
            elif i == 1:
                x = lcd.CENTER
            elif i == 2:
                x = lcd.RIGHT
            i = i + 1
            if i > 2:
                i = 0

            for font in fontnames:
                if font == lcd.FONT_7seg:
                    lcd.font(font)
                    lcd.text(x, y, "-12.45/", machine.random(0xFFFFFF))
                else:
                    lcd.font(font)
                    lcd.text(x, y, tx, machine.random(0xFFFFFF))
                _, fsz = lcd.fontSize()
                y = y + 2 + fsz
                if y > (maxy - fsz):
                    y = maxy
        if buttonA.wasPressed():
            break
示例#21
0
 def drawNaviButton(self, strA='UP', strB='DOWN', strC='SELECT'):
     lcd.rect(0, self.H - self.h_bottom, self.W, self.h_bottom,
              lcd.DARKGREY, lcd.DARKGREY)
     lcd.line(int(self.W / 3), self.H - self.h_bottom, int(self.W / 3),
              self.H, lcd.WHITE)
     lcd.line(int(2 * self.W / 3), self.H - self.h_bottom,
              int(2 * self.W / 3), self.H, lcd.WHITE)
     lcd.text(40, 215, strA, lcd.WHITE)
     lcd.text(135, 215, strB, lcd.WHITE)
     lcd.text(240, 215, strC, lcd.WHITE)
示例#22
0
    def drawBusData():
        if not info:
            return

        lcd.clear(0xffffff)
        offsetY = 2
        offsetX = 35
        info['data']['transports'].sort(reverse=order, key= \
            lambda x: int(getBusTimeData(x['times'][0])['value']) if len(x['times']) > 0 else float('inf'))

        for i, t in enumerate(info['data']['transports']):
            lcd.fillRoundRect(2, offsetY, 30, 12, 2,
                              getVehicleColor(t['type']))
            lcd.text(6 + xCenter[len(t['name'])], offsetY, t['name'], 0xffffff)
            if len(t['times']) > 0:
                if mode == 0:
                    target = getBusTimeData(t['times'][0])
                    lcd.text(38, offsetY, target['text'], 0)
                else:
                    currentTime = info['data']['currentTime'] // 1000 + info[
                        'data']['tzOffset']
                    for k, v in enumerate(t['times']):
                        target = getBusTimeData(v)
                        arrivalTime = int(target['value']) + int(
                            target['tzOffset'])
                        waitTime = str(
                            getMinuteWaitTime(currentTime, arrivalTime))
                        lcd.fillRoundRect(1 + offsetX, offsetY, 20, 12, 2,
                                          getWaitTimeColor(int(waitTime)))
                        if len(waitTime) > 2:
                            waitTime = str(int(waitTime) // 60 + 1) + 'H'
                        lcd.text(offsetX + xCenter[len(waitTime)], offsetY,
                                 waitTime, 0xffffff)
                        offsetX += 22
                        if k == 1:
                            break
                    offsetX = 35
            offsetY += 13
            if i == 10:
                break
        displayTime()
示例#23
0
	def drawNaviButton(self, strA='START', strB='STOP', strC='EXIT'):
		lcd.text(40, 215, strA, lcd.WHITE)
		lcd.text(135, 215, strB, lcd.WHITE)
		lcd.text(240, 215, strC, lcd.WHITE)
示例#24
0
def drawControls():
    lcd.fillRect(0, 148, 80, 11, 0x2b4860)
    pos = array('b', (4, 14, 24, 34, 44, 48, 54, 58, 66, 68, 70))
    txt = '+-<>/\\\\/...'
    for i, char in enumerate(txt):
        lcd.text(pos[i], 148, char, 0xffffff)
示例#25
0
文件: boot.py 项目: jschrbr/shelf-io
from network import STA_IF, AP_IF, WLAN
from auth import connectWifi
from m5stack import lcd

lcd.hsb2rgb(0.5, 0.5, 0.5)

sys.path[1] = '/flash/lib'
wlan = WLAN(STA_IF)
ap = WLAN(AP_IF)

wlan.active(True)
ap.active(True)
cred = connectWifi()

wlan.connect(cred[0], cred[1])
lcd.text(lcd.CENTER, lcd.LASTY, "Connecting to {}".format(cred[0]))

elli = ""
tmo = 0
tm = 0
while not wlan.isconnected():
    if tmo == 300:
        lcd.clear()
        tm += 1
        elli += "."
        tmo = 0
        if tm == 4:
            tm = 0
            elli = ""
    lcd.text(lcd.CENTER, lcd.CENTER, elli)
示例#26
0
 def create_dead_ui(self):
     lcd.setColor(0xff0000)
     lcd.text(19, 30, "Dead!")
示例#27
0
 def create_init_ui(self):
     lcd.drawLine(0, 140, 80, 140)
     lcd.text(0, 6, "Dino Run")
示例#28
0
def mainMenuText():
    lcd.text(lcd.CENTER, 22, 'World Map')
    lcd.text(lcd.CENTER, 34, 'Search')
    lcd.text(lcd.CENTER, 46, 'Find me')
    lcd.text(lcd.CENTER, 58, 'Exit')
示例#29
0
 def render(self):
     lcd.setColor(0xffffff)
     lcd.text(0, 145, str(self.score))
     for com in self.components:
         com.render()
示例#30
0
 def displayTime():
     time = rtc.now()
     txt = '{:02d}:{:02d}:{:02d}'.format(*time[-3:])
     lcd.textClear(9, 148, txt, 0xFFFFFF)
     lcd.text(9, 148, txt, 0)