5061浏览
查看: 5061|回复: 2

用行空板做一个智能家居控制器

[复制链接]
本帖最后由 NciJlUN1qMan 于 2022-7-22 13:52 编辑

用行空板做一个智能家居控制器

浙江省温州中学  胡潇桓 
指导教师:邱奕盛

如今智能家居产品越来越多,大家通常会使用手机App控制它们。行空板的出现,给我带了灵感。我使用它制作了一款操作界面简洁的智能家居控制器,实现任意改变灯光颜色与亮度的功能。那具体是怎么实现的呢?读完这篇文章,你就了解了。

制作智能家居控制器所需的材料如附表所示。

附表


序号             名称                                  数量


1                  行空板                               1 块


2           Yeelight 智能灯                        1 盏


3       安装有 HASS 的树莓派                 1 块


注:可参考树莓派官方网站中的教程,给树莓派安装 HASS。

相关知识与工作原理

1.  HASS

HASS 的全称为 Home Assitant,是一款开源智能家居管理平台。强大的插件和集成使得它可以方便地连接各个品牌的智能家居设备。HASS 网关独立于企业网关,可以实现统一管理多个智能家居设备——查询设备状态和控制设备的功能。

2.  MQTT

MQTT 协议是物联网常用的通信协议,因为它对通信带宽要求低,所以绝大多数的智能传感器和智能家居设备支持MQTT 协议。

MQTT 服 务 器 是 统 一 管 理 和 转 发MQTT 协 议 消 息 的 服 务 器。 向 MQTT服务器发送消息和订阅消息,可以实现设备之间的通信。各大云计算平台提供了免 费 的 MQTT 服 务。 我 们 可 以 使 用EasyIoT、SIoT 搭 建 MQTT 服 务 器。 HASS 支持连接各种 MQTT 服务器。

3.  行空板

行空板是一款新型国产教学用开源硬件,集成 LCD 彩色触摸屏、Wi-Fi 通信模块、蓝牙通信模块、多种常用传感器和丰富的扩展接口。同时,其自带 Linux 操作系统和 Python 编译环境,并预装了常用的 Python 库,让使用者只需两步就能开始学习 Python。

4.  工作原理

由于行空板等开源硬件不能直接 接 入 HASS,需 要 利 用 MQTT平 台 做 中 转, 我们将行空板与MQTT 服务器连接。这样有一个好处,就是传递消息不再受限于局域网,而是在任何有网络的地方都可以传递。然后,行空板通过 MQTT 服务器接入 HASS 网关,从而控制智能家居设备。智能家居设备与行空板的交互流程如图 1 所示。

用行空板做一个智能家居控制器图1

图 1  智能家居设备与行空板的交互流程

功能实现过程

第一步:将Yeelight智能灯接入HASS


首先 给 Yeelight 智 能 灯 上 电, 然 后根 据 Yeelight App 的 网 络 连 接 引 导 将Yeelight 智 能 灯 接 入 自 己 家 的 Wi-Fi。在浏览器中输入“你自己的树莓派的地址:8123”访问 HASS,如图 2 所示,单击界面左侧下方的“配置”,再选择界面右侧的“设备与服务”,在新的界面中依次单击“集成”和“添加集成”,然后在搜索框中输入“Yeelight”并按下键盘上的回车键,此时,HASS 会搜索周围已连入网络的 Yeelight 设备,在自动搜索到我们的 Yeelight 智能灯后,选择“提交”。如果我们在集成看到了新出现的 Yeelight设备或 Yeelight 设备中出现了新的设备编号,如图 3 所示,就代表我们已经成功把Yeelight 智能灯接入 HASS 了。

用行空板做一个智能家居控制器图2
图 2  访问 HASS 平台

用行空板做一个智能家居控制器图3
图 3  将 Yeelight 智能灯接入 HASS

第二步:配置行空板

