【得捷电子Follow me第3期】任务6:综合实践之环境监测及应用
[复制链接]
本帖最后由 鲜de芒果 于 2023-11-19 21:09 编辑
任务介绍
基于【得捷电子Follow me第3期】的硬件平台,在我自己的智能家居平台上补充环境监测功能。从而实现卧室环境感知,通过与平台上其它设备连通实现智能联动。例如:温度高时可以打开风扇,空调。光线较暗或较亮时自动开灯关灯等。
硬件准备
该任务也需要搭配扩展板来实现,扩展板为 Seeed Studio Expansion Board Base for XIAO
另外,需要搭配温湿度传感器模块 Grove - AHT20 I2C Industrial Grade Temperature and Humidity Sensor 和 光传感器模块 Grove - Light Sensor v1.2 来完成相应功能。
如下图所示,将温湿度传感器模块 Grove - AHT20 I2C Industrial Grade Temperature and Humidity Sensor 连接至扩展板的 I2C 接口。将 光传感器模块 Grove - Light Sensor v1.2 连接至扩展板的 A0-D0 接口
智能家居平台对接
与智能家居平台对接使用MQTT协议,Seeed Studio XIAO ESP32C3 连接到WIFI后,通过 MQTT 将传感器数据上报至智能家居平台。
想要实现任务介绍中的功能,首先需要在智能家居平台建立相应的设备,并建立接收环境数据相应的 MQTT 主题和与之相对应的环境数据上报的JSON数据格式即可实现对接。这里我定义的数据结构为:
{
"temperature": "16.75", // 温度
"lux": "12.05", // 光照
"lux_adc": 141, // 光照传感器ADC采样值
"wifi_rssi": "-41.00", // WIFI信号强度
"humidity": "69.82" // 湿度
}
环境数据上报
前面已经定义好了向智能家居平台上报环境数据的JSON格式,代码的实现就相对容易了很多,只需要根据前面的任务实现,将采集到的数据组装成所需的格式,通过 MQTT 向指定 主题 上报传感器数据即可完成对接。代码实现如下:
import time
import task2
import task3
import task4
import task5
import asyncio
import machine
import ubinascii
from button import Button
from umqtt.simple import MQTTClient
report_interval = 10 # 上报传感器数据间隔时间(单位:秒)
'''
MQTT 连接
'''
client = None
CLIENT_ID = ubinascii.hexlify(machine.unique_id())
MQTT_SERVER = '192.168.2.120'
async def mqtt_client():
# 连接wifi
task4.connect_wifi()
print("connected wifi")
global client
client = MQTTClient(client_id=CLIENT_ID, server=MQTT_SERVER,user="xiao_esp32c3",password="123456")
client.connect()
print("mqtt client connected")
while True:
# client.wait_msg()
await asyncio.sleep_ms(100)
# 上报传感器数据至智能家居平台
async def report_sensor_data():
print("report_sensor_data()")
while True:
await asyncio.sleep(report_interval) # 间隔段时间才开始上报
# 更新数据
task5.get_temperature_humidity_data()
task5.get_light_data()
task5.get_wifi_rssi()
# 上报传感器数据
data = task5.get_sensor_data()
print("publish: ", data)
client.publish(b"sensor/xiao_esp32c3/state", data)
async def main():
tasks = []
# MQTT任务
mqtt_task = asyncio.create_task(
mqtt_client()
)
tasks.append(mqtt_task)
# 传感器数据上报任务
report_task = asyncio.create_task(
report_sensor_data()
)
tasks.append(report_task)
# 提交任务执行
await asyncio.gather(i for i in tasks)
if __name__ == "__main__":
print("run in main")
# 异步执行任务
asyncio.run(main())
与其它智能设备联动
这里使用【得捷电子Follow me第2期】制作的氛围灯,来实现与这次的制作来实现联动。仅需要在氛围灯监控的主题上增加一个判断环境光照度的逻辑判断即可实现联动。
而传感器监控的数据只需要按之前定义好的JSON格式定时上报即可,这里为了避免过于频繁,我设置了上报的间隔周期为每10秒上次一次采集到的传感器数据。
效果展示
智能家居平台展示
智能家居平台环境数据监控展示
温度历史
湿度历史
亮度历史
与氛围灯联动效果
光暗灯亮
这里只需简单的用一个盖子盖住环境光照传感器,等到数据更新时,即可控制氛围灯点亮。
光亮灯灭
演示视频
|