文章目录

  • 一、项目简介
  • 二、项目组成
  • 三、原理图设计
  • 四、源码设计
  • 五、小程序设计
  • 六、成品展示
  • 七、资料获取与联系

项目视频
哔哩哔哩视频链接:
1.项目开题
2.原理图讲解
3.程序讲解
3-1OLED显示
3-2独立按键的使用
3-3蜂鸣器的驱动
3-4温湿度获取
3-5人体红外检测
3-6亮度烟雾传感器检测
3-7步进电机控制
3-8PWM调节LED亮度
3-9本地功能整合
3-10最终代码讲解+成品演示
3-11小程序导入

一、项目简介

至今我们生活中已有许许多多的物联网设备,比如我们的智能空调,智能台灯,智能窗户,智能窗帘,智能汽车等等,今天我们将带给大家一款基于微信小程序控制的智能家居系统,该系统实现了自动控制、手动控制和远程控制,还可以加装语音控制。
我们这个系统主要实现的功能有以下几部分:
①温湿度采集
②烟雾浓度采集
③环境亮度采集
④检测是否有人
⑤OLED显示数据
⑥根据温湿度控制风扇(温度高于30℃打开风扇降温或者湿度大于90%RH打开风扇除湿)
⑦室内烟雾浓度过高,蜂鸣器报警
⑧有人时环境亮度控制灯光的亮暗
⑨根据环境亮度自动开关窗帘(亮度范围0~100,亮度>70开窗帘,亮度<=70关窗帘,开关窗帘使用步进电机模拟)
⑩所有执行器可以通过手动按键本地控制
⑪使用微信小程序显示环境数据
⑫通过微信小程序控制执行器

是不是觉得功能很多,这就对了,功能越多学的也就越多,对自己的锻炼也会多。
此项目我们会做两个版本,万用板版本和PCB版本

二、项目组成

先上图
PCB版本

万用板版本元器件

(万用板散件使用的有几个模块有修改,图中没列出来)

看完图后我们再来看一下系统的组成部分:
万用板
①STM32F103C8T6最小系统板1
②DHT11温湿度传感器
1
③MQ-2烟雾浓度传感器1
④光敏电阻传感器
1
⑤热释电人体红外传感器1
⑥OLED显示屏
1
⑦ESP82661+转接板
⑧L298N
1
⑨蜂鸣器1
⑩LED灯
1
⑪风扇1
⑫步进电机驱动+步进电机
1
⑬按键4
⑭万用板
1
⑮HGD01-DC-DC电源模块1
⑯12V电源适配器
1
再附上一张系统组成框图

三、原理图设计

原理图也分为万用板和PCB版本,需要PDF原版的看文章尾部获取
万用板版本

PCB版本

四、源码设计

源码分为单片机源码和小程序源码
具体代码讲解看视频
main.c

