查看原文
其他

会员项目show|这才是我想要的智能家居...

黄昊 & 伍树 柴火创客空间 2023-11-22

前言

柴火认证会员是指通过柴火新一代信息技术培训课程并通过项目认证,或符合条件直接通过认证的会员群体。👉 更多关于认证会员信息,戳此了解👈


今天的【柴火认证会员项目show】栏目,柴火菌跟大家分享柴火认证会员黄昊做的智能家居系统这个项目源自前段时间面向柴火认证会员开放的专属福利——优质项目兑换免费产品program(认证会员专属福利传送门:点击👉福利|做项目缺弹药?开源硬件免费领!👈),黄昊基于这个program免费申请到了这个项目所用的大部分开源套件,最终呈现了这个超级实用项目。感谢开源分享。Open source is love. 


黄昊

柴火认证会员编号:CHSZ2020002021


专业背景:电子

服务行业:创客教育  

就职企业:麦高创想家

来自山西的一名创客,MG研发电子工程师,电子爱好者


如果你想要加入👉柴火认证会员👈大家庭,享受开源硬件免费领的专属福利,欢迎跳至文末了解更多详情。




00 上教程前,看最终项目视频


项目介绍:一个智能家居系统,可以通过web软件界面或天猫精灵控制家里的灯、空调等设备。

硬件:Raspberry Pi 4B 4GB、ESP8266、Grove Arduino Beginner Kit





01 安装集成Home Assistant的树莓派系统

首先我们需要为树莓派的SD卡刷入系统,这里我选择直接集成Home Assistant的系统镜像,很方便。

下载地址:https://www.hachina.io/8408.html

下载好后用Win32DiskImager刷入SD卡。


然后启动系统,进行一些系统的初始化设置,然后连接WIFI,我们打开终端,可以看到/home/pi路径下已经有一个homeassistant文件夹了,进去后可以看到里面有很多文件,因此我们不需要手动安装了。



我们使用ifconfig命令,可以得到当前树莓派的ip地址。



通过访问这个地址加端口号8123就可以打开Home Assistant的web端页面了,比如:192.168.123.116:8123。


第一次打开需要进行一些简单的设置,注册一个账户之类的,设置完成之后同一局域网下的设备就都可以通过这个IP用浏览器访问到安装在树莓派上的Home Assistant web端控制界面了。





02 使用Home Assistant控制小米台灯


现在我们的home Assistant成功运行了,但是没有连接任何设备,因此我们无法控制,接下来我来连接一个书桌上的小米台灯,测试一下是否能够控制。


首先我们要在手机上打开yeelight的app,设置台灯可以使用LAN控制,然后在设备信息中获取台灯当前的ip地址。


然后在终端中使用nano打开/home/pi/homeassistant/configuration.yaml文件


在最下面添加下面的内容 (注意空格和冒号):

yeelight:  devices:    192.168.123.182: name: MI Light


然后通过下面的命令重启Home Assistant

sudo systemctl stop home-assistant@pisudo systemctl start home-assistant@pi


重启之后我们就可以看到主页面增加了一个控制卡片,我们便可以使用该按钮控制台灯的开关了。






03 使用Home Assistant控制ESP8266 I/O口


接下来我们如何为Home Assistant接入我们自己DIY的硬件设备呢?这里就要用到MQTT了。


MQTT(Message Queuing Telemetry Transport)协议是重要的物联网传输协议。越来越多的设备和节点,通过MQTT协议实现对外的通讯。


推荐大家去HACHINA的文档页面了解关于MQTT的知识:

https://www.hachina.io/docs/7125.html


我们的系统中内置了MQTT服务,只需要在Home Assistant的配置文件中添加两行代码即可

(注意broker冒号后需要一个空格,否则会报错)

mqtt: broker: 127.0.0.1


重启服务后,我们可以打开web端的Developer Tools的MQTT标签。


我们在Listen to a topic下方输入ha/switch1来监听这个topic,然后再Publish a packet中输入相同topic名,再Payload中输入ON后电机PUBLISH按钮,便可以看到下方的监听窗口就会出现刚刚发送的信息,证明我们的MQTT服务是OK的。



接下来我们为我们的ESP8266控制板刷入程序,来监听同一个topic(ha/switch1),并根据payload是ON或者OFF来控制I/O口的LED灯亮灭。[1]


首先我们要将代码中的SSID和password更改成我们自己的wifi名和密码,mqtt_server要设置为我们树莓派的IP地址。



上传完成后,我可以打开串口监视器,可以看到当我们发送一个ON或OFF值时,串口监视器中也会对应更新该命令,此时接在I/O口上的LED灯也会亮起或熄灭。