使用数据线将行空板连接到计算机上,长按行空板左侧的确定按键打开菜单,选择“应用开关”(见图 4),在新弹出的界面中启用 Jupyter 和 SIoT(见图 5),操方法为通过行空板右侧的按键移动光标,当光标移动至 Jupyter 和 SIoT 上时,按下行空板左侧的确定按键。

设定好后,退出“应用开关”,再选择“查看网络信息”,在出的界面中查看USB 网口(见图 6)。将 USB 网口地址输入浏览器中,选择“网络设置”,扫描附近 Wi-Fi,并在扫描结果中选择自己家的 Wi-Fi,然后按照提示,输入 Wi-Fi 密码并选择“连接”(见图 7),当界面显示连接成功时,行空板就连接至自己家的Wi-Fi 了。此后,行空板只要上电,就会自动连接上家中的 Wi-Fi 了。

用行空板做一个智能家居控制器图4


用行空板做一个智能家居控制器图5
图 7  输入 Wi-Fi 密码并选择“连接”

第三步:将SIoT接入HASS

通过浏览器访问“你自己的行空板的无线连接地址:8080”,就可以进入SIoT,登录 SIoT 的用户名和密码分别为siot 和 dfrobot。在 HASS 中,依次选择“配置”“设备与服务”“集成”“添加集成”,然后搜索“MQTT”,在图 8 所示的服务器选项界面中输入行空板的无线连接地址、端口、SIoT 的用户名和密码,单击“下一步”,按提示完成连接。如果 HASS 界面出现了 MQTT 就代表连接成功了,如图 9所示。

用行空板做一个智能家居控制器图6
图 8  服务器选项界面

用行空板做一个智能家居控制器图7
图 9  成功将 MQTT 连接至 HASS

第四步:编写程序实现用滑条控制灯光颜色及亮度的功能

通过浏览器访问“你自己的行空板的无线连接地址:8888”,进入行空板内置 的 jupyter notebook, 在 这 里 编 写 的Python 文件会自动存入行空板中,并在行空板中运行,如图 10 所示。

用行空板做一个智能家居控制器图8
图 10  进入行空板内置的 jupyter notebook

我们新建一个文本文件,然后开始编写程序。

导入库和利用 tk 库创建交互 UI 窗口的程序如下所示。

  1. import siot
  2. import time
  3. import tkinter as tk
  4. window = tk.Tk()
  5. window.title(“ 控制啊灯的颜色 ”)
  6. window.geometry(‘240x320’)
复制代码

生成代表不同功能(发出红色光、发出绿色光、发出蓝色光、调整亮度)的滑条的程序如下所示。其中,label 后的字符串为滑条上显示的标签,from_ 与 to 后面的数字表示滑条的数字区间,width 与length 分别控制滑条的长与宽。

  1. s l _ r e d = t k . S c a l e ( w i n d o w ,
  2. label=”RED”, from_=1, to=255,
  3. orient=’horizontal’, width=20,
  4. length=300)
  5. sl_red.pack()
  6. s l _ g r e e n = t k . S c a l e ( w i n d o w ,
  7. label=”GREEN”, from_=1, to=255,
  8. orient=’horizontal’, width=20,
  9. length=300)
  10. sl_green.pack()
  11. s l _ b l u e = t k . S c a l e ( w i n d o w ,
  12. label=”BLUE”, from_=1, to=255,
  13. orient=’horizontal’, width=20,
  14. length=300)
  15. sl_blue.pack()
  16. s l _ b r i g h t = t k . S c a l e ( w i n d o w ,
  17. label=”BRIGHT”, from_=1, to=100,
  18. orient=’horizontal’, width=20,
  19. length=300)
  20. sl_bright.pack()
复制代码

设置按钮响应函数,用于获取颜色值并调用发送函数,程序如下所示。这里一定要注意 rgb 与 bright 的两端使用的必须是半角的双引号,否则会导致程序无法正常运行。

  1. def set_rgb():
  2. rgb_color = ‘[‘ + str(sl_red.
  3. get()) + ‘,’ + str(sl_green.get()) +
  4. ‘,’ + str(sl_blue.get()) + ‘]’
  5. print(rgb_color)
  6. return rgb_color
