Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。

Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台

Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。

Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。

Micropython ESP频道

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


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

由于没有了解LVGL实现动态显示字符的方法,本人另找驱动完成对RTC和BMP280气压温度传感器数据的显示。屏幕驱动(ili9341)链接:https://github.com/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()


————————————————

版权声明:本文为CSDN博主「路易斯720」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_74155302/article/details/131278589



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 ESP56.com All Rights Reserved

执行时间: 0.0090270042419434 seconds