乐鑫M5GO自制智能家居系统(程序结构精简版/群除我佬版)

乐鑫M5GO自制智能家居系统(程序结构精简版/群除我佬版)

这一款是基于乐鑫的M5GO Lite,以及相关传感器。
编译平台选择的是UIFlow,模块性编译,好上手,对新手比较友好!下附地址:
https://flow.m5stack.com/
上一篇是萌新简单的编写
这次有了组员大佬的加持,程序果然精简,厉害了不少。

设计思路

1.通过M5Go的监测温度,湿度,气压的ENV Uint监测环境条件,天气小助手;
2.外加光线监测模块(Light Unit),监测环境光强,提醒是否适宜睡眠;
3.声音模块监测呼噜声,及时给出提醒;
4.也可以附加人体红外成像单元,监测人体睡眠时的热成像照片;
5.通过之后再M5Go显示分析结果,发出柔和的LED光线和音乐,或者提醒的LED光线及声音。
6.当适宜睡眠时给出相应提示,不适宜时,可以通过红外光电对管(Mini Infrared Unit)反馈调整家庭电器(空调,加湿器)。
7.所有信息都将通过Wifi反馈到手机,手机也可以通过小程序来调节红外光电对管,反馈调整家庭电器(空调,加湿器)。

程序

经过大佬加持,程序使用起来更加丝滑,图形模块可以看附件,这里列出来程序代码。

from m5stack import *
from m5ui import *
from uiflow import *
import unit
remoteInit()
import machine
setScreenColor(0x111111)
light0 = unit.get(unit.LIGHT, unit.PORTB)
env2 = unit.get(unit.ENV, unit.PORTA)




Sun = M5Circle(253, 199, 120, 0xff7800, 0x000000)
cloud1 = M5Circle(167, 231, 40, 0x57adff, 0x57adff)
cloud2 = M5Circle(261, 206, 80, 0x57adff, 0x57adff)
cloud3 = M5Circle(283, 136, 40, 0x57adff, 0x57adff)
theme = M5TextBox(36, 24, "Text", lcd.FONT_Comic,0xFFFFFF, rotate=0)
z1 = M5TextBox(64, 154, "Z", lcd.FONT_DejaVu24,0xFFFFFF, rotate=320)
z2 = M5TextBox(112, 111, "Z", lcd.FONT_DejaVu40,0xFFFFFF, rotate=340)
z3 = M5TextBox(181, 80, "Z", lcd.FONT_DejaVu56,0xFFFFFF, rotate=0)
temlabel = M5TextBox(38, 89, "Temperature", lcd.FONT_DejaVu18,0xFFFFFF, rotate=0)
damplabel = M5TextBox(38, 122, "Humidity", lcd.FONT_DejaVu18,0xFFFFFF, rotate=0)
presslabel = M5TextBox(37, 156, "Pressure", lcd.FONT_DejaVu18,0xFFFFFF, rotate=0)
temp = M5TextBox(181, 87, "Text", lcd.FONT_DejaVu18,0xFFFFFF, rotate=0)
damp = M5TextBox(181, 123, "Text", lcd.FONT_DejaVu18,0xFFFFFF, rotate=0)
press = M5TextBox(179, 157, "Text", lcd.FONT_DejaVu18,0xFFFFFF, rotate=0)
weatherinfo = M5TextBox(37, 196, "Text", lcd.FONT_DejaVu24,0xFFFFFF, rotate=0)

import random

light = None
bright = None
interface = None
t = None
h = None
p = None
j = None
alarm = None
qrupdated = None
R = None
G = None
B = None