接下来我们为Home Assistant的主页面增加一个控制按钮,在configuration.yaml文件中添加下列内容:

switch:  - platform: mqtt state_topic: "ha/switch1"    command_topic: "ha/switch1"    payload_on: "ON" payload_off: "OFF"


重启服务后我们便可以看到首页新增了一个MQTT Switch的控制按钮。


我们可以直接用这个I/O口驱动一个继电器,来控制一些电器的开关,比如灯,或者风扇。



此时我们还来控制空调、电视等用红外遥控可以控制的设备。


使用红外接收头读取到我们空调遥控器按下开关机按钮后的对应数据,并将他们保存起来,当接收到ON的值时,我们控制红外发射头发送这段数据,空调就可以开机啦!

uint16_t OFF[101] = {5832, 7344,  514, 3426,  516, 3426,  516, 3428,  514, 3428,  518, 1374,  514, 3430,  512, 3428,  514, 3428,  518, 1374,  518, 1374,  516, 1376,  516, 1376,  518, 3424,  514, 1378,  518, 1374,  518, 1374,  520, 1372,  514, 3428,  516, 3426,  518, 3424,  518, 1374,  518, 1376,  514, 1378,  516, 3426,  518, 3424,  516, 1376,  514, 1376,  514, 1378,  516, 3426,  516, 3426,  518, 3426,  516, 1374,  514, 3428,  518, 1374,  516, 3426,  516, 1376,  516, 3426,  518, 1374,  516, 1376,  518, 1376,  518, 1374,  516, 3426,  516, 1376,  516, 3426,  518, 1374,  518, 3422,  518, 3424,  514, 3426,  516, 7196,  518};  uint16_t ON[101]= {5832, 7322, 540, 3426, 516, 3426, 510, 3430, 518, 3426, 516, 1376, 516, 3426, 516, 1376, 514, 1380, 516, 1374, 516, 1376, 516, 1376, 514, 1376, 514, 3428, 516, 1378, 512, 3430, 516, 3424, 518, 1376, 514, 3428, 518, 3424, 516, 1378, 516, 1374, 512, 3428, 518, 3424, 516, 1378, 514, 3426, 514, 1378, 518, 1374, 514, 3426, 518, 3424, 514, 1376, 516, 1378, 514, 3426, 518, 3424, 518, 1374, 516, 3428, 514, 1378, 516, 3424, 516, 1378, 516, 1376, 516, 1376, 518, 1374, 516, 3426, 516, 1376, 516, 3426, 516, 1376, 516, 3424, 516, 3426, 518, 3426, 516, 7194, 518};


我们还可以使用DHT11来读取屋内环境温度/湿度,并且将数据返回到Home Assistant的页面上。当温度超过一定值时,自动打开空调。


 


04 使用语音助手控制Home Assistant设备


我们可以使用天猫精灵控制home assistant上的设备,比如说:天猫精灵,开灯


在customize.yaml里,为想添加到天猫精灵的设备加入一个friendly name,并在下加入一条 tmall_genie: true。


然后参考hassbian这篇文章《论坛新版天猫精灵接入技能正式发布!》(文末点击“阅读原文”即可前往),在天猫精灵app中添加该智能硬件,这样就可以实现语音控制了!


本文章内由 黄昊 && 伍树合作完成  :p


[1] ESP8266控制空调开关机程序:

