温湿度计动画
-
使用DHT11获取当前房间温湿度
-
使用LVGL绘制温湿度(渐变色仪表盘+动画)

官方文档
https://docs.micropython.org/en/latest/esp32/quickref.html#dht-driver

DHT11温湿度接线
| ESP32-S3 |
DHT11 |
| GND |
GND |
| 3V3 |
VCC |
| GPIO4 |
DATA |

官方代码
import dhtimport machined = dht.DHT11(machine.Pin(4))d.measure()d.temperature() # eg. 23 (°C)d.humidity() # eg. 41 (% RH)
官方文档
https://docs.lvgl.io/8.3/examples.html#base-object
查看对应MicroPython示例代码

引入温湿度依赖
import dhtfrom machine import Pinsensor = dht.DHT11(Pin(4))
本文代码
# 设置温湿度中文字体font_wendu=lv.font_load("S:./wendu.bin")font_shidu=lv.font_load("S:./shidu.bin")# 设置温湿度动画值def set_temp(bar, temp):bar.set_value(temp, lv.ANIM.ON)# 设置温度样式style_indic = lv.style_t()style_indic.init()style_indic.set_bg_opa(lv.OPA.COVER)style_indic.set_bg_color(lv.palette_main(lv.PALETTE.RED))style_indic.set_bg_grad_color(lv.palette_main(lv.PALETTE.BLUE))style_indic.set_bg_grad_dir(lv.GRAD_DIR.VER)# 设置温度barbar = lv.bar(lv.scr_act())bar.add_style(style_indic, lv.PART.INDICATOR)bar.set_size(20, 200)bar.set_x(360)bar.set_y(80)bar.set_range(0, 40)# 设置温度文字label_bar=Nonelabel_bar = lv.label(scr)label_bar.set_style_text_font(font_wendu, 0) # set the fontlabel_bar.set_text("温度")label_bar.set_x(350)label_bar.set_y(285)# 获取温度值measure=sensor.measure()temperature_end=sensor.temperature()# 设置数字显示font_num=lv.font_load("S:./num.bin")label_bar_num=Nonelabel_bar_num = lv.label(scr)label_bar_num.set_style_text_font(font_num, 0)# label_bar_num.set_text("30")label_bar_num.set_text(str(temperature_end))label_bar_num.set_x(360)label_bar_num.set_y(60)# 设置温度动画a = lv.anim_t()a.init()a.set_time(3000)# a.set_playback_time(3000)a.set_var(bar)a.set_values(0, temperature_end)#a.set_repeat_count(lv.ANIM_REPEAT_INFINITE)a.set_repeat_count(0)a.set_custom_exec_cb(lambda a, val: set_temp(bar,val))lv.anim_t.start(a)
然后设置定时获取温湿度并重新设置动画
temperature=Nonedef tem_hum_change():global temperature_end,temperature,atry:measure=sensor.measure()temperature=sensor.temperature()except Exception as e:print("tem_hum_change 监听消息错误",repr(e))a = lv.anim_t()a.init()a.set_time(500)# a.set_playback_time(3000)a.set_var(bar)a.set_values(temperature_end,temperature)#a.set_repeat_count(lv.ANIM_REPEAT_INFINITE)a.set_repeat_count(0)a.set_custom_exec_cb(lambda a, val: set_temp(bar,val))lv.anim_t.start(a)label_bar_num.set_text(str(temperature))# 记录每次最新的值,作为下次动画的起始点temperature_end=temperature
总结如下
-
需要准备一个DHT11的温湿度模块
-
按照文中接线和代码获取当前温湿度值
-
使用LVGl绘制温湿度图表和动画效果
这个温湿度是最常见也相对容易设置的一个,重要的是它不依赖于网络
可视化的界面容易感知当前环境,避免出现高温脱水,低温感冒的场景
参考文章
《MicroPython[ESP32]:使用lvgl设置温度仪表盘动画》
往期内容
《MicroPython[ESP32-S3]:使用lv_font_conv制作中文字体文件然后加载和显示》
《MicroPython[ESP32-S3]:lvgl使用fontTools提取字体子集设置中文手写字体》
《MicroPython[ESP32-S3]:micropython-mqtt设置MQTT连接》
END
