不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我
借助开源硬件树莓派Raspberry Pi,我们可以设计和实现出属于自己的智能家居系统。随时随地在手机上远程控制家里的空调、灯等电器的开关,也是一件蛮有成就感的事。今日分享的项目为张同学(知乎:zyziszy)构建的一个简单的智能家居系统:使用树莓派3B+做web服务器,通过访问网页远程控制空调等家电。简单来说,这个小项目可以在回家的路上用手机通过网页控制,提前将空调打开,设定成需要的温度。同时可以在网页上实时监控室内的温度和湿度。1)在树莓派上安装 Linux 操作系统和部署相应的软件环境,并将它连接上互联网。
4)Python-Flask 框架编写一个简单的网站运行在树莓派上。为了能在公网下也能访问这个网页,使用了一个具有公网 IP 的云服务器做转发。5)当服务器接收到来自网页不同的请求时,树莓派根据事先编写好的代码发射对应指令的红外信号控制空调,或者检测温湿度,并又反馈到网页上。树莓派操作系统安装:
树莓派不仅仅是一台没有显示器的小电脑,而是一个稳定、可靠、低功耗的小Linux server。考虑到这个项目用不到树莓派的图形界面,因此选择直接安装 Raspbian StretchLite操作系统。这样可以省去图形界面GUI,从而降低功耗,减少内存占用。
如果有一定的使用Linux基础,给树莓派装操作系统并非难事。当然,网络上也有很多关于如何安装操作系统和磁盘分区的教程和博客可以参考。关键在于。如果没有网线的话,需要在boot分区中手动添加两个文件:wpa_supplicant.conf文件:配置自己WIFI信息,使树莓派开机自动无线连接WiFi。这样才可以在WiFi下的局域网内无线远程SSH连接树莓派。树莓派电路连接图(使用充电宝进行供电,多焊接了一个led灯,也可以通过网页来控制它的开和关)红外线遥控,利用波长为 0.76~1.5um 之间的近红外线来传送控制信号。红外遥控系统一般由红外发射装置和红外接收设备两大部分组成——红外发射装置又可由键盘电路、红外编码芯片、电源和红外发射电路组成。红外接收设备可由红外接收电路、红外解码芯片、电源和应用电路组成。传输方式,为了使信号更好的被发射端发送出去,经常会将二进制数据信号调制成为脉冲信号,通过红外发射管发射。为了提高抗干扰性能和降低电源消耗,红外遥控器常用载波的方式传送二进制编码,常用的载波频率为38kHz。所以,通常的红外遥控器是将遥控信号(二进制脉冲码)调制在 38KHz 的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去的。红外遥控接收模块会将遥控发射器发来的红外光信号转换成电信号,再放大、限幅、检波、整形,形成遥控指令脉冲,输出至遥控微处理器。空调红外信号的编码方式,二进制脉冲码的形式有多种,其中最为常用的是PWM 码(脉冲宽度调制码)和 PPM 码(脉冲位置调制码,脉冲串之间的时间间隔来实现信号调制)。如果要开发红外接收设备,一定要知道红外遥控器的编码方式和载波频率,我们才可以选取一体化红外接收头和制定解码方案。数据格式包括了引导码、用户码、数据码和数据码反码,编码总占 32位。数据反码是数据码反相后的编码,编码时可用于对数据的纠错。注意:第二段的用户码也可以在遥控应用电路中被设置成第一段用户码的反码。红外遥控器上每个键都有对应的红外编码,按下不同的键可以发射不同的红外信号,可以选取其中开关键、+、-等键对应红外信号加以运用 —— 假设带有“开关”命令的红外信号叫KEY_OPENOFF,“调高温度”命令的红外信号叫KEY_UP,“调低温度”命令的红外信号叫 KEY_DOWN。空调根据接收到的不同红外信号,执行不同操作。比如接收到KEY_OPENOFF,空调就开启并且设置温度为 26 度。
接下来就考虑如何让树莓派能够发射对应指令的红外信号。比如网页客户端发送来了“打开空调”的请求,树莓派上的红外发射装置就需要发射红外信号 KEY_OPENOFF —— 在树莓派系统内安装配置LIRC 软件,这个软件可以将一段红外信号录制并存储下来。比如只要按下遥控器“开关”键,树莓派就可以将 KEY_OPENOFF 中的脉冲信号保存下来储存在一个键值里,方便以后调用,如果树莓派接收到了客户端的“开关”请求,只要调用这个键值,就可以发送红外信号 KEY_OPENOFF。使用型号为 AM2321 的温湿度传感器,采用 I2C 总线传输协议。I2C协议把传输的消息分为两种类型的帧: 一个地址帧,用于 master 指明消息发往哪个slave; 一个或多个数据帧,由 master 发往 slave 的数据(或由 slave 发往 master),每一帧是 8-bit 的数据。协议要求每次放到 SDA 上的字节长度必须为 8 位,并且每个字节后须跟一个 ACK 位。数据在 SCL 处于低电平时放到 SDA 上,并在 SCL 变为高电平后进行采样。读写数据和 SCL 上升沿之间的时间间隔是由总线上的设备自己定义的,不同芯片可能有差异。温度信息和湿度信息各占 2 个字节(分辨率是 16bit)。温度信息最高位(Bit15)等于 1 表示负温度,温度最高位(Bit15)等于 0 表示正温度;温度除了最高位(Bit14~Bit0)表示传感器传出的温度值。传感器传出的温度值是实际温度值的 10倍。湿度信息 16 位(Bit15~Bit0)共同表示传感器串出的湿度值。传感器传出的湿度值是实际湿度值的 10 倍。将 AM2321 与树莓派对应管脚连接。通过数据线 SDA 和时钟线 SCL两线共同完成I2C 总线的位传输:由主机发送通讯命令给传感器,传感器开始接收,并根据功能码及相关要求读取信息;然后把执行结果(数据)返送给主机。返回的信息中包括功能码、执行后的数据以及 CRC 校验码。③ 发光二极管的控制:在网页上控制发光二极管的开和关
Python-Flask 框架与方案设计 ,Flask 是一个使用 Python 编写的轻量级 Web 应用框架,默认模板引擎是 Jinja2。我们使用 Flask 开发了一个简单的 CS 架构的 Web 网页应用用于这个系统的控制。为了实现 Web 网页对空调等家电的远程控制,我们需要对树莓派单片机进行联网。但目前大部分的网络连接方式都是通过三大运营商对设备分配动态 IP 后连接互联网,因此我们需要将单片机联网后进行 NAT(网络地址转换),使用一个具有公网固定 IP 的服务器,对单片机进行内网穿透,从而使他能在连接能在校园网的情况下被任何设备所访问。内网穿透 NAT(网络地址转换) ,NAT 英文全称是“NetworkAddress Translation”,中文意思是“网络地址转换”,顾名思义,它是一种把内部私有网络地址(IP 地址)翻译成合法网络 IP 地址的技术。NAT 可以让那些使用私有地址的内部网络连接到 Internet 或其它 IP 网络上。NAT 路由器在将内部网络的数据包发送到公用网络时,在 IP 包的报头把私有地址转换成合法的 IP 地址。简单来说,NAT 就是实现一个整体机构以一个公用 IP。
项目采用在GitHub上开源的FRP(一个可用于内网穿透的高性能的反向代理应用)。借助FRP,就可以顺利的在公网下随时随地访问部署在树莓派上的网页。FRP链接:github.com/fatedier/frp。
项目的源码可在“达尔闻说”微信号回复:树莓派项目,获取。文件说明:net_setting文件夹——用于存放内网穿透的设置文件;web_interface——用于存放Python写的flask工程。树莓派读取温湿度,及红外通信模块的代码,由于用的器件不一样,这里就不放了。如对树莓派项目有疑问,或者想和张同学一起交流,可以加入达尔闻技术交流群,加群方式:添加妮姐微信——459888529,备注:技术交流。