复制代码

消 息 发 送 函 数, 向 SIoT 中 指 定 的Topic 发送指定的信息,程序如下所示。在 SERVER 后方填入行空板的无线连接地 址, 在 IOT_pubTopic 中 输 入 设 定 的Topic 名称(前后必须要用“/”隔开),如果 SIoT 中尚没有对应的 Topic 也不要紧,在发送一次消息后,SIoT 会自动创建Topic。

  1. def send(mess):# 发送消息
  2. SERVER = “192.168.1.5”
  3. CLIENT_ID = “”
  4. IOT_pubTopic = ‘deng/secai’
  5. IOT_UserName = ‘siot’
  6. IOT_PassWord = ‘dfrobot’
  7. siot.init(CLIENT_ID, SERVER,
  8. user=IOT_UserName, password=IOT_
  9. PassWord)
  10. siot.connect()
  11. siot.loop()
  12. siot.publish(IOT_pubTopic, mess)
复制代码

设置按钮 UI 和响应函数,程序如下所示。text 后的内容为按钮上要显示的文字,command 后面的内容为按钮的响应函数名。

  1. turn_color = tk.Button(window,
  2. text=u’turn color’, command=turn_
  3. color)
  4. turn_color.pack()
复制代码

如下所示,运行窗口程序

  1. window.mainloop()
复制代码

UI 窗口可以根据个人喜好进行个性化设计。我们在图 11 蓝框所示的地方修改文件名,修改时要记住后缀一定要为 .py。修改好后,保存文件,我们就可以退回行空板内置的 jupyter notebook 的初始界面了。在初始界面找到刚刚保存的文件并打开。如果生成了操作界面,就单击界面下方的按钮,再到 SIoT 中查看是否可以收到对应的 Topic(见图 12),如果可以收到,此步就完成了。

用行空板做一个智能家居控制器图9
图 11  修改文件名称

用行空板做一个智能家居控制器图10
图 12  在 SIoT 中查看 Topic

第五步:在HASS中编写自动化接

收SIoT中对应的Topic的程序在 HASS 中,依次选择“配置”“场景自动化”“添加自动化”,在弹出的窗口中选择“从空的自动化开始”,如图 13所示。在新的界面中,将名称填写为“灯光颜色”,将触达条件类型选为“MQTT”,将主题填写为对应的 Topic,即上文程序中 IOT_pubTopic 后填写的 Topic,如图14 所示。

用行空板做一个智能家居控制器图11
图 13  选择“从空的自动化开始”

用行空板做一个智能家居控制器图12
图 14  配置自动化

下 滑 界 面 至“ 动 作”( 见 图 15),将动作类型选为“调用服务”,服务选为“ 灯 光:Turn on”, 单 击“ 选 择 设备”选择 Yeelight 智能灯(设备名称可在HASS 的设备与服务处选项下查看),勾选“Brightness”,再拖动“Brightness”后的圆点至任意位置。然后单击界面右上角的 3 个点,选择 “以 YAML 编辑”,此 时 会 出 现 如 图 16 所 示 的 内 容。 除 了device_id 会随不同设备变化,其余内容均需要参考图 17 进行修改。

用行空板做一个智能家居控制器图13
图 15  配置动作

用行空板做一个智能家居控制器图14
图 16  选择 “以 YAML 编辑”

用行空板做一个智能家居控制器图15
图 17  参考程序

修改后,拿起行空板,滑动滑条并按下确定按键,如果 Yeelinght 智能灯会发生相应的变化,则表示配置成功。智能家居控制器的成品如图 18 所示。

用行空板做一个智能家居控制器图16

大家还可以参考本文的方法使用行空板控制其他智能家居,快来试试吧!

hnyzcj  版主

发表于 2022-7-22 22:06:48

不错不错
回复

使用道具 举报

JOVI  高级技师 来自手机

发表于 2023-11-29 04:20:52

学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail