用树莓派RP2040的嵌入式系统学习平台制作一个图形化显示、超温报警的温度计
在LCD屏上显示一个图形化的温度计,并实时显示当前的温度(通过RP2040内部的温度传感器测量)
标签
嵌入式系统
接口
2022寒假在家练
MMA
更新2022-03-03
1013

1 项目需求

 

  • 在LCD屏上显示一个图形化的温度计,并实时显示当前的温度(通过RP2040内部的温度传感器测量)
  • 可以通过摇杆或按键设定报警温度阈值(如上图下面的部分,需要补充上数字)
  • 可以对芯片稍微加温,使温度超过设定的阈值,温度图示颜色变红,且蜂鸣器发出报警声音
  • 给芯片降温到阈值一下,温度传感器颜色变绿,蜂鸣器停止报警

2 完成的功能及达到的性能

达到了项目的要求,可以显示当前芯片的温度。对温度进行了取平均值处理。输出更稳定。可以通过遥杆和按键设定温度报警值。可以超温报警。可以在屏幕显示。

FjDlksMjHg5ugJuaGZPGAcBd1D8s

3 实现思路

板载芯片含有温度计可测温。绘图采用ST7789驱动。按键触发定时器设定温度。项目流程图如下:

Fny2iCQvuraUPKdmfZBs5lRT2HUV

4 实现过程

采用ST7789驱动。

import machine
import st7789 as st7789
from fonts import vga2_8x8 as font1
from fonts import vga1_16x32 as font2
import utime

增加绘图函数。

def draw_circle(xpos0, ypos0, rad,
                col=st7789.GREEN):
        x = rad - 1
        y = 0
        dx = 1
        dy = 1
        err = dx - (rad << 1)
        while x >= y:
            display.pixel(xpos0 + x, ypos0 + y, col)
            display.pixel(xpos0 + y, ypos0 + x, col)
            display.pixel(xpos0 - y, ypos0 + x, col)
            display.pixel(xpos0 - x, ypos0 + y, col)
            display.pixel(xpos0 - x, ypos0 - y, col)
            display.pixel(xpos0 - y, ypos0 - x, col)
            display.pixel(xpos0 + y, ypos0 - x, col)
            display.pixel(xpos0 + x, ypos0 - y, col)
            if err <= 0:
                y += 1
                err += dy
                dy += 2
            if err > 0:
                x -= 1
                dx += 2
                err += dx - (rad << 1)
                

测量温度,取平均值。

def get_T():
    sensor_temp = machine.ADC(4)
    conversion_factor = 3.3 / (65535)
    reading = sensor_temp.read_u16() * conversion_factor
    temperature = 27 - (reading - 0.706)/0.001721
    return temperature

def ave_T():
    my_list=[]
    for x in range(1,51):
        a=get_T()
        my_list.append(a)
        
    ave=sum(my_list)/50    
    return ave

绘制按钮移动效果。

if up_limit>tem_limit:      
        display.fill_rect(85+up_limit, 220, 10, 20, st7789.WHITE)
        display.fill_rect(80+tem_limit, 220, up_limit-tem_limit+5, 20, st7789.BLACK)
        print(up_limit,tem_limit)
        display.fill_rect(10, 230, 220, 1, st7789.WHITE)
    elif up_limit<tem_limit:
        display.fill_rect(85+up_limit, 220, 10, 20, st7789.WHITE)
        display.fill_rect(85+up_limit+10, 220, tem_limit-up_limit+5, 20, st7789.BLACK)
        print(up_limit,tem_limit)
        display.fill_rect(10, 230, 220, 1, st7789.WHITE)

5收获

经过学习,熟悉了rp2040的micropython编程。也比较了他和python在电脑上编程的不同。pico有一个600多页的手册,可以结合这个平台去学习。另外,micropython有micropython-nano-gui-master之类的开源图形库。也可以结合这个开发板学习。在这导体的编写过程中,体会到局部刷新的用处,另外又熟悉了一下中断的处理。是一个会继续研究的平台。

 

 

附件下载
main.py
主文件
wenduji.zip
项目文件打包
团队介绍
我是一名机械工程师,现在在天津工作。参加硬禾学堂的活动,扩展自己的电路技能。
团队成员
MMA
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号