#include <ESP8266WiFi.h>#include <PubSubClient.h>#include <Arduino.h>#include <IRremoteESP8266.h>#include <IRsend.h> //irconst uint16_t kIrLed = 4; // ESP8266 GPIO pin to use. Recommended: 4 (D2). IRsend irsend(kIrLed); // Set the GPIO to be used to sending the message.uint16_t OFF[101] = {5832, 7344, 514, 3426, 516, 3426, 516, 3428, 514, 3428, 518, 1374, 514, 3430, 512, 3428, 514, 3428, 518, 1374, 518, 1374, 516, 1376, 516, 1376, 518, 3424, 514, 1378, 518, 1374, 518, 1374, 520, 1372, 514, 3428, 516, 3426, 518, 3424, 518, 1374, 518, 1376, 514, 1378, 516, 3426, 518, 3424, 516, 1376, 514, 1376, 514, 1378, 516, 3426, 516, 3426, 518, 3426, 516, 1374, 514, 3428, 518, 1374, 516, 3426, 516, 1376, 516, 3426, 518, 1374, 516, 1376, 518, 1376, 518, 1374, 516, 3426, 516, 1376, 516, 3426, 518, 1374, 518, 3422, 518, 3424, 514, 3426, 516, 7196, 518}; // UNKNOWN FB60AF8Duint16_t ON[101]= {5832, 7322, 540, 3426, 516, 3426, 510, 3430, 518, 3426, 516, 1376, 516, 3426, 516, 1376, 514, 1380, 516, 1374, 516, 1376, 516, 1376, 514, 1376, 514, 3428, 516, 1378, 512, 3430, 516, 3424, 518, 1376, 514, 3428, 518, 3424, 516, 1378, 516, 1374, 512, 3428, 518, 3424, 516, 1378, 514, 3426, 514, 1378, 518, 1374, 514, 3426, 518, 3424, 514, 1376, 516, 1378, 514, 3426, 518, 3424, 518, 1374, 516, 3428, 514, 1378, 516, 3424, 516, 1378, 516, 1376, 516, 1376, 518, 1374, 516, 3426, 516, 1376, 516, 3426, 516, 1376, 516, 3424, 516, 3426, 518, 3426, 516, 7194, 518}; // UNKNOWN 4C3D7CCD // Update these with values suitable for your network.const char* ssid = "xxx";const char* password = "xxx";const char* mqtt_server = "xxx";//youe raspberry pi ip address WiFiClient espClient;PubSubClient client(espClient);int SwitchedPin = 0;String switch1;String strTopic;String strPayload; void setup_wifi() { Serial.begin(115200); irsend.begin(); delay(100); // We start by connecting to a WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP());} void callback(char* topic, byte* payload, unsigned int length) { payload[length] = '\0'; strTopic = String((char*)topic); if(strTopic == "ha/switch1") { switch1 = String((char*)payload); if(switch1 == "ON") { Serial.println("ON"); digitalWrite(SwitchedPin, HIGH); irsend.sendRaw(ON, 101, 38); // Send a raw data capture at 38kHz. Serial.println("ON"); } else { Serial.println("OFF"); digitalWrite(SwitchedPin, LOW); irsend.sendRaw(OFF, 101, 38); // Send a raw data capture at 38kHz. Serial.println("OFF"); } }} void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect("arduinoClient")) { Serial.println("connected"); // Once connected, publish an announcement... client.subscribe("ha/#"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } }} void setup(){ setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); pinMode(SwitchedPin, OUTPUT); digitalWrite(SwitchedPin, LOW);} void loop(){ if (!client.connected()) { reconnect(); } client.loop();}

 

[2] Home Assistant configuration.yaml 完整文件:

mqtt: broker: 127.0.0.1 switch: - platform: mqtt state_topic: "ha/switch1" command_topic: "ha/switch1" payload_on: "ON" payload_off: "OFF" tts: - platform: google_translate language: 'zh-cn' media_player: - platform: vlc yeelight: devices: 192.168.123.182: name: MI Light  tunnel2local: # frpc命令位置 frpc_bin: "/home/pi/bin/frpc"  group: !include groups.yamlautomation: !include automations.yamlscript: !include scripts.yaml






🤖️🤖️🤖️

没错!成为柴火认证会员就可以享受柴火定期宣传曝光、免费产品试用、技术干货持续学习、专属社群交流等一大波福利。👉 柴火在册的认证会员名录,点击查看认证会员有谁?👈


现在,你可能会问,如何成为柴火认证会员?申请成为柴火认证会员,目前有两条渠道:




🤖️🤖️🤖️

新一代信息技术赋能|人才升级|产业创新

硬件入门|物联网应用实战|社区联名


  

  

✨点击图片获取课程详情


「项目实战入门FPGA 」首期班,8月29-30日(周末),超多工程实战练习,学习FPGA的捷径

「 物联网应用实战 」第二期,9月17-18日(周四、五),在项目实战中系统学习物联网技术

「 硬件入门 」第六期,10月17-18日(周末),get到硬件原型搭建多项跨界技能

「Arduino官方认证 」,210元即可参与线上考试,拿国际认证证书





  

  

✨点击图片获取合作详情


“众人拾柴火焰高”

与柴火一起将新一代信息技术赋能培训体系落到全国

首批官方合作机构开放招募,限定5家


只要贵机构是:

❶科技创新运营类机构

(创客空间/Fab Lab/产业园/孵化器/众创空间)

❷软件培训机构高校双创学院高校软件学院


即可扫码申请成为

柴火新一代信息技术赋能培训官方合作机构

赋能人才升级,柴火邀你同行

(8月31日截止报名,招满即止)



将Arduino官方认证考试带到全国各地

柴火Arduino官方认证考试合作机构开放招募


只要贵机构是:Arduino培训机构/高校考务中心/Arduino玩家俱乐部/社团/圈子发起方

即可扫码申请



(持续招募)






----END----

  Chaihuo x.factory|深圳,河北  


在看和赞,都点这里
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存