147|0

5

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

【2024 DigiKey 创意大赛】睡眠环境监测屏 [复制链接]

  本帖最后由 林太太 于 2024-10-27 22:44 编辑

一、作品简介

BME680 传感器集成了多个功能,可以测量气体,湿度,压力,温度,结合ESP32-S3-LCD-EV-BOARD开发板,非常适合制作成一个摆在床头的电子监视器。通过读取BME680中的数据,可以获取到常规的温度,湿度,气压数据。结合这些数据,可以计算一个舒适指数,通过观察舒适指数可以检测卧室的睡眠环境好坏。
 

二、系统框图
系统分为两部分,第一部分是BME680模块,用来获取环境信息;第二部分是ESP32-S3-LCD-EV-BOARD开发板,用来显示各种信息,以及时间。

 

 

三、各部分功能说明

开发环境我使用的是circuitpython。先去官网下载对应固件。这里注意一定要下载1.5版本的,因为1.5版本的电路和之前版本的不一样,因此无法兼容。

https://circuitpython.org/board/espressif_esp32s3_lcd_ev_v1.5/

在页面中无需下载固件,可以直接插上开发板进行安装。需要注意的是板子上有两个USB口,我们要使用的是写着USB的那个口,而不是UART的口。并且需要在上电时按住板上的BOOT按键。

点击在线安装后,选择第二个选项:

 

如果一切顺利,接下来就可以看到安装进度条:

 

安装好后,按一下板上的RST按键,电脑应该就会自动识别出一个U盘,并且开发板屏幕也会亮起来,并打印出一些终端信息。到这就完成了circuitpython的固件刷写。

 

在开始编写代码前,首先需要联网。在U盘中的settings.toml文件中写入下面的配置信息,填写好自己家的WiFi信息,保存后然后再按一下板子上的RST按键,板子重启后应该就可以自动连接上网络。

CIRCUITPY_WIFI_SSID=""
CIRCUITPY_WIFI_PASSWORD=""

 

下面编写代码。代码主要实现了两个功能,一个是从网络上获取时间,另一个是读取BME680的数据。所有数据得到后把它们显示在屏幕上。

代码中的关键部分是每个循环更新的信息。我在里面添加了一个舒适指数,计算方法是看当前温度,湿度,气压和一般舒适范围的偏离程度,偏离程度越大则舒适程度越低。

def update_labels():
    t = ntp.datetime
    time_label.text = "{}:{:02}:{:02}".format(t.tm_hour, t.tm_min, t.tm_sec)
    date_label.text = f"{days[int(t.tm_wday)]}, {t.tm_mday}/{t.tm_mon}/{t.tm_year}"

    print(f"\nThe date is {days[int(t.tm_wday)]} {t.tm_mday}/{t.tm_mon}/{t.tm_year}")
    print("The time is {}".format(time_label.text))

    temperature = bme680.temperature
    relative_humidity = bme680.relative_humidity
    pressure = bme680.pressure
    temperature_value_label.text = "{:0.1f}°C".format(temperature)
    relative_humidity_value_label.text = "{:0.1f}%".format(relative_humidity)
    pressure_value_label.text = "{:0.1f}hPa".format(pressure)
    print("\nTemperature: {}".format(temperature_value_label.text))
    print("Humidity: {}".format(relative_humidity_value_label.text))
    print("Pressure: {}".format(pressure_value_label.text))

    comf_index = (
        1
        - (
            abs(temperature / 25 - 1)
            + abs(relative_humidity / 50 - 1)
            + abs(pressure / 1000 - 1)
        )
    ) * 100
    if comf_index < 50:
        comfortable_value_label.color = 0xFF0000
    elif comf_index < 75:
        comfortable_value_label.color = 0xFFFF00
    else:
        comfortable_value_label.color = 0x00FF00
    comfortable_value_label.text = "Comf Index: {:0.0f}".format(comf_index)

    print("\n{}".format(comfortable_value_label.text))

 

写好程序后运行,把模块接在开发板上,IO47,48是I2C接口。然后运行程序,就可以看到程序正常运行起来。

 

四、作品源码

20241027221326136.zip (168.67 KB, 下载次数: 0)

 

五、作品功能演示视频

电子大赛

 

 

六、项目总结

这个项目中使用了一块非常高质量的开发板。由于是最后一批入围,时间非常紧,加上水平有限,这次对开发板的开发程度相当有限。但在活动结束后依旧可以对这块开发板进行反复把玩,一定会慢慢发挥出它的实力。

2024德捷电子大赛.doc (373.5 KB, 下载次数: 1)
点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表