def updateinterface():
  global light, bright, interface, t, h, p, j, alarm, qrupdated, R, G, B
  if interface == 3:
    if not qrupdated:
      lcd.fill(0xffffff)
      lcd.qrcode('http://flow-remote.m5stack.com/?remote=undefined', 72, 32, 176)
      qrupdated = True
  else:
    qrupdated = False
    lcd.clear()
    theme.show()
    if interface == 1:
      R = random.randint(0, 255)
      G = random.randint(0, 255)
      B = random.randint(0, 255)
      if (light0.analogValue) < 300:
        rgb.setColorAll(0x000000)
        theme.setText('Good Night')
        z1.show()
        z2.show()
        z3.show()
        if not alarm:
          speaker.setVolume(1)
          speaker.tone(988, 469)
          speaker.tone(880, 469)
          speaker.tone(740, 469)
          speaker.tone(880, 469)
          speaker.tone(784, 703)
          speaker.tone(740, 234)
          speaker.tone(659, 469)
          speaker.tone(587, 1406)
          alarm = True
      else:
        if alarm:
          theme.setText('Good Morning')
          rgb.setBrightness(20)
          rgb.setColorFrom(6 , 10 ,(R << 16) | (G << 8) | B)
          rgb.setColorFrom(1 , 5 ,(R << 16) | (G << 8) | B)
          Sun.show()
          speaker.setVolume(2)
          speaker.tone(117, 156)
          speaker.tone(147, 156)
          speaker.tone(175, 156)
          speaker.tone(233, 156)
          speaker.tone(294, 156)
          speaker.tone(349, 156)
          speaker.tone(466, 469)
          speaker.tone(294, 156)
          speaker.tone(349, 156)
          speaker.tone(466, 156)
          speaker.tone(523, 1406)
        else:
          theme.setText('Energetic!')
          Sun.show()
    else:
      if (env2.humidity) > 50:
        rgb.setColorAll(0x3366ff)
        cloud1.show()
        cloud2.show()
        cloud1.show()
      else:
        rgb.setColorAll(0xff6600)
        Sun.show()
      if (env2.temperature) < 28 and (env2.temperature) > 23:
        weatherinfo.setColor(0xffff00)
        weatherinfo.setText('Beautiful!')
      else:
        if (env2.temperature) < 28:
          weatherinfo.setColor(0x33ccff)
          weatherinfo.setText('Too Cold!')
        else:
          weatherinfo.setColor(0xff0000)
          weatherinfo.setText('Too Hot!')
      theme.setText('Weather')
      temp.setText(str(env2.temperature))
      damp.setText(str(env2.humidity))
      press.setText(str(env2.pressure))
      temlabel.show()
      damplabel.show()
      presslabel.show()
      temp.show()
      damp.show()
      press.show()


def buttonA_wasPressed():
  global interface, t, h, p, j, alarm, qrupdated, bright, light, R, G, B
  interface = 1
  pass
btnA.wasPressed(buttonA_wasPressed)

def buttonB_wasPressed():
  global interface, t, h, p, j, alarm, qrupdated, bright, light, R, G, B
  interface = 2
  alarm = False
  pass
btnB.wasPressed(buttonB_wasPressed)

def buttonC_wasPressed():
  global interface, t, h, p, j, alarm, qrupdated, bright, light, R, G, B
  interface = 3
  alarm = False
  pass
btnC.wasPressed(buttonC_wasPressed)

def _remote_开关灯(light):
  global interface, t, h, p, j, alarm, qrupdated, bright, R, G, B, light0, env2, updateinterface 
  if light == 1:
    rgb.setBrightness(10)
    rgb.setColorAll(0xffffff)
  else:
    rgb.setColorAll(0x000000)

def _remote_Light(bright):
  global interface, t, h, p, j, alarm, qrupdated, light, R, G, B, light0, env2, updateinterface 
  rgb.setBrightness(bright)

def _remote_温度():
  global interface, t, h, p, j, alarm, qrupdated, bright, light, R, G, B, light0, env2, updateinterface 
  t = env2.temperature
  return t
def _remote_湿度():
  global interface, t, h, p, j, alarm, qrupdated, bright, light, R, G, B, light0, env2, updateinterface 
  h = env2.humidity
  return h
def _remote_压强():
  global interface, t, h, p, j, alarm, qrupdated, bright, light, R, G, B, light0, env2, updateinterface 
  p = env2.pressure
  return p
def _remote_光线强度():
  global interface, t, h, p, j, alarm, qrupdated, bright, light, R, G, B, light0, env2, updateinterface 
  j = light0.analogValue
  return j
def _remote_睡眠小助手():
  global interface, t, h, p, j, alarm, qrupdated, bright, light, R, G, B, light0, env2, updateinterface 
  interface = 1

def _remote_天气小助手():
  global interface, t, h, p, j, alarm, qrupdated, bright, light, R, G, B, light0, env2, updateinterface 
  interface = 2

interface = 3
qrupdated = False
alarm = False
while True:
  updateinterface()
  wait(1)
  wait_ms(2)

附件:RemoteControl.m5f
CSDN上也有RemoteControl.m5f资源。

参考网址与资料

·参赛队伍 B 站教学视频: https://space.bilibili.com/443675010spm_id_from=333.788.b_765f757069 6e666f.2

·参赛队伍硬件信息一览:
https://docs.m5stack.com/#/

·参考成品一览: https://m5stack.com/pages/blog-page

·乐鑫公司详情:
https://www.espressif.com/zhhans/products/hardware/development-boards

·编译平台 UIFLOW: https://docs.m5stack.com/#/zh_CN/uiflow/uiflow_home_page

·Arduino 开发平台: https://docs.m5stack.com/#/zh_CN/arduino/arduino_home_page

·UIFLOW-GITHUB 参考资料: https://github.com/m5stack/UIFlow-Code

·Micro Python 参考资料 https://www.icloud.com/keynote/0W35w4QK26yW7S5eNWwHHYvHA

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值