def TFT_setup(self, spi, dc, reset, cs): # setup TFT tft = TFT(spi=spi, aDC=dc, aReset=reset, aCS=cs) tft.initr() tft.rgb(True) tft.rotation(3) tft.fill(tft.BLACK) tft.text((0, 0), ESPCAM_VERSION, tft.WHITE, terminalfont) return tft
class GameEngine: def __init__(self, screensize): spi = SPI(1, baudrate=20000000, polarity=0, phase=0, sck=Pin(SPI_SCK), mosi=Pin(SPI_SDO), miso=None) # def __init__( self, spi, aDC, aReset, aCS) : # Pin details for SPI interface for screen self.tft = TFT(spi, SPI_DC, SPI_RS, SPI_CS) self.tft.initg() # Change this to make screen dimensions match board i.e if you get a line around the edge driver needs rewwwok for this self.tft.rgb(True) self.tft.set_size(screensize) self.set_caption("Tetris") self.level = 2 self.screenSize = screensize # Board offsets self.x = 4 self.y = 10 # Pin details for buttons. self.right_button = button(19) self.left_button = button(14) def set_caption(self, caption): self.tft.fill(TFT.BLACK) v = 30 v += sysfont["Height"] * 2 self.tft.text((20, v), caption, TFT.GREEN, sysfont, 2, nowrap=True) time.sleep_ms(1000) def render_text(self, aText, aColour, vPos, fSize): self.tft.text((8, vPos), aText, aColour, sysfont, fSize, nowrap=True) # Draw a grid by drawing hollow rectangles starting a smallest coordinate''' # Then fill the hollow retangles with colours of fallen frozen blocks ''' # For the filled rectangle. aStart is the smallest coordinate corner # and aSize is a tuple indicating width, heightalready rededuced for the ineer block def draw_board(self, myTetris): gridLineColour = TFT.RED # print (' blockOuter: {0} blockInner: {1} TWidth: {2} THeight: {3}'.format( blockOuter, blockInner, myTetris.width, myTetris.height)) for i in range(0, myTetris.width): for j in range(0, myTetris.height): # Render grid self.tft.rect((self.x + 12 * i , self.y + 7*j ), (120//10+1, 155//20+1), gridLineColour) def render_all(self,myTetris): for i in range(0, myTetris.width): for j in range(0, myTetris.height): self.tft.fillrect((self.x + 12 * i +1 , self.y + 7 * j + 1), (11,5) , (myTetris.field[j][i])) #print('\n'.join(' '.join(map(str,sl)) for sl in myTetris.field)) def render_frozen(self,myTetris): for i in range(0, myTetris.width): for j in range(0, myTetris.height): if myTetris.field[j][i] > 0: #(120//10-2, 155//20-2) self.tft.fillrect((self.x + 12 * i , self.y + 7 * j), (12,7) , (myTetris.field[j][i])) def hide_figure(self,figure): for i in range(4): for j in range(4): p = i * 4 + j if p in figure.orientation(): blockColor = TFT.BLACK fx = figure.x fy = figure.y self.tft.fillrect( (self.x + 12 * (j + fx) + 1, self.y + 7 * (fy + i) + 1), (120//10-2, 155//20-1), blockColor) # Render the floating blocks def render_figure(self, figure): if figure is not None: # print("fig or last:" + str(figure.orientation_last())) for i in range(4): for j in range(4): p = i * 4 + j if p in figure.orientation_last(): blockColor = TFT.BLACK fx = figure.x_org fy = figure.y_org self.tft.fillrect( (self.x + 12 * (j + fx) +1 , self.y + 7 * (fy + i) +1 ), (11,5) , blockColor) for i in range(4): for j in range(4): p = i * 4 + j if p in figure.orientation(): blockColor = figure.color fx = figure.x fy = figure.y self.tft.fillrect( (self.x + 12 * (j + fx) +1, self.y + 7 * (fy + i)+1), (11,5) , blockColor) def game_end(self): self.tft.fill(TFT.BLACK) self.render_text("Game Over", TFT.ORANGE, 50, 2) self.render_text("PRESS ANY KEY", TFT.ORANGE, 90, 1) def game_score(self, ascore): self.render_text("Tetris Score: " + str(ascore), TFT.ORANGE, 1, 1) def game_quit(self): self.tft.fill(TFT.BLACK) self.render_text("Game END", TFT.ORANGE, 50, 2) return
pycom.heartbeat(False) pycom.rgbled(0xff00) # turn on the RGB LED in green colour rep = 3 print("Startup Time") os.uname() #SPI using standard pins spi = SPI(SPI.MASTER, baudrate=40000000, polarity=0, phase=0) #arg1 = DC, arg2 = RES, arg3=CS tft = TFT(spi, 'P4', 'P1', 'P3') #tft=TFT(spi,16,17,18) tft.initr() tft.rgb(True) tft.fill(TFT.BLACK) v = 0 fft_print = "Startup" tft.text((0, v), fft_print, TFT.WHITE, sysfont, 1) time.sleep_ms(5000) tft.fill(TFT.BLACK) print("Go") #==================================================================================================== # Setup #==================================================================================================== bluetooth = Bluetooth() bluetooth.deinit()
import os os.listdir() from ST7735 import TFT from sysfont import sysfont from machine import SPI,Pin import time import math spi = SPI(2, baudrate=20000000, polarity=0, phase=0, sck=Pin(14), mosi=Pin(13), miso=Pin(12)) tft=TFT(spi,16,17,18) tft.initr() tft.rgb(True) tft.fill(TFT.BLACK); v = 0 tft.text((0, v), "Hello World! abcdefghijkl", TFT.RED, sysfont, 2, nowrap=False)
class main(): x_min = 15 x_max = 120 y_top = 50 y_bottom = 120 temp = [] pres = [] water = [] humi = [] date = [] ntp_url = 'ntp4.aliyun.com' dat_url = 'put your own address here' last_time_update = None def __init__(self, wlan, SSID, PASSWD): #init wlan self.wlan = wlan self.SSID = SSID self.PASSWD = PASSWD #init time print('ntp_url:', self.ntp_url) ntptime.host = self.ntp_url print('ntp_host:', ntptime.host) ntptime.time() ntptime.settime() self.last_time_update = time.time() print('init_time:', time.localtime(self.last_time_update + 3600 * 8)) #init data print('dat_url:', self.dat_url) #init display mod ''' mode: 0:cycle 1:temp only 2:pres only 3:water only 4:humi only ''' self.mode = 0 ''' last: 0:temp 1:pres 2:water 3:humi ''' self.last = 0 #init tft print('init TFT...') spi = SPI(1, baudrate=32000000, polarity=0, phase=0) self.tft = TFT(spi, 2, 16, 0) self.tft.init_7735(self.tft.GREENTAB128x128) self.tft.fill(TFT.WHITE) self.tft.text((5, 10), "initlizing", TFT.YELLOW, 2, nowrap=True) self.tft.text((5, 50), "please wait", TFT.YELLOW, 2, nowrap=True) self.run() def run(self): while True: self.display_time() self.get_dat() self.display_data() time.sleep(5) def get_time(self): time_now = time.time() if time_now - self.last_time_update >= 3600: ntptime.time() ntptime.settime() time_now = time.time() self.last_time_update = time_now return time.localtime(time_now + 3600 * 8) def display_time(self): time_now = self.get_time() print("p time", time_now) self.tft.fill(TFT.BLACK) self.tft.text( (5, 5), str(time_now[0]) + ' ' + str(time_now[1]) + ' ' + str(time_now[2]), TFT.GRAY, 1.8, nowrap=True) self.tft.text( (35, 20), str(time_now[3]) + ':' + str(time_now[4]) + ':' + str(time_now[5]), TFT.GRAY, 1.8, nowrap=True) def get_dat(self): req = requests.get(self.dat_url) data = req.json() if len(self.date) > 0 and self.date[len(self.date) - 1] == data['date']: return if len(self.temp) >= 10: self.temp.pop(0) self.water.pop(0) self.humi.pop(0) self.pres.pop(0) self.date.pop(0) self.temp.append(data['tmp2']) self.water.append(data['tmp0']) self.humi.append(data['humi']) self.pres.append(data['pres']) self.date.append(data['date']) return def display_data(self): def draw_axis(self): self.tft.line((self.x_min, self.y_top), (self.x_min, self.y_bottom), TFT.WHITE) self.tft.line((self.x_min, self.y_bottom), (self.x_max, self.y_bottom), TFT.WHITE) self.tft.line((self.x_min, self.y_top), (self.x_min - 5, self.y_top + 5), TFT.WHITE) self.tft.line((self.x_min, self.y_top), (self.x_min + 5, self.y_top + 5), TFT.WHITE) self.tft.line((self.x_max, self.y_bottom), (self.x_max - 5, self.y_bottom + 5), TFT.WHITE) self.tft.line((self.x_max, self.y_bottom), (self.x_max - 5, self.y_bottom - 5), TFT.WHITE) self.tft.text((self.x_min, self.y_top - 10), "y", TFT.WHITE, 1, nowrap=True) self.tft.text((self.x_max, self.y_bottom - 10), "x", TFT.WHITE, 1, nowrap=True) for i in range(self.x_min, self.x_max, floor((self.x_max - self.x_min) / 10)): self.tft.line((i, self.y_bottom - 2), (i, self.y_bottom + 3), TFT.WHITE) def draw_points(self, data): self.y_top = self.y_top + 10 x_dis = floor((self.x_max - self.x_min) / 10) x_now = self.x_min dat_min = 100000 dat_max = -100000 for i in data: if i < dat_min: dat_min = i if i > dat_max: dat_max = i if dat_min > dat_max: return points = [] which = 0 if dat_min == dat_max: for i in data: points.append((floor(x_now), floor(self.y_bottom + (self.y_top - self.y_bottom) / 2))) self.tft.circle(points[which], 2, TFT.YELLOW) self.tft.text((points[which][0] - 5, points[which][1] + 5), str(i), TFT.CYAN, 0.5, nowrap=True) self.tft.text( (points[which][0] - 5, points[which][1] - 10), self.date[which][11:16], TFT.CYAN, 0.6, nowrap=True) if which > 0: self.tft.line(points[which - 1], points[which], TFT.YELLOW) which = which + 1 x_now = x_now + x_dis else: for i in data: points.append( (floor(x_now), floor(self.y_bottom + (self.y_top - self.y_bottom) * ((i - dat_min) / (dat_max - dat_min))))) self.tft.circle(points[which], 2, TFT.YELLOW) self.tft.text((points[which][0] - 5, points[which][1] + 5), str(i), TFT.CYAN, 0.5, nowrap=True) self.tft.text( (points[which][0] - 5, points[which][1] - 10), self.date[which][11:16], TFT.CYAN, 0.6, nowrap=True) if which > 0: self.tft.line(points[which - 1], points[which], TFT.YELLOW) which = which + 1 x_now = x_now + x_dis self.y_top = self.y_top - 10 draw_axis(self) if self.mode == 0: if self.last == 0: self.last = 1 self.tft.text((50, 45), "pres", TFT.YELLOW, 1, nowrap=True) draw_points(self, self.pres) elif self.last == 1: self.last = 2 self.tft.text((50, 45), "water", TFT.YELLOW, 1, nowrap=True) draw_points(self, self.water) elif self.last == 2: self.last = 3 self.tft.text((50, 45), "humi", TFT.YELLOW, 1, nowrap=True) draw_points(self, self.humi) elif self.last == 3: self.last = 0 self.tft.text((50, 45), "temp", TFT.YELLOW, 1, nowrap=True) draw_points(self, self.temp) elif self.mode == 1: self.last = 0 self.tft.text((50, 45), "temp", TFT.YELLOW, 1, nowrap=True) draw_points(self, self.temp) elif self.mode == 2: self.last = 1 self.tft.text((50, 45), "pres", TFT.YELLOW, 1, nowrap=True) draw_points(self, self.pres) elif self.mode == 3: self.last = 2 self.tft.text((50, 45), "water", TFT.YELLOW, 1, nowrap=True) draw_points(self, self.water) elif self.mode == 4: self.last = 3 self.tft.text((50, 45), "humi", TFT.YELLOW, 1, nowrap=True) draw_points(self, self.humi)
baudrate=27000000, polarity=0, phase=0, bits=8, firstbit=machine.SPI.MSB, sck=machine.Pin(13), mosi=machine.Pin(15) ) # Set baudrate way high but will be clamped to a maximum in SPI constructor tft = TFT(spi, 23, 18, 5) tft.initr() # Initialize LCD screen tft.invertcolor( True ) # This is required for RGB to be parsed correctly (for some reason, 0x00 and 0xFF are flipped on normal mode) tft.rgb(True) tft.rotation(3) # Rotate to landscape mode tft.fill( ) # We use black background since text chars would be encapsulated by black background, not transparent tft.text((20, 40), 'deLIGHT', TFT.YELLOW, sysfont, 3, nowrap=True) tft.text((20, 70), 'Wi-Fi', TFT.CYAN, sysfont, 2, nowrap=True) def station(): # Enable station interface sta = network.WLAN(network.STA_IF) sta.active(True) # Main station loop while True: scan_result = sta.scan() for i in scan_result: if i[0] == bytes(sta_ssid, 'utf-8'):
class RINGO(object): def __init__(self): self.font1 = { "Width": 6, "Height": 8, "Start": 32, "End": 127, "Data": bytearray([ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5F, 0x06, 0x00, 0x00, 0x07, 0x03, 0x00, 0x07, 0x03, 0x00, 0x24, 0x7E, 0x24, 0x7E, 0x24, 0x00, 0x24, 0x2B, 0x6A, 0x12, 0x00, 0x00, 0x63, 0x13, 0x08, 0x64, 0x63, 0x00, 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x41, 0x00, 0x00, 0x00, 0x00, 0x41, 0x3E, 0x00, 0x00, 0x00, 0x08, 0x3E, 0x1C, 0x3E, 0x08, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00, 0xE0, 0x60, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, 0x62, 0x51, 0x49, 0x49, 0x46, 0x00, 0x22, 0x49, 0x49, 0x49, 0x36, 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, 0x2F, 0x49, 0x49, 0x49, 0x31, 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x00, 0x01, 0x71, 0x09, 0x05, 0x03, 0x00, 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0xEC, 0x6C, 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, 0x3E, 0x41, 0x5D, 0x55, 0x1E, 0x00, 0x7E, 0x11, 0x11, 0x11, 0x7E, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A, 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x30, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x7F, 0x02, 0x04, 0x02, 0x7F, 0x00, 0x7F, 0x02, 0x04, 0x08, 0x7F, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x7F, 0x09, 0x09, 0x19, 0x66, 0x00, 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x3F, 0x40, 0x3C, 0x40, 0x3F, 0x00, 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, 0x07, 0x08, 0x70, 0x08, 0x07, 0x00, 0x71, 0x49, 0x45, 0x43, 0x00, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x20, 0x54, 0x54, 0x54, 0x78, 0x00, 0x7F, 0x44, 0x44, 0x44, 0x38, 0x00, 0x38, 0x44, 0x44, 0x44, 0x28, 0x00, 0x38, 0x44, 0x44, 0x44, 0x7F, 0x00, 0x38, 0x54, 0x54, 0x54, 0x08, 0x00, 0x08, 0x7E, 0x09, 0x09, 0x00, 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, 0x00, 0x7F, 0x04, 0x04, 0x78, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x40, 0x00, 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x40, 0x00, 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, 0x00, 0x7C, 0x04, 0x04, 0x78, 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0xFC, 0x44, 0x44, 0x44, 0x38, 0x00, 0x38, 0x44, 0x44, 0x44, 0xFC, 0x00, 0x44, 0x78, 0x44, 0x04, 0x08, 0x00, 0x08, 0x54, 0x54, 0x54, 0x20, 0x00, 0x04, 0x3E, 0x44, 0x24, 0x00, 0x00, 0x3C, 0x40, 0x20, 0x7C, 0x00, 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x3C, 0x60, 0x30, 0x60, 0x3C, 0x00, 0x6C, 0x10, 0x10, 0x6C, 0x00, 0x00, 0x9C, 0xA0, 0x60, 0x3C, 0x00, 0x00, 0x64, 0x54, 0x54, 0x4C, 0x00, 0x00, 0x08, 0x3E, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x3E, 0x08, 0x00, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x3C, 0x26, 0x23, 0x26, 0x3C ]) } #updated pins/buttons self.BTN_1 = 0 self.BTN_2 = 1 self.BTN_3 = 2 self.BTN_4 = 3 self.BTN_5 = 4 self.BTN_6 = 5 self.BTN_7 = 6 self.BTN_8 = 7 self.BTN_9 = 8 self.BTN_ASTERISK = 9 self.BTN_0 = 10 self.BTN_HASHTAG = 11 self.BTN_FUN_RIGHT = 12 self.BTN_FUN_LEFT = 15 self.BTN_A = 16 self.BTN_B = 17 #obsolete buttons, successor - readJoystickX/Y() # self.BTN_UP = 18 # self.BTN_DOWN = 19 # self.BTN_LEFT = 20 # self.BTN_RIGHT = 21 self._BL_PIN = 21 self._PIXELS_PIN = 12 self._SIM_PIXELS_ENABLE_PIN = 26 self._NUM_PIXELS = 8 self.i2c = I2C(scl=Pin(27), sda=Pin(14), freq=100000) #ok self.buttons = buttons() #self.buttons = PCA9539(self.i2c, 0x21) #21 for main buttons, 20 for numerical keypad self.spi = SPI(2, baudrate=20000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23), miso=Pin(19)) #ok self.display = TFT(self.spi, 0, 2, 4) #ok self.display.initr() self.display.rgb(True) self.display.rotation(1) #rotation changed to 1 (top left) self.display.fill(0) self.pixels = NeoPixel(Pin(self._PIXELS_PIN, Pin.OUT), self._NUM_PIXELS, timing=True) self.BLACK = 0 self.RED = self.display.RED self.MAROON = self.display.MAROON self.GREEN = self.display.GREEN self.FOREST = self.display.FOREST self.BLUE = self.display.BLUE self.NAVY = self.display.NAVY self.CYAN = self.display.CYAN self.YELLOW = self.display.YELLOW self.PURPLE = self.display.PURPLE self.WHITE = self.display.WHITE self.GRAY = self.display.GRAY Pin(self._BL_PIN, Pin.OUT).value(0) def collideRectRect(self, x1, y1, w1, h1, x2, y2, w2, h2): return (x2 < x1 + w1 and x2 + w2 > x1 and y2 < y1 + h1 and y2 + h2 > y1) def backlight(self, bl): PWM(Pin(self._BL_PIN)).duty(bl) return def cls(self): print("\x1B\x5B2J", end="") print("\x1B\x5BH", end="") return