基于树莓派RP2040制作温度计
该项目是基于树莓派RP2040的嵌入式学习板、使用microPython进行编程的实现图形化显示以及超温报警的温度计。项目完全基于树莓派RP2040,未接外设。
标签
嵌入式系统
2022寒假在家练
小骏菌
更新2022-03-07
四川大学
947

项目说明文档

一、项目简介

该项目是基于树莓派RP2040的嵌入式学习板、使用microPython进行编程的实现图形化显示以及超温报警的温度计。

 

二、硬件介绍

此项目完全基于树莓派RP2040,未接外设。具体使用到的为:板载的RP2040MCU、轻触按键A、摇杆、IPS-LED屏幕、蜂鸣器。使用ADC读取摇杆值和内部温度传感器温度,使用PWM驱动蜂鸣器发声,使用SPI驱动显示屏,使用GPI0读取按键A的信息。

 

三、设计思路

总的来说,此项目需要实现静态外观和动态刷新两个方面内容。

静态外观:温度计外壳及刻度,文字(当前温度、高温阈值)。

文字可用st7789中库函数显示,温度计的外壳也可用st7789库函数来完成,但需在库函数中加入一个画圆函数

动态刷新:滑块、温度、高温报警阈值、实时温度计图像

温度的读取用ADC,剩余三者利用循环实现

Fk8N0z0HINH5qQr18hrqvVVOiu7Y

 

四、实现的功能及图片展示

1.开场

文字说明和硬禾logo

FrVqZhKezlYxC1ZFhg3cRmV1Bpr4FpHsATNCL3hzOfnR7Cw498F2uyU_

2.温度计界面

显示实时温度并可调节高温预警阈值,当温度超过高温阈值时蜂鸣器报警。

FgotgAm_pG3QnoPLILKP3S-AD4wd

五、遇到的困难

1.刚开始入手时,会觉得手足无措,不知从何下手,我尝试了很多办法,但最终还是从头开始学Python语法奏效了。不基本了解Python语法,根本看不懂库函数,也写不出正确的代码。买了一本书,认真学完以后才开始着手做项目。

2.用库函数画温度计外壳是一项麻烦的工作,需要调整合适的位置,对接好直线和曲线。这是进过不断地尝试和调试得来的。

3.做实时温度读取和滑杆位置读取时一开始不知道怎么弄,后来查阅了电子森林板卡结构图,还翻阅的交流群的聊天记录,就知道怎么做了。

 

六、未来计划

    经过这个寒假的玩耍与学习,我对这方面有了较高的兴趣,未来我想再玩玩板卡之类的东西。还有Python,我想更深入的学习,作为自己的一项熟练技能。

display.fill(st7789.WHITE)
body_Lx=110
body_Rx=135
body_y=24
body_Len=170

display.vline(body_Lx,body_y,line_len+10,st7789.BLACK)
display.vline(body_Rx,body_y,line_len+10,st7789.BLACK)
display.fill_circle(123,209,25,st7789.BLACK)
display.fill_circle(123,209,24,st7789.WHITE)
display.fill_rect(112,180,22,20,st7789.WHITE)

display.fill_circle(int((body_Lx+body_Rx)/2)+1, body_y-1, int((body_Rx-body_Lx)/2)+1, st7789.BLACK)
display.fill_circle(int((body_Lx+body_Rx)/2)+1, body_y-1, int((body_Rx-body_Lx)/2), st7789.WHITE)
display.fill_rect(112, 17, 22, 20, st7789.WHITE)

k=0
for i in[185,164,144,124,104,84,64,44]:
    num=k*10
    
    display.text(font1,str(num),body_Rx+22,i-4,st7789.BLACK,st7789.WHITE)
    display.hline(body_Rx,i,20,st7789.BLACK)
    display.hline(body_Rx,i-5,10,st7789.BLACK)
    display.hline(body_Rx,i-9,10,st7789.BLACK)
    display.hline(body_Rx,i-13,10,st7789.BLACK)
    display.hline(body_Rx,i-17,10,st7789.BLACK)
    k+=1
    
display.hline(body_Rx,23,20,st7789.BLACK)
display.text(font1,str(num+10),body_Rx+22,19,st7789.BLACK,st7789.WHITE)

显示温度、阈值信息
display.text(font1,'Temp:',3,80,st7789.BLACK,st7789.WHITE)
display.text(font1,'THER_H:',3,130,st7789.BLACK,st7789.WHITE)
display.text(font1,str(threshold_high),60,130,st7789.BLACK,st7789.WHITE)


显示滑动块:
display.vline(line_x,line_y,line_len,st7789.BLACK)
display.fill_rect(slider_x,slider_y,10,10,st7789.RED)

while True:
    display.fill_circle( 123, 208, 20, ther_color)
    temperature=round(27-(SensorTemp.read_u16()*offset-0.706)/0.001721,2)
    print('temperature:{}'.format(temperature))
    display.text(font1,str(temperature)+'℃',45,80,st7789.BLACK,st7789.WHITE)
    
    if temperature>=threshold1:
        ther_color=st7789.RED
        Buzz.freq(1000)
        Buzz.duty_u16(500)
    
    elif temperature<=threshold1-1:
        ther_color=st7789.GREEN
        Buzz.deinit()
        
    ther_y=int(185-temperature*2)
    display.fill_rect(ther_x,30,17,ther_y-30,st7789.WHITE)
    display.fill_rect(ther_x,ther_y,17,200-ther_y,ther_color)
    
    if buttonA.value()==0:
        utime.sleep(0.05)
        while buttonA.value()==0:
            threshold_high=int(40-(Joy_y.read_u16()-32768)/800)
            print('threshold_high:{}'.format(threshold_high))
            display.fill_rect(slider_x,slider_y,10,10,st7789.WHITE)
            display.vline(line_x,line_y,160,st7789.BLACK)
            slider_y=180-int(threshold_high*2)
            display.fill_rect(slider_x,slider_y,10,10,st7789.RED)
            display.text(font1,str(threshold_high)+'  ',60,130,st7789.BLACK,st7789.WHITE)   
   
    else:
        threshold1=threshold_high

 

 

 

 

 

 

 

附件下载
百度网盘链接.txt
团队介绍
本人是四川大学电气工程学院在读学生
团队成员
小骏菌
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号