【2024 DigiKey 创意大赛】睡眠环境监测屏
<p><strong>一、作品简介</strong></p><p>BME680 传感器集成了多个功能,可以测量气体,湿度,压力,温度,结合ESP32-S3-LCD-EV-BOARD开发板,非常适合制作成一个摆在床头的电子监视器。通过读取BME680中的数据,可以获取到常规的温度,湿度,气压数据。结合这些数据,可以计算一个舒适指数,通过观察舒适指数可以检测卧室的睡眠环境好坏。<br />
</p>
<p><strong>二、系统框图</strong><br />
系统分为两部分,第一部分是BME680模块,用来获取环境信息;第二部分是ESP32-S3-LCD-EV-BOARD开发板,用来显示各种信息,以及时间。</p>
<p> </p>
<p> </p>
<p><strong>三、各部分功能说明</strong></p>
<p>开发环境我使用的是circuitpython。先去官网下载对应固件。这里注意一定要下载1.5版本的,因为1.5版本的电路和之前版本的不一样,因此无法兼容。</p>
<p><a href="https://circuitpython.org/board/espressif_esp32s3_lcd_ev_v1.5/" target="_blank">https://circuitpython.org/board/espressif_esp32s3_lcd_ev_v1.5/</a></p>
<p>在页面中无需下载固件,可以直接插上开发板进行安装。需要注意的是板子上有两个USB口,我们要使用的是写着USB的那个口,而不是UART的口。并且需要在上电时按住板上的BOOT按键。</p>
<p>点击在线安装后,选择第二个选项:</p>
<p> </p>
<p>如果一切顺利,接下来就可以看到安装进度条:</p>
<p> </p>
<p>安装好后,按一下板上的RST按键,电脑应该就会自动识别出一个U盘,并且开发板屏幕也会亮起来,并打印出一些终端信息。到这就完成了circuitpython的固件刷写。</p>
<p> </p>
<p>在开始编写代码前,首先需要联网。在U盘中的settings.toml文件中写入下面的配置信息,填写好自己家的WiFi信息,保存后然后再按一下板子上的RST按键,板子重启后应该就可以自动连接上网络。</p>
<pre>
<code>CIRCUITPY_WIFI_SSID=""
CIRCUITPY_WIFI_PASSWORD=""</code></pre>
<p> </p>
<p>下面编写代码。代码主要实现了两个功能,一个是从网络上获取时间,另一个是读取BME680的数据。所有数据得到后把它们显示在屏幕上。</p>
<p>代码中的关键部分是每个循环更新的信息。我在里面添加了一个舒适指数,计算方法是看当前温度,湿度,气压和一般舒适范围的偏离程度,偏离程度越大则舒适程度越低。</p>
<pre>
<code>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}, {t.tm_mday}/{t.tm_mon}/{t.tm_year}"
print(f"\nThe date is {days} {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))
</code></pre>
<p> </p>
<p>写好程序后运行,把模块接在开发板上,IO47,48是I2C接口。然后运行程序,就可以看到程序正常运行起来。</p>
<p></p>
<p> </p>
<p><strong>四、作品源码</strong></p>
<div></div>
<p> </p>
<p><strong>五、作品功能演示视频</strong></p>
<p>4a3c0a6aab5f9f45d20691974c5dd5f1<br />
</p>
<p> </p>
<p><strong>六、项目总结</strong></p>
<p>这个项目中使用了一块非常高质量的开发板。由于是最后一批入围,时间非常紧,加上水平有限,这次对开发板的开发程度相当有限。但在活动结束后依旧可以对这块开发板进行反复把玩,一定会慢慢发挥出它的实力。</p>
<div></div>
页:
[1]