概要

本文主要根据笔者从零开始接触硬件,以小白视角开启IoT探索,根据相关资料DIY一个温湿度传感器。后经过探索发现新大陆——Home Assistant&Homebridge,最终实现了一个智能家居设备从数据采集到控制、展示。

整体结构图

  • 智能设备:温湿度传感器
  • 主控芯片:STM32F103C8T6
  • 通信协议:Zigbee
  • 智能网关:树莓派
  • 数据存储、展示、设备控制:HomeAssistant + Home Kit

效果图

传感器效果图

Home Assistant效果图

Home Kit效果图

启程

在大学时代时,宿舍有两个路由器TP-LINK路由器,尝试刷openwrt/dd-wrt,各种折腾,买了编程烧录器、FLASH芯片等,拆机焊接等,尝试用电烙铁拆解芯片(不该轻易尝试),搞坏了一个路由器。由此也开启对硬件的兴趣,看目前IoT备受大家关注与追捧,自己也想跃跃欲试——DIY智能家居。

2017年七月份,开始了解各种物联网设备、协议,纠结WiFi还是Zigbee?了解ESP8266,CC2530,JN5168等芯片。

最开始想着做个简单的,正好百宝箱中有一只DHT11,于是先做个温湿度设备。

温湿度传感器应该是功耗小的,如果用WiFi就必须使用电源,如果每个房间一个,墙上基本插座肯定不够,即不美观也不现实。

所以聚焦Zigbee, 于是在网上买了一套开发学习板,200+,买回来后才发现没时间搞,除了用串口测试玩了一下,一直在被搁置了。

花了近一周的时间在网上搜索Zigbee相关资料及产品,由于目前大多数Zigbee产品通信协议各厂商都各自实现,且不是完全开源,所以学习成本较大,Zigbee 3.0可能改善这一局面,不过目前网上资料甚少。为了实现上述DIY智能家居的目标,我选择暂时放下这个大骨头,选择一款支持透传的Zigbee板子DL-20, 串口转Zigbee透传。

无线传输问题解决了,下来就是如何驱动DHT11获取数据,购买Zigbee设备时,看资料这个模块应该是MCU,就是经常听到的单片机,正好家里百宝箱里有STM8和STM32(大学买的,一直被搁置,没时间搞,也不知道该怎么玩),于是网上查阅资料,发现STM8资料比STM32要少很多,看了STM32F103C8T6核心板也就10块钱左右,于是选择STM32,一方面价格能接受,配置也比STM8高些,容易入门上手。

突破STM32

刚开始在网上找STM32资料,发现有驱动DHT11的源代码,但是程序结构根本无法看懂。

另外,搭建了IAR开发环境,发现将源码粘贴进去,根本编译不过;网上也没有详细的STM32F103配置资料。

周末,去图书馆翻遍STM32相关书籍,找到了一本非常适合突击,实战入门的资料书籍《疯狂STM32实战讲学录》,作者欧阳骏,李英芬,王小强等。

花了大概5小时,熟悉了前七章的内容,主要有基本LED灯实验(说明库函数),GPIO入门之道(基本IO操作),中断(程序流程、通信),时钟,UART(串口)等知识点。

回家之后,发现STM32驱动DHT11程序能看懂了,但是开发环境中编译还是报错,从ST官网下载的固件库也不知道如何使用。

无意间,搜索到“51自学网”的STM32教程,该网站讲解的课程都很基础,很适合零基础,于是看了STM32开发环境搭建相关教程,于是自己动手实现了第一个LED灯。

按照教程又温故了时钟中断等知识点,实现了定时休眠功能,接着结合教程,DHT11说明文档,实现了读取温湿度数据。但是读取的数据没法显示,于是看了串口通信相关教程,实现了基本的串口通信,将读取的数据通过串口发送至电脑。

上述过程相关技术教程见《STM32F103X 开发环境搭建》、《STM32获取DHT11温度传感器数据