//单片机头文件
#include "stm32f10x.h"//网络协议层
#include "onenet.h"//网络设备
#include "net_device.h"//硬件驱动
#include "led.h"
#include "oled.h"
#include "delay.h"
#include "usart.h"
#include "hwtimer.h"
#include "SysTick.h"
#include "system.h"
#include "iwdg.h"
#include "fault.h"
#include "selfcheck.h"
#include "info.h"
#include "oled.h"
#include "bmp.h"
#include "adc.h"
#include "lsens.h"
#include "dht11.h"
#include "rthw.h"
#include "pwm.h"
#include "fmq.h"
#include "bjdj.h"
#include "key.h"
//C库
#include <string.h>u8 led_flag=0;u8 fs_flag=0;u8 mode_flag=0;u8 lsens=0;u32 mq2=0;u8 temp=0,humi=0;u16 led_pwm=900;u8 ch_flag=0;
//数据流
DATA_STREAM dataStream[] = {{"wendu", &temp, TYPE_UCHAR, 1},{"shidu", &humi, TYPE_UCHAR, 1},{"led_flag", &led_flag, TYPE_UCHAR, 1},{"fs_flag", &fs_flag, TYPE_UCHAR, 1},                   {"mode_flag", &mode_flag, TYPE_UCHAR, 1},{"lsens", &lsens, TYPE_UCHAR, 1},              {"mq2", &mq2, TYPE_UINT, 1},{"led_pwm", &led_pwm, TYPE_UCHAR, 1},                   {"ch_flag", &ch_flag, TYPE_UCHAR, 1},};
unsigned char dataStreamLen = sizeof(dataStream) / sizeof(dataStream[0]);/*
************************************************************
*   函数名称:    Hardware_Init
*
*   函数功能:    硬件初始化
*
*   入口参数:    无
*
*   返回参数:    无
*
*   说明:      初始化单片机功能以及外接设备
************************************************************
*/
void Hardware_Init(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                                //中断控制器分组设置}/*
************************************************************
*   函数名称:    main
*
*   函数功能:
*
*   入口参数:    无
*
*   返回参数:    0
*
*   说明:
************************************************************
*/
int main(void)
{u16 i;unsigned char *dataPtr;unsigned int runTime = 0;_Bool sendFlag = 0;u8 t=0;    SysTick_Init(72);Delay_Init();                                                              //systick初始化Led_Init();                                                                 //LED初始化Usart1_Init(115200);                                                      //初始化串口   115200bpsnetDeviceInfo.reboot = 0;TIM2_Int_Init(49, 35999);                                                //72MHz,36000分频-500us,50重载值。则中断周期为500us * 50 = 25msTIM3_Int_Init(1999, 35999);                                         //72MHz,36000分频-500us,2000重载值。则中断周期为500us * 2000 = 1sOLED_Init();Lsens_Init();DHT11_Init();RTHW_Init();FMQ_Init();BJDJ_Init();KEY_Init();TIM4_PWM_Init(899,0);NET_DEVICE_IO_Init();                                //网络设备IO初始化NET_DEVICE_Reset();                                  //网络设备复位NET_DEVICE_Set_DataMode(DEVICE_CMD_MODE);           //设置为命令收发模式(例如ESP8266要区分AT的返回还是平台下发数据的返回)OLED_ColorTurn(0);//0正常显示,1 反色显示OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示OLED_ShowChinese(0,0,0,16,1);//温度OLED_ShowChinese(15,0,2,16,1);OLED_ShowChar(30,0,':',16,1);OLED_ShowChinese(60,0,1,16,1);//湿度OLED_ShowChinese(75,0,2,16,1);OLED_ShowChar(90,0,':',16,1);OLED_ShowChinese(0,17,5,16,1);//亮度OLED_ShowChinese(15,17,2,16,1);OLED_ShowChar(30,17,':',16,1);OLED_ShowChinese(60,17,3,16,1);//烟雾OLED_ShowChinese(75,17,4,16,1);OLED_ShowChar(90,17,':',16,1);OLED_ShowChinese(0,34,13,16,1);//窗帘 关OLED_ShowChinese(15,34,14,16,1);OLED_ShowChinese(40,34,16,16,1);OLED_ShowChar(30,34,':',16,1);OLED_ShowChinese(60,34,10,16,1);//风扇 关OLED_ShowChinese(75,34,11,16,1);OLED_ShowChinese(100,34,16,16,1);OLED_ShowChar(90,34,':',16,1);OLED_ShowString(10,49,"LED:",12,1);//灯 0挡OLED_ShowNum(40,49,0,1,12,1);OLED_ShowString(60,49,"PEOPLE:",12,1);//人 无OLED_ShowNum(100,49,0,1,12,1);OLED_Refresh();while(1){t=KEY_Scan(0);        //按键switch(t){                case KEY1_PRES:  //模式切换0自动1手动mode_flag=!mode_flag;if(mode_flag==1){led_pwm=900;TIM_SetCompare2(TIM4,led_pwm);OLED_ShowNum(40,49,100-led_pwm/9,3,12,1);}break;case KEY2_PRES:if(mode_flag==1){fs_flag=!fs_flag;}break;case KEY3_PRES:                if(mode_flag==1){led_pwm=led_pwm-200;if(led_pwm<=0||led_pwm>900){led_pwm=900;}TIM_SetCompare2(TIM4,led_pwm);OLED_ShowNum(40,49,100-led_pwm/9,3,12,1);}break;case KEY4_PRES:  if(mode_flag==1){if(ch_flag==0)//如果窗户关{for(i=0;i<150;i++){FZ;}    TZ;ch_flag=1;}else{for(i=0;i<150;i++){ZZ;}  TZ;ch_flag=0;}}break;default:delay_ms(10);    } DHT11_Read_Data(&temp,&humi);  //获取湿度OLED_ShowNum(40,0,temp,2,16,1);OLED_ShowNum(100,0,humi,2,16,1);lsens=Lsens_Get_Val();  //获取亮度mq2=Mq2_Get_Val();      //获取烟雾浓度OLED_ShowNum(36,17,lsens,3,16,1);OLED_ShowNum(98,17,mq2,4,16,1);if(mode_flag==0){ OLED_ShowNum(122,0,0,1,12,1);if(RTHW==1) //有人{OLED_ShowNum(100,49,1,1,12,1);led_pwm=lsens*9;TIM_SetCompare2(TIM4,led_pwm);OLED_ShowNum(40,49,100-led_pwm/9,3,12,1);}else{TIM_SetCompare2(TIM4,900);OLED_ShowNum(100,49,0,1,12,1);}if(temp>30||humi>90)//温度大于30或湿度大于90打开风扇{fs_flag=1;OLED_ShowChinese(100,34,15,16,1);}else{fs_flag=0;OLED_ShowChinese(100,34,16,16,1);} if(ch_flag==0)//如果窗户关{if(lsens>70)//亮度>70开窗帘,<=70关窗帘{for(i=0;i<150;i++){FZ;} TZ;ch_flag=1;}else{TZ;}}else{if(lsens>70)//亮度>70开窗帘,<=70关窗帘{TZ;}else{for(i=0;i<150;i++){ZZ;}   TZ;ch_flag=0;}}}else  //手动{OLED_ShowNum(122,0,1,1,12,1);}if(mq2>500)   //烟雾浓度大于00打开蜂鸣器{GPIO_SetBits(GPIOB,FMQ);}else{GPIO_ResetBits(GPIOB,FMQ);} if(fs_flag==0){GPIO_ResetBits(GPIOB,FS);OLED_ShowChinese(100,34,16,16,1);}else{GPIO_SetBits(GPIOB,FS);OLED_ShowChinese(100,34,15,16,1);}if(ch_flag==0){OLED_ShowChinese(40,34,16,16,1);}else{OLED_ShowChinese(40,34,15,16,1);}OLED_Refresh();if(oneNetInfo.netWork == 1){OLED_ShowNum(122,49,1,1,12,1);OLED_Refresh();
//      OLED_ShowNum(110,6,1,1,16);
/******************************************************************************数据与心跳
******************************************************************************/if(timInfo.timer6Out - runTime >= 100)                                   //25s一次(25ms中断){runTime = timInfo.timer6Out;if(sendFlag){TIM_Cmd(OS_TIMER, DISABLE);OneNet_HeartBeat();                                                //心跳连接TIM_Cmd(OS_TIMER, ENABLE);}else{TIM_Cmd(OS_TIMER, DISABLE);OneNet_SendData(kTypeSimpleJsonWithoutTime, dataStreamLen);        //数据发送TIM_Cmd(OS_TIMER, ENABLE);}sendFlag = !sendFlag;}/******************************************************************************平台下发命令解析
******************************************************************************/if(oneNetInfo.netWork && NET_DEVICE_Get_DataMode() == DEVICE_DATA_MODE) //当有网络 且 在命令接收模式时{dataPtr = NET_DEVICE_GetIPD(0);                                      //不等待,获取平台下发的数据if(dataPtr != NULL)                                                   //如果数据指针不为空,则代表收到了数据{OneNet_App(dataPtr);                                         //集中处理}}/******************************************************************************错误处理
******************************************************************************/if(faultType != FAULT_NONE)                                              //如果错误标志被设置{UsartPrintf(USART_DEBUG, "WARN:  Fault Process\r\n");Fault_Process();                                                  //进入错误处理函数}/******************************************************************************数据反馈
******************************************************************************/if(oneNetInfo.sendData){oneNetInfo.sendData = OneNet_SendData(kTypeSimpleJsonWithoutTime, dataStreamLen);}}else{OLED_ShowNum(122,49,0,1,12,1);OLED_Refresh();
//      OLED_ShowNum(110,6,0,1,16);
/******************************************************************************初始化网络设备、接入平台
******************************************************************************/if(!oneNetInfo.netWork && (checkInfo.NET_DEVICE_OK == DEV_OK))           //当没有网络 且 网络模块检测到时{NET_DEVICE_Set_DataMode(DEVICE_CMD_MODE);                         //设置为命令收发模式if(!NET_DEVICE_Init())                                             //初始化网络设备,能连入网络{OneNet_DevLink(oneNetInfo.devID, oneNetInfo.apiKey);         //接入平台if(oneNetInfo.netWork){runTime = timInfo.timer6Out;                               //更新时间}else{}}}/******************************************************************************网络设备检测
******************************************************************************/if(checkInfo.NET_DEVICE_OK == DEV_ERR)                                    //当网络设备未做检测{NET_DEVICE_Set_DataMode(DEVICE_CMD_MODE);                            //设置为命令收发模式if(timerCount >= NET_TIME)                                            //如果网络连接超时{UsartPrintf(USART_DEBUG, "Tips:       Timer Check Err\r\n");NET_DEVICE_Reset();                                             //复位网络设备timerCount = 0;                                                 //清零连接超时计数faultType = FAULT_NONE;                                         //清除错误标志}if(!NET_DEVICE_SendCmd("AT\r\n", "OK"))                                //网络设备检测{UsartPrintf(USART_DEBUG, "NET Device :Ok\r\n");checkInfo.NET_DEVICE_OK = DEV_OK;                             //检测到网络设备,标记NET_DEVICE_Set_DataMode(DEVICE_DATA_MODE);                       //设置为数据收发模式}else{UsartPrintf(USART_DEBUG, "NET Device :Error\r\n");}}}delay_ms(10);}}

五、小程序设计

小程序使用小程序开发者工具开发
小程序界面

六、成品展示

最后是激动人心的时刻,来吧,先上一张实物图
万用板

PCB

微信小程序智能家居最后一讲 程序讲解加成果展示

七、资料获取与联系


关注公众号“HG电子”发送“微信小程序智能家居”可获取PDF版本原理图

有别的需求也可加我V:HGbishe

【毕业设计】基于单片机微信小程序智能家居控制系统相关推荐

  1. java计算机毕业设计基于安卓/微信小程序的大学生心理测试咨询管理系统app

    项目介绍 随着社会经济的发展,医疗卫生事业取得了巨大进步,在健康中心理健康占据越来越重要的地位,什么是心理健康:心理健康,从广义上讲,是指一种高效而满意的.持续的心理状态.从狭义上讲,心理健康是指人的 ...

  2. 计算机毕业设计基于安卓/微信小程序的健身房健身管理系统

    项目介绍 随着中国经济的快速发展,人民生活的质量得到了大幅度的改善,人们更加关心自己是否拥有着健康的体魄,想通过花钱来购买健康的想法出现在了越来越多的人心里.因此,越来越多的健身场所如雨后的春笋一般快 ...

  3. 基于微信小程序智能停车场系统(微信小程序毕业设计)

    基于微信小程序智能停车场系统 基于微信小程序智能停车场系统,后台采用ssm框架,java编程语言,mysql数据库制作:本系统主要分为用户和管理员两个角色:用户的主要功能有,注册和登陆系统,查看系统公 ...

  4. (附源码)基于springboot微信小程序的长沙县图书馆图书导览系统 毕业设计 170900

    基于springboot微信小程序的长沙县图书馆图书导览系统 摘  要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也 ...

  5. 微信小程序——智能小秘“遥知之”源码分享(语义理解基于olami)

    微信小程序智能生活小秘书开发详解 >>>>>>>>>>>>>>>>>>>>> ...

  6. 借鉴华为HiLink实现微信小程序智能配网功能

    借鉴华为HiLink实现微信小程序智能配网功能 微信小程序介绍 微信公众号智能配网 Smartconfig实现原理 Smartconfig技术的弊端 AP配网技术的出现 微信小程序智能配网 模块端设置 ...

  7. 基于SpringBoot+微信小程序的壁纸小程序

    基于SpringBoot+微信小程序的壁纸小程序 ✌全网粉丝20W+,csdn特邀作者.博客专家.CSDN新星计划导师.java领域优质创作者,博客之星.掘金/华为云/阿里云/InfoQ等平台优质作者 ...

  8. 基于springboot微信小程序支付功能实现

    基于springboot微信小程序支付功能实现 简单的封装微信小程序支付功能,支付工具类所依赖的fastjson.lombok.wagegger, 1.添加maven依赖: 版本号可根据自己项目的实际 ...

  9. 毕业设计/论文/答辩-微信小程序-店内点餐小程序

    毕业设计/论文/答辩-微信小程序-店内点餐小程序 最近好多同学都在弄微信小程序的毕业设计,今天,小编就给大家分享一套*毕业设计点餐小程序*代码! 目录(直接点击可达): 1.1废话不多说,老规矩,先看 ...

最新文章

  1. 终于有人把中台说清楚了
  2. reactivecocoa button的几种点击方式
  3. antd upload手动上传_Flask上传文件
  4. 【ArcGIS Pro微课1000例】0006:ArcGIS Pro 2.5三维显示DEM数字高程模型
  5. python2中的unicode_在python 3和2中工作的Unicode文字
  6. 博士导师总结目标检测、卷积神经网络和OpenCV学习资料(教程/PPT/代码)
  7. 华为拿百亿资金给员工分红,预计每股1.58元
  8. linux共享内存变量 tiaojianbianliang,低压集抄系统中Linux共享内存使用分析
  9. python ggplot_python数据可视化系列---谁是ggplot2的更好python实现
  10. SAP License:SAP ECC6安装系列五:安装后 License 的处理
  11. 第十四届华中科技大学程序设计竞赛--J Various Tree
  12. 如何在 Web 开发中找到第一份工作?
  13. Nginx 配置 SSL 证书 + 搭建 HTTPS 网站
  14. 保研经历总结--天津大学
  15. 仿真 steam linux 安装教程,Ubuntu安装Steam游戏平台的解决方案
  16. 关于不同操作系统下浏览器兼容问题
  17. netDxf实现对cad文件的读取与写入
  18. 微信小程序——VW、VH
  19. 学界:为代码自动添加注释,让 Java 程序的阅读和开发更高效
  20. 阿里云RDS数据库备份迁移遇到的问题

热门文章

  1. 汉诺塔--1.0版本
  2. ANSI编码是什么编码方式?ANSI编码和GBK什么关系
  3. Apsara Clouder专项技能认证:实现调用API接口|参考文档
  4. 星外主机星外主机php,星外主机可写可执行目录
  5. Tarjan算法:重边的影响及跑有向图和无向图的区别
  6. 百视通进军影视产业链上游 谋求版权突破
  7. Qt for androidx 调用手机系统自带文件选择器, 打开指定路径下的文件夹
  8. Modbus扫描工具
  9. LoadRunner测试某网站ppmm的图片
  10. 七年级信息技术期末试卷及参考答案