Day light collector

Day light collector

这是个什么?

统计光照数据的应用。

为什么?

买房的时候,对于前楼遮挡与否、光照时间等有些讨论,现在租住的房子光照效果不错,于是想统计一下现在的光照时间段、强度信息。

怎么做?

M5Stack Atom Lite + DLight传感器,把数据上报到InfluxDB中(部署在k8s)

电源问题

得有一个持续供电的电源,这样才能统计接近白天时间的光照强度,因为要放在南向的窗户边,那里正好没有电源,要么就要拉一根线过去。

使用过充电宝,电量没问题,但,M5stack工作时电量消耗太小,充电宝一会就休眠了。小米的充电宝有低电流模式,但,只能开2小时。可以考虑购买不休眠的充电宝。

买了个5V2W的太阳能电池板,供不起来M5stack,要是买5V7W的应该就没问题了,只是会稍大一些。

试过M5stack Atom电池套件,190mah,很快就用完了,再接一个充电宝也还是不行。

最终在M5stack技术支持建议下,使用deep sleep模式,大约有3小时续航,还是不理想啊。不过3小时是在10s一次的频率下,每次3次采样取了平均值。降低到1分钟频率会使得Atom电池套件休眠,所以最后还是改到了30s一次,看看是否能增加3倍续航呢。

from m5stack import *
from m5ui import *
from uiflow import *
import unit
import wifiCfg
import urequests
import machine


api_token = 'Token the token'
api_url = 'http://the-influxdb/api/v2/write?org=ORG&bucket=BUCKET&precision=ns'

while not wifiCfg.wlan_sta.isconnected():
  wifiCfg.autoConnect(lcdShow=True)
  wait(5)

rgb.setColorAll(0x0000ff)

dlight = unit.get(unit.DLIGHT, unit.PORTA)

dlight.set_mode(0x20)
lux_values = [dlight.get_lux() for i in range(3)]
avg_lux = int(sum(lux_values) / len(lux_values))
print(lux_values, avg_lux)

req = urequests.request(
    method='POST',
    url=api_url,
    data='dlight,loc=the-loc lux={}'.format(avg_lux),
    headers={'Authorization': api_token}
    )
print(req.status_code)
rgb.setColorAll(0x000000)
machine.deepsleep(10000)