尝试IoT云平台

串口读取到DHT11数据后,开始尝试将数据上传云平台保存,选择阿里云IoT套件,熟悉了MQTT协议,按照官方文档获取HTTPS授权,并将数据通过MQTT协议推送到云端,转储到表格存储中,接下来想着搭建一个WEB服务,绘制温湿度曲线图。

接入阿里云物联网套件相关教程见《智能家居——阿里云物联网套件体验

发现新大陆--Home Assistant

准备搭建Web服务器时,查阅网上相关资料,无意间发下了新大陆,Home Assistant,太符合我的需求。

官网:https://home-assistant.io/

安装教程可参考:https://zhuanlan.zhihu.com/p/28011522

国内论坛:https://bbs.hassbian.com/forum.php

智能家居控制展示图



(图片引用自Home Assistant官方文档

总结

回看整个入门历程,发现IoT设备用户体验,能耗等细节至关重要,同时也是约束。

能耗

简单理解就是,要能耗低,那么设备一定要简单,简单的设备开发涉及硬件知识很多,对于软件工程师来说门槛较高。

另一个就是通信协议,WiFi可以说是入门首选,但是其能耗较大决定了其不能成为家庭小型传感器所用。

这方面小米一直做的不错,对于有源设备,比如智能排插等使用WiFi,同时推出Zigbee智能网关,温湿度、门窗感应设备使用Zigbee通信,而NXP公司的JN516X系列能耗与CC2530相比,又改善很多。所以网上查询小米设备的拆解资料可以看到,温湿度传感器等采用纽扣电池供电。

随着Zigbee 3.0的来临,相信智能家居小型传感器的网络通信还是非Zigbee莫属。

ESP8266所带来的价格优势,也让很多热爱IoT的Geek投入,使得WiFi也占一席之地。

用户体验

目前各大厂商都在建立自己的生态圈,家里买各种设备需要安装不同的APP,用户体验较差,而有一群人,热衷Home Assistant这个开源平台,投身在将各种设备适配到该平台。

如果国内某个厂商能够进入开源社区,支持Home Assistant,那便是另一番景象,让我们共同期待。

DIY智能家居——零基础入门篇的更多相关文章

  1. Linux及Arm-Linux程序开发笔记(零基础入门篇)

    Linux及Arm-Linux程序开发笔记(零基础入门篇)  作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/bee ...

  2. 【Linux开发】Linux及Arm-Linux程序开发笔记(零基础入门篇)

    Linux及Arm-Linux程序开发笔记(零基础入门篇) 作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer ...

  3. .NET ORM 的 “SOD蜜”--零基础入门篇

    PDF.NET SOD框架不仅仅是一个ORM,但是它的ORM功能是独具特色的,我在博客中已经多次介绍,但都是原理性的,可能不少初学的朋友还是觉得复杂,其实,SOD的ORM是很简单的.下面我们就采用流行 ...

  4. Linux从入门到放弃、零基础入门Linux(第四篇):在虚拟机vmware中安装centos7.7

    如果是新手,建议安装带图形化界面的centos,这里以安装centos7.7的64位为例 一.下载系统镜像 镜像文件下载链接https://wiki.centos.org/Download 阿里云官网 ...

  5. Linux从入门到放弃、零基础入门Linux(第三篇):在虚拟机vmware中安装linux(二)超详细手把手教你安装centos6分步图解

    一.继续在vmware中安装centos6.9 本次安装是进行最小化安装,即没有图形化界面的安装,如果是新手,建议安装带图形化界面的centos, 具体参考Linux从入门到放弃.零基础入门Linux ...

  6. Cloudera Manager、CDH零基础入门、线路指导 http://www.aboutyun.com/thread-9219-1-1.html (出处: about云开发)

    Cloudera Manager.CDH零基础入门.线路指导http://www.aboutyun.com/thread-9219-1-1.html(出处: about云开发) 问题导读:1.什么是c ...

  7. 【JAVA零基础入门系列】Day4 变量与常量

    这一篇主要讲解Java中的变量,什么是变量,变量的作用以及如何声明,使用变量. 那么什么是变量?对于初学者而言,可以将变量理解为盒子,这些盒子可以用来存放数据,不同类型的数据需要放在对应类型的盒子里. ...

  8. 【JAVA零基础入门系列】Day5 Java中的运算符

    运算符,顾名思义就是用于运算的符号,比如最简单的+-*/,这些运算符可以用来进行数学运算,举个最简单的栗子: 已知长方形的长为3cm,高为4cm,求长方形的面积. 好,我们先新建一个项目,命名为Rec ...

  9. 【JAVA零基础入门系列】Day6 Java字符串

    字符串,是我们最常用的类型,每个用双引号来表示的串都是一个字符串.Java中的字符串是一个预定义的类,跟C++ 一样叫String,而不是Char数组.至于什么叫做类,暂时不做过多介绍,在之后的篇章中 ...

随机推荐

  1. [2017-08-07]ABP系列——QuickStartA:概述、思想、入门和HelloWorld

    唔,说好的文章,欠了好久,先水一篇. 本系列目录:Abp介绍和经验分享-目录 概述 先表个态:对绝大多数人来说,ABP是成熟的,足以用到生产环境的. 最适合的:业务非常复杂且不追求极致性能的(这里并不 ...

  2. 网络唤醒原理浅析(Wake On LAN)

    之前我的一篇文章<网络唤醒全攻略(Wake On Lan)>介绍过如何设置远程唤醒电脑,着重于使用,这篇主要从原理方面解析一下当中的奥妙: 原理 将唤醒魔术包发送的被唤醒机器的网卡上,魔术 ...

  3. 容器在 Weave 中如何通信和隔离?- 每天5分钟玩转 Docker 容器技术(65)

    上一节我们分析了 Weave 的网络结构,今天讨论 Weave 的连通和隔离特性. 首先在host2 执行如下命令: weave launch 192.168.56.104 这里必须指定 host1 ...

  4. Ubuntu部署可视化爬虫Portia2.0环境

    部署portia环境官方文档给出的方法太过简单,对于初学者来说是很难根据那一两行字成功部署portia环境的.对于部署portia这只可爱的爬虫的过程还是有很多坑的,主要写一篇portia2.0版本的 ...

  5. stylus选中hover元素的兄弟元素下的子元素

    stylus设置兄弟元素样式:鼠标浮动在 .video-li 元素上时,.video-li 兄弟中 .video-info 下的 .word 显示. .video-li &:hover ~ . ...

  6. Maven(二)Maven项目的创建(命令、myeclipse)及生命周期

    上一篇给大家介绍了Maven的概念和仓库的一些信息,接下来给大家分享一下使用命令和MyEclipse创建Maven项目 一.使用命令管理Maven项目 1.1.创建Maven java项目 1)创建一 ...

  7. 关于JS正则——你知道多少?

    正则表达式 1. 使用正则 创建正则表达式有两种方式,一种是以字面量方式创建,另一种是使用RegExp构造函数来创建. var expression = / pattern / flags; var ...

  8. 前端js优化方案(连续更新)

    最近在读<高性能javascript>,在这里记录一下读后的一些感受,顺便加上自己的一些理解,如果有兴趣的话可以关注的我的博客http://www.bloggeng.com/,我会不定期发 ...

  9. 【1414软工助教】团队作业4——第一次项目冲刺(Alpha版本) 得分榜

    题目 团队作业4--第一次项目冲刺(Alpha版本) 作业提交情况情况 所有团队都在规定时间内完成了七次冲刺. 往期成绩 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目 ...

  10. 201521123107 《Java程序设计》第5周学习总结

    第5周作业-继承.多态.抽象类与接口 1.本周学习总结 2.书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改 ...