ESP32(MicroPython) TFT LCD多功能显示(更新)

您所在的位置:网站首页 st7735s驱动教程 ESP32(MicroPython) TFT LCD多功能显示(更新)

ESP32(MicroPython) TFT LCD多功能显示(更新)

2023-07-09 05:30| 来源: 网络整理| 查看: 265

由于没有了解LVGL实现动态显示字符的方法,本人另找驱动完成对RTC和BMP280气压温度传感器数据的显示。屏幕驱动(ili9341)链接:jeffmer/micropython-ili9341:用于 ILI9341 显示器的 Micropython 驱动程序 (github.com)

使用该驱动时,需要在m5stack.py上修改引脚配置。驱动功能包括清空显示内容、显示文字和设定显示位置,有4种大小的字体(本程序使用最大的字体)。

更新:增加使用DS1302的版本。由于在电脑启动时会自动校准RTC,判断RTC时间没有重置时同步校准DS1302;如果程序上电启动,RTC会因断电重置,此时用DS1302校准RTC。RTC虽然精度更高,但由于程序延迟,用RTC校准DS1302会导致时间明显变慢,因此取消这一项功能。

原版

from ili934xnew import ILI9341, color565 from machine import Pin, SPI import m5stack import tt14 import glcdfont import tt14 import tt24 import tt32 from machine import RTC import time from machine import SoftI2C import bmp280 from machine import Timer from machine import PWM #定义RTC控制对象 rtc=RTC() #定义星期 week=("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday") #初始化BMP280,定义第二个I2C接口i2c2用于连接BMP280 i2c2 = SoftI2C(sda=Pin(22), scl=Pin(21)) BMP = bmp280.BMP280(i2c2) power = Pin(m5stack.TFT_LED_PIN, Pin.OUT) power.value(1) spi = SPI( 2, baudrate=80000000, miso=Pin(m5stack.TFT_MISO_PIN), mosi=Pin(m5stack.TFT_MOSI_PIN), sck=Pin(m5stack.TFT_CLK_PIN)) display = ILI9341( spi, cs=Pin(m5stack.TFT_CS_PIN), dc=Pin(m5stack.TFT_DC_PIN), rst=Pin(m5stack.TFT_RST_PIN), w=320, h=240, r=3) led=PWM(Pin(2),freq=4000,duty=20) duty=0 flag=0 #定时器0中断函数 def time0_irq(time0): global duty global flag if duty==20 : flag=0 if duty==1020 : flag=1 if flag==0 : duty+=1 led.duty(duty) if flag==1 : duty-=1 led.duty(duty) time0=Timer(0) #创建time0定时器对象 time0.init(period=1,mode=Timer.PERIODIC,callback=time0_irq) fonts = [tt32] display.erase() while True: display.set_pos(20,20) for ff in fonts: date_time=rtc.datetime() text = str(date_time[0])+'-'+str(date_time[1])+'-'+str(date_time[2])+' '+str(week[date_time[3]])+'\n'+'---< '+str(date_time[4])+' : '+str(date_time[5])+' : '+str(date_time[6])+' >---'+'\n\n'+'Temperature: '+str(BMP.getTemp()) + ' C'+'\n'+'Pressure: '+str(BMP.getPress()) + ' Pa'+'\n'+'Altitude: '+str(BMP.getAltitude()) + ' m' display.set_font(ff) display.print(text) time.sleep(0.9) display.erase()

DS1302版

from ili934xnew import ILI9341, color565 from machine import Pin, SPI import m5stack import tt14 import glcdfont import tt14 import tt24 import tt32 from machine import RTC import time from machine import SoftI2C import bmp280 from machine import Timer from machine import PWM import DS1302 #定义RTC控制对象 rtc=RTC() #定义DS1302控制对象 ds1302=DS1302.DS1302(clk=Pin(13),dio=Pin(12),cs=Pin(15)) #定义星期 week=("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday") #初始化BMP280,定义第二个I2C接口i2c2用于连接BMP280 i2c2 = SoftI2C(sda=Pin(22), scl=Pin(21)) BMP = bmp280.BMP280(i2c2) power = Pin(m5stack.TFT_LED_PIN, Pin.OUT) power.value(1) spi = SPI( 2, baudrate=80000000, miso=Pin(m5stack.TFT_MISO_PIN), mosi=Pin(m5stack.TFT_MOSI_PIN), sck=Pin(m5stack.TFT_CLK_PIN)) display = ILI9341( spi, cs=Pin(m5stack.TFT_CS_PIN), dc=Pin(m5stack.TFT_DC_PIN), rst=Pin(m5stack.TFT_RST_PIN), w=320, h=240, r=3) led=PWM(Pin(2),freq=4000,duty=20) duty=0 flag=0 #定时器0中断函数 def time0_irq(time0): global duty global flag if duty==20 : flag=0 if duty==1020 : flag=1 if flag==0 : duty+=1 led.duty(duty) if flag==1 : duty-=1 led.duty(duty) time0=Timer(0) #创建time0定时器对象 time0.init(period=1,mode=Timer.PERIODIC,callback=time0_irq) rtc_time=rtc.datetime() ds_time=ds1302.DateTime() if rtc_time[0]==ds_time[0] : #在电脑启动时会自动校准RTC,判断RTC时间没有重置时同步校准DS1302 ds1302.DateTime([rtc_time[0],rtc_time[1],rtc_time[2],rtc_time[3],rtc_time[4],rtc_time[5],rtc_time[6]]) if rtc_time[0]!=ds_time[0] : #如果程序上电启动,RTC会因断电重置,此时用DS1302校准RTC rtc.datetime((ds_time[0],ds_time[1],ds_time[2],ds_time[3],ds_time[4],ds_time[5],ds_time[6],0)) fonts = [tt32] display.erase() while True: display.set_pos(20,20) for ff in fonts: rtc_time=rtc.datetime() ds_time=ds1302.DateTime() text = str(rtc_time[0])+'-'+str(rtc_time[1])+'-'+str(rtc_time[2])+' '+str(week[rtc_time[3]])+'\n'+'---< '+str(rtc_time[4])+' : '+str(rtc_time[5])+' : '+str(rtc_time[6])+' >---'+'\n\n'+'Temperature: '+str(BMP.getTemp()) + ' C'+'\n'+'Pressure: '+str(BMP.getPress()) + ' Pa'+'\n'+'Altitude: '+str(BMP.getAltitude()) + ' m' display.set_font(ff) display.print(text) time.sleep(0.9) display.erase()



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3