智能家居系统模型设计2.0
智能家居系统模型设计
- 引言
- 设计思路
- 硬件设计
- 硬件选型原则
- 硬件选型
- PCB设计
- 软件设计
- 头文件
- 主函数
- 硬件初始化
- 云平台选择
- 结果展示
- 实物图与手机界面
- 云平台数据可视化界面
- 云平台控制界面
- 实现功能及扩展
- 实现功能
- 可扩展功能
- 总结
引言
伴随着通信技术的不断发展和社会环境的进步,人们对更智能化的生活有了更高的追求。物联网智能家居已经不能算是新鲜的名词了,其单品及互联应用也都已经非常广泛了。本设计基于STM32单片机,通过ESP8266无线通信模块以及连接相应的传感器及外设对智能家居的场景进行模拟。本文最初写于今年6月,现在从事嵌入式工作一段时间后现在再次将我的毕业设计重新进行整理和思考,希望能对读者有所帮助!
设计思路
对于任何一个项目或者工程的开始第一步永远是先明确需求,知道自己做成什么样子的东西。在我参考了一些资料并阅读了几篇文献后,对其有了初认识。我理解的智能家居就是从感知层出发对环境进行监测,通过传输层遵从一定的网络协议对数据进行传输同时通过软件对数据进行整理分析,并在应用层(家具状态)做出相应的动作。最终我将该流程整理成下图所示的实物模拟,进而对其进行模块的抽象。基于此,进行下面的硬件设计选型及软件实现等等。
硬件设计
硬件选型原则
由于该项目是模型设计,对于硬件的选型整体上是以低成本、低功耗、高集成、高仿真度为原则的。
- 满足功能及性能需求。本设计的侧重点不在于数据的精确和控制的灵敏,故没有严格参数要求。
- 易上手的“大众”产品。对于这些元件我们可以很容易的找到相关资料,而且避免踩坑。
- 兼容性。由于是模块化设计,对于部分模块的兼容性是要有一定的要求的。
硬件选型
如下是对于硬件的选型及相关介绍,最后附有一张所有用到的硬件的图片。
1. 主控模块----STM32F103C8T6
我相信51应该是大部分电子同学入手的第一款单片机。诚然,51有其灵活轻巧之处,但是stm32具有强大外设接口和较高的运行速度(STM32F103的CPU最高速度达72 MHz,具有16KB ~ 1MB Flash、多种控制外设、USB全速接口和CAN;多达112个快速I/O口、11个定时器和13个通信接口) 此外STM32还提供了三种省电模式和两种调试方式。其灵活的调试方法、多样的功能特点和较优的性能参数同样也是选择STM32作为主控芯片的原因。
2. 无线通信模块----ESP01S无线通信模块
基于此模块首先考虑的是通信方式,如果不谈应用场景,比较传输速度、传输距离和安全性,zigbee和蓝牙会是更好的选择。但是在智能家居的场景下,wifi无疑会是更优选,因为当下wifi已经基本普及到了每个家庭,模拟还原度会更高。接下来是具体芯片的选择,安信可的ESP8266模组很多都可以在该场景下应用,其具体的区分主要体现在封装方式、硬件配置、资源引脚等等方面。具体的区分可以参考安信可官网给出的文档说明,please click!
3. 环境监测模块
温湿度监测----DHT11
DHT11是一款有已校准数字信号输出的温湿度传感器。此传感器使用起来简单,精度和性能参数足够满足环境监测的场景。其遵从单总线协议,有严格的时序要求。主机先要发送一个至少18ms的低电平,在这个过程中,DHT11内部完成AD转换等操作,当主机拉高后,有20-40us时间,这个时间用于主机做输入输出切换,当主机释放总线控制权(此时主机为输入状态,总线被上拉电阻拉高),DHT11尝试将总线拉低,成功拉低后就开始准备发送数据了,再拉高一次就开始传输数据了。
空气质量监测----MQ135
MQ系列传感器是监测空气环境最常用的传感器,大概十几个都是针对不同污染物进行检测的,本次实验我们采用的是MQ135,主要针对氨气、苯、酒精、烟雾颗粒进行空气质量检测,同样根据自己的需求可以选择其他型号的传感器吧,比如烟雾、酒精、一氧化碳等等。
光照监测----BH1750
BH1750传感器有接近视觉灵敏度的光谱灵敏度特性,它支持I2CBUS接口,支持1.8v逻辑输入接口。传感器有两种可选的I2Cslave地址,无需其他外部件。光源依赖性弱,受红外线影响很小。传感器通过降低功率功能,实现低电流化。
4. 数据展示模块----OLED
数据显示无非就是OLED、LCD、TFT屏幕等等。该模块的作用是对监测到的环境数据及家具的状态进行实时显示。OLED相较于LCD屏幕则不需要背光层,同样也不需要发出光亮的液晶层;而相较于TFT有更高的性价比,最终选择了0.96寸OLED屏幕。
5. 家具模拟模块
家具模拟模块主要是模拟到了门、窗、灯和风扇。具体是通过步进电机、舵机、LED灯和风扇模块实现的。而应用也很简单,配置IO口的工作模式,控制GPIO口输出的高低电平即可。
PCB设计
对于以上众多元件和模块,如果用导线直接连接起来的话,我只能想到一个词形容:一团乱麻!因此设计PCB板就成了解决该问题的最好方法。可能有的同学在大学期间学习过如何画板打板,有些同学没有接触过,以我自己的经验来讲,学习一两周时间对于绘制该项目PCB已经绰绰有余。该项目并不需要在板子上有各个电路的设计(有能力的同学可以设计一个电源电路),因此只需要布局布线即可还是比较简单的,以下是我所设计的板子 。
该部分的设计让自己对于整个硬件资源的了解及使用有一个新的认识。在主控芯片有限的硬件资源、有限空间的电路板上,如何能充分利用每个元件的形状大小和性能特点来做到彼此之间的交互是该部分的重难点。
Tips:阅读每根pin的功能,分配好主控芯片的各个管脚资源
软件设计
整个代码工程内容相对较大,在此就不进行详细的展示了如果有需要可以私信我。在此只展示部分主函数代码和相关头文件等,除此之外,数据上云格式定义、命令下发、各个模块的驱动函数同样重要!
头文件
#include "stm32f10x.h"
#include "stdio.h"
#include "math.h"
#include "delay.h"
#include "string.h"
#include "dht11.h"
#include "BH1750.h"
#include "adc.h"
#include "led.h"
#include "OLED_I2C.h"
#include "usart.h"
#include "timer.h"
#include "exti.h"
#include "key.h"
#include "door_bsp.h"
#include "fan.h"
#include "esp8266.h"
#include "MqttKit.h"
#include "onenet.h"
主函数
typedef struct{ //定义结构体uint8_t temp; //温度uint8_t humi; //湿度float mq; //MQ135传感器float sun; //光照强度传感器uint8_t LED_FLAG; //LEDuint8_t FAN_FLAG; //风扇uint8_t DOOR_FLAG; //步进电机uint8_t WARNING_FLAG; //步进电机
}SendData;extern SendData send_data;
extern uint8_t cmd_rev_flag;
SendData send_data = {0, 0, 0.0, 0.0, 0 , 0 , 0 ,0}; //初始化
uint8_t cmd_rev_flag = 0;int main(void)
{unsigned char *data_ptr = NULL;unsigned short timeCount = 0; //发送间隔变量Hardware_Init();Net_Init();while(1){ if(++timeCount >= 200 || (cmd_rev_flag == 1))
{ DHT11_Read_Data(&send_data.temp,&send_data.humi);send_data.mq=(float)(Get_Adc_Average(ADC_Channel_1,10))*(3.3/4096); send_data.sun = LIght_Intensity(); OneNet_SendData(); //发送数据timeCount = 0;cmd_rev_flag=0;ESP8266_Clear();}data_ptr = ESP8266_GetIPD(0); //检查是否有下发指定if(data_ptr != NULL)OneNet_RevPro(data_ptr);delay_ms(10);}
}
硬件初始化
void Hardware_Init(void)
{delay_init(); //延时函数初始化TIM2_Int_Init(4999,7199); //用于OLED显示Usart1_Init(115200); //串口调试Usart2_Init(115200); //esp8266--stm32通信OLED_Init(); //OLED初始化OLED_CLS();KEY_Init(); //按键初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组2,为后面外部中断做基础EXTIX_Init(); //判断键值执行操作DHT11_Init(); //温湿度传感器初始化Adc_Init(); //空气检测初始化BH1750_Init(); //光照TIM3_Int_Init(4999,7199); //报警显示ESP8266_Init(); //初始化ESP8266while(OneNet_DevLink()) //接入OneNETdelay_ms(500);
}
云平台选择
本设计还有一个重要的部分就是对于云平台的选择,本项目选择的是中国移动物联网云平台OneNET。当然,如果有能力的同学自己做个app更好。
目前很多云平台厂商都支持了对于个人开发者的物联网应用的需求,我见到用到最多的包括阿里云、腾讯云、机智云、OneNET等等。这些平台对对于个人开发者还是很有好的,有着比较完善的流程。我个人使用过机智云和OneNET,对此做出以下建议。
- OneNET:更适合已有工程文件,在此基础之上进行通信部分的开发。其对于最终的界面设计很开放,可以自行设计图标及显示方式等;
- 机智云:适合没有工程文件,从刚开始就选择使用该物联网云平台。可以在平台上生成代码包进行开发;
结果展示
实物图与手机界面
云平台数据可视化界面
云平台控制界面
实现功能及扩展
实现功能
监测:空气中温度、湿度、光照和空气质量等环境因素;
控制:模拟的“家居”:门、灯、窗帘、风扇;
显示:OLED显示、手机显示、电脑显示;
控制方式:按键控制、手机控制、电脑控制;
报警:设置环境因素阈值,超标开发板的灯亮起(可改成蜂鸣器)
以上所有环境及家具状态都可以可视化显示
可扩展功能
该系统具有很高的扩展性,做出基础模型之后可以进行二次开发。需要注意的是将硬件资源分配好。
- 语音模块。语音控制智能家居的状态。
- 安防系统。添加指纹、RFID、面部识别等开门方式。
- 告警系统。目前只是遇到告警平台自动提醒,可以添加短信通知功能。
- 模式选择。居家多种模式自动切换,娱乐模式、休息模式、离家模式等等,家具可以对应着不同状态。
- ……
总结
本设计对于智能家居控制系统的模拟从传统到智能、从前端到后端,覆盖面、还原度还是比较高的;其次,系统的兼容性和可扩展移植性较高,基于此可以进行二次开发,可以扩展的内容我在上面也有总结。我认为相对容易上手的就是对于监测到的数据进行进一步分析应用。最后就是其应用性,当自己设计好电源模块可以独立供电后就可以直接应用到生活中,即使不做毕设diy一个环境监测的系统也是不错的。整体来说,本设计实现的功能是:四测三显两控一平台,基本实现了智能家居模拟的基本的要求。同样该项目还可以应用到环境监测等方面的,但是其侧重点更要偏向数据的分析和处理。
行文至此就结束啦,如果有不足之处或者更好的想法可以一起交流 ~
智能家居系统模型设计2.0相关推荐
- 西蒙电气全新智能家居系统全球首发
西蒙电气全新力作"Simon-Smart系列智能家居系统"引领时下潮流正式全球首发,以更安全.更便捷.更舒适.更聪明的智能系统,带来非凡智慧体验,跨越桎梏,开启未来生活. Simo ...
- 基于51单片机和物联网的智能家居系统(ESP8266物联网模块)
前言 该智能家居系统以 STC89C52单片机为控制核心,结合 LCD1602 液晶显示屏.L298N电机驱动模块.光敏电阻,ESP8266WiFi模块,DS18B20温度计设计并实现了自动感光窗帘与 ...
- 基于Domoticz智能家居系统(十三)Domoticz-3.8153在Tiny6410开发板上的移植
Domoticz-3.8153在Tiny6410开发板上的移植 本文将在友善之臂Tiny6410开发板上移植Domoticz-3.8153,起因是去年在mini2440上移植的3.5877版本编译出来 ...
- 基于Domoticz智能家居系统(十七)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(三)一个简单MySensors客户端的验证实验
DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(三)一个简单MySensors客户端的验证实验 一个简单MySensors客户端的验证实验 一. ...
- 树莓派安装开源智能家居系统 Domoticz
前言 最近闲来无事开始折腾自己的智能家居系统,对比了几种比较流行的开源智能家居系统,觉得 Domoticz 更适合,Domoticz的官方中文文档,虽然不是很完善但还是可以参考一下.需要注意的是下文用 ...
- 基于Domoticz智能家居系统(十四)用ESP8266做MQTT客户端实验
基于Domoticz智能家居系统(十四)用ESP8266做MQTT客户端实验 用ESP8266做MQTT客户端 一些前期的准备 第一步 设置ESP8266开发板的BSP的搜索引擎链接 第二步 下载安装 ...
- 智能家居系统中网关与服务器如何连接?
原文点击打开链接 在新型智能家居系统中,家庭网关将取代PC机作为家庭控制中心.传统客户端/服务器模式不能保持家庭网关与远程服务器实时连接.基于百万级的家庭网关与服务器保持长连接的目的,采用主从服务器框 ...
- 树莓派 + Home Assistant + HomeKit 从零开始打造个人智能家居系统 篇二:初步配置 Home Assistant 并连接小米设备与 HomeKit
树莓派 + Home Assistant + HomeKit 从零开始打造个人智能家居系统 篇二:初步配置 Home Assistant 并连接小米设备与 HomeKit 通过本篇教程,你将完成对 H ...
- Home Assistant + 树莓派:强大的智能家居系统
项目介绍:制作一个智能家居系统,可以通过web软件界面或天猫精灵控制家里的灯.空调等设备. 硬件:Raspberry Pi 4B 4GB.ESP8266.Grove Arduino Beginner ...
最新文章
- 面试官:说一下线程池内部工作原理?
- 软件测试工程师们,今年的年终奖你想拿多少?
- 如何编写高效android代码
- java.util.zip_[Java 基础] 使用java.util.zip包压缩和解压缩文件
- 机器学习——Day 3 多元线性回归
- HDU 1204 基础DP 非连续字段的最大和
- wifi传输信息需要连接服务器,基于近场通信的WiFi传输连接方案.pdf
- python编程例子_Python的经典入门书籍有哪些?这5本值得一看
- 2020最新Java高级工程师学习路线
- e1载波的数据速率是_基于宽带电力线载波通信的路由技术研究
- 2012-7-06可樂词汇积累#9313;
- 【官方原版】Bootstrap Tooltips
- 博通linux网卡驱动,在64位CentOS 6 系统上安装Broadcom网卡驱动
- Unity实现BStar寻路
- 【Python】原来处理大文件也可以这么简单?
- 现有的CEP产品介绍
- 2023 iApp 图片漫画化源码
- 传统企业线下收益不可观,问答营销是你线上引流的好方法
- AIMLDL概念解释
- testdirector