功能:
0.本项目采用STM32F103C8T6作为单片机系统的控制MCU
1.系统采用LCD1602液晶显示花盆湿度、温度和光照状态值等参数
2.可实现远程控制,通过GSM短信远程浇水和补光灯控制。
3.湿度低于35自动浇水、光照较暗自动补光。
4.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:

PCB :

主程序:

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "bsp_lcd1602.h"
#include "bsp_adc.h"#define INIT 0x00
#define WATER 0x01
#define Light 0x02
#define GETMESG 0x03
#define SOMEONE 0x09char tab[16];
u8 readsoilHmFlag = 0; // 读取土壤湿度标志  定时器中处理
u16 lightValue = 0; //光照值
u16 soilhmValue = 0; //土壤湿度值值u8 mesgWaterFlag = 0; // 短信浇水标志
u8 waterCnt = 0;        // 短信浇水计时 定时器中处理
u8 mesgLightFlag = 0;  // 短信补光标志
u8 lightCnt = 0;          // 短信补光计时 定时器中处理unsigned char stepNum = 0;  // 运行步骤
unsigned int timeCount = 0; // 接收短信处理延时
char Crtl_Z[1] = {0x1a};    // 发送短信最后字节
char AT_CMGS[26] = "AT+CMGS=\"";
unsigned char rebackMesFlag;    // 返回短信
unsigned char clearMesFlag = 0; // 定时清除短信
unsigned char readMesIng = 0;   // 读取短信中标志int main(void)
{unsigned int i;Delay_Init();         // 延时函数初始化NVIC_Configuration(); // 设置NVIC中断分组2:2位抢占优先级,2位响应优先级UART_Init(115200);      // 串口初始化ADCx_Init();LED_Init();               // LED端口初始化TIM3_Int_Init(499, 7199); // 10Khz的计数频率,计数到500为50msLED_GSM = 0;LCD_GPIO_Init(); // 初始化lcd引脚LCD_Init();      // 初始化lcd屏幕Delay_ms(20);LCD_DispStr(0, 0, "My Designer!    "); // 初始化显示sprintf(tab, "Hm:%3d%% L:%3d%%", soilhmValue, lightValue);LCD_DispStr(0, 1, tab); // 初始化显示for (i = 0; i < 50; i++)Delay_ms(100); // 延时有助于稳定UART_SendStr(USART1, "AT+CMGF=1\r\n", 11); // 设置字符集for (i = 0; i < 5; i++)Delay_ms(100); // 延时有助于稳定UART_SendStr(USART1, "AT+CSCS=\"GSM\"\r\n", 15); // 设置干什么、for (i = 0; i < 5; i++)Delay_ms(100); // 延时有助于稳定UART_SendStr(USART1, "AT+CMGDA=\"DEL ALL\"\r\n", 20); // 删除所有短信for (i = 0; i < 5; i++)Delay_ms(100); // 延时有助于稳定LED_GSM = 1; // 关闭ledwhile (1){if (readsoilHmFlag == 1){readsoilHmFlag = 0;lightValue = 100 - 100 * ADC_ConvertedValue[0] / 4096; //计算百分比soilhmValue = 100 * (4096 - ADC_ConvertedValue[1]) / 3373; //取土壤湿度传感器有效范围百分比//水泵开启瞬间电流较大,影响液晶工作,需要重新配置一下液晶LCD_WriteCommand(0x38, 1); //显示模式设置LCD_WriteCommand(0x0c, 1); //显示开,不开游标,不闪烁LCD_DispStr(0, 0, "My Designer!    "); // 初始化显示sprintf(tab, "Hm:%3d%% L:%3d%%", soilhmValue, lightValue);LCD_DispStr(0, 1, tab); // 初始化显示if (mesgWaterFlag == 0) // 短信不在控制时{if (soilhmValue < 30) //{RELAY = 1;} // 打开继电器else{RELAY = 0;} // 关闭继电器}if (mesgLightFlag == 0) // 短信不在控制时{if (lightValue < 30){LIGHT = 1;} // 打开灯光else{LIGHT = 0;} // 关闭灯光}}if (readFlag == 1) // 读取短信息标志{readFlag = 0;   // 读取标志清零readMesIng = 1; // 读取短信过程中timeCount++;if ((stepNum == 0) && (timeCount >= 4)) // 定时读取短信{UART_SendStr(USART1, "AT+CMGF=1\r\n", 11); // 设置字符集timeCount = 0;                             // 延时设置量stepNum++;                                 // 进入操作过程1}else if ((stepNum == 1) && (timeCount >= 4)) // 定时读取短信{for (i = 0; i < SIZEBUF; i++){timebuf[i] = '0'; // 清空timebuf}UART_SendStr(USART1, "AT+CMGR=1\r\n", 11);timeCount = 0; // 延时设置量stepNum++;     // 进入操作过程1}else if ((stepNum == 2) && (timeCount >= 4)) // 定时读取短信{rebackMesFlag = INIT;for (i = 0; i < (SIZEBUF - 5); i++){if ((timebuf[i] == 'w') && (timebuf[i + 1] == 'a') && (timebuf[i + 2] == 't') && (timebuf[i + 3] == 'e') && (timebuf[i + 4] == 'r')) // 查询是否接收到water{mesgWaterFlag = 1;     // 短信控制标志waterCnt = 0;            // 浇水计数RELAY = 1;                // 打开继电器rebackMesFlag = WATER; // 返回短信标志break;}else if ((timebuf[i] == 'l') && (timebuf[i + 1] == 'i') && (timebuf[i + 2] == 'g') && (timebuf[i + 3] == 'h') && (timebuf[i + 4] == 't')) // 查询是否接收到light{mesgLightFlag = 1;     // 短信控制标志lightCnt = 0;             // 计数LIGHT = 1;                // 打开灯光rebackMesFlag = Light; // 返回短信标志break;}else if ((timebuf[i] == 'g') && (timebuf[i + 1] == 'e') && (timebuf[i + 2] == 't')) // 查询是否接收到get{rebackMesFlag = GETMESG; // 返回短信标志break;}if ((timebuf[i] == '+') && (timebuf[i + 1] == '8') && (timebuf[i + 2] == '6')) // 查询短信息中的号码{LED_GSM = 0;rebackMesFlag = SOMEONE;     // 有人发送短信AT_CMGS[9] = timebuf[i + 0]; // 提取号码AT_CMGS[10] = timebuf[i + 1];AT_CMGS[11] = timebuf[i + 2];AT_CMGS[12] = timebuf[i + 3];AT_CMGS[13] = timebuf[i + 4];AT_CMGS[14] = timebuf[i + 5];AT_CMGS[15] = timebuf[i + 6];AT_CMGS[16] = timebuf[i + 7];AT_CMGS[17] = timebuf[i + 8];AT_CMGS[18] = timebuf[i + 9];AT_CMGS[19] = timebuf[i + 10];AT_CMGS[20] = timebuf[i + 11];AT_CMGS[21] = timebuf[i + 12];AT_CMGS[22] = timebuf[i + 13];}}AT_CMGS[23] = '"'; // 整理字符串AT_CMGS[24] = 0x0d;AT_CMGS[25] = 0x0a;if (rebackMesFlag != INIT){UART_SendStr(USART1, "AT+CMGDA=\"DEL ALL\"\r\n", 20); // 删除所有短信for (i = 0; i < 5; i++)Delay_ms(100); // 延时有助于稳定UART_SendStr(USART1, "AT+CMGF=1\r\n", 11); // 设置字符集for (i = 0; i < 3; i++)Delay_ms(100); // 延时有助于稳定UART_SendStr(USART1, "AT+CSCS=\"GSM\"\r\n", 15); // 设置干什么、for (i = 0; i < 3; i++)Delay_ms(100); // 延时有助于稳定UART_SendStr(USART1, (char *)AT_CMGS, 26); // 准备发送短信for (i = 0; i < 2; i++)Delay_ms(100); // 延时有助于稳定if (rebackMesFlag == WATER){UART_SendStr(USART1, "water_ok! ", 10); // 发送短信息内容}else if (rebackMesFlag == Light){UART_SendStr(USART1, "light_ok! ", 10); // 发送短信息内容}else if (rebackMesFlag == GETMESG){UART_SendStr(USART1, (char *)tab, 14); // 发送光强/湿度}else{UART_SendStr(USART1, "cmd_err!", 8); // 发送短信息命令错误}Delay_ms(100);UART_SendStr(USART1, (char *)Crtl_Z, 1); // 发送for (i = 0; i < 20; i++)Delay_ms(100); // 延时有助于稳定}timeCount = 0; // 延时设置量stepNum++;     // 进入操作过程1}else if ((stepNum == 3) && (timeCount >= 4)) // 定时读取短信{clearMesFlag++;if (clearMesFlag > 10){clearMesFlag = 0;UART_SendStr(USART1, "AT+CMGDA=\"DEL ALL\"\r\n", 20); // 删除所有短信}timeCount = 0;  // 延时设置量stepNum = 0;    // 进入操作过程1LED_GSM = 1;    // 关闭指示灯readMesIng = 0; // 读取短信过程中}}}
}

实物演示视频:
https://www.bilibili.com/video/BV1GD4y1e7ru/

基于STM32单片机远程浇花花盆GSM短信浇水补光设计原理图程序相关推荐

  1. 基于STM32单片机的远程智能浇花花盆GSM短信浇水补光方案原理图程序设计

    硬件电路的设计 (末尾附文件) 3.1系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STM32F103C8T6单片机核心电路+温湿度传感器DHT11电路+LCD1602液晶显示电路+继 ...

  2. 基于STM32单片机老人防跌倒报警系统GSM短信上报原理图PCB

    功能: 0.本项目采用STM32F103C8T6作为单片机系统的控制MCU 1.本项目采用倾角传感器adxl345模块,实时检测老人的状态角度. 2.采用GSM模块实现短信的发送,只要老人跌倒了(且没 ...

  3. STM32老人防跌倒报警GSM短信GPS定位设计(程序+原理图+PCB)

    本设计: 基于STM32老人防跌倒报警GSM短信GPS定位设计(程序+原理图+PCB) 编号C0025 下载链接 C0025 网盘链接 功能描述: 本系统由基于STM32单片机的核心板.ADXL345 ...

  4. 51、基于51单片机的GPS定位系统(GSM短信)

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.程序 六.资料包括 摘要 1978年2月22日第一颗GPS试验卫星的入轨运行,开创了以 ...

  5. 51单片机智能家居环境检测 烟雾温度GSM短信提示报警器(原理图+程序+仿真+PCB)

    原理图:Altium Designer 仿真版本:proteus7.8 程序编译器:keil 4 设计编号:C0039 功能介绍: 1.单片机采用内置AD的51系列单片机,型号为STC89c52: 2 ...

  6. 18、基于STM32的自动浇花系统

    18.基于STM32的自动浇花系统 引言 1 系统概述 1.1设计任务 1.2设计要求 2 方案设计与论证 2.1芯片选择方案 2.2 系统概述 2.3系统总体设计思路 2.4各功能模块程序实现原理分 ...

  7. 基于51单片机智能浇花自动浇水灌溉

    基于51单片机智能浇花自动浇水灌溉(源程序+原理图+论文+实物图) 资料编号:004 功能介绍: 51单片机控制的自动浇水系统,实现室内盆花浇水的自动化系统. 该系统可对土壤的湿度进行监控,并对作物进 ...

  8. 基于STM32单片机的智能家居烟雾温度火灾防盗报警的设计与实现

    功能介绍 以STM32单片机作为主控系统: LCD1602液晶显示屏来显示显示测得的值: SR501人体红外感应是否有人进行防盗: 通过烟雾传感器MQ-2获取前的烟雾值: 通过DHT11温湿度传感器来 ...

  9. 基于STM32单片机的温湿度检测报警器(数码管)(Proteus仿真+程序)

    编号:27 基于STM32单片机的温湿度检测报警器(数码管) 功能描述: 本设计由STM32F103单片机最小系统+DHT11温湿度传感器+数码管显示模块+声光报警模块+独立按键组成. 1.主控制器是 ...

最新文章

  1. 盘点 6 个被淘汰的 Java 技术,它们都曾经风光过!| CSDN 博文精选
  2. docker 运行 php nginx_docker搭建nginx+mysql+php
  3. ITK:来自图像的多分辨率金字塔
  4. 我的世界基岩版json_我的世界基岩版1.16
  5. 浅谈Java中的==和equals
  6. Wi-Fi Expert专业无线网测试软件
  7. 具有InlfuxDB的Spring Boot和Micrometer第3部分:Servlet和JDBC
  8. OUTLOOK 的PST文件和OST文件的区别
  9. MyBatis学习总结(26)——Mybatis源码中使用了哪些设计模式?
  10. python api调用 验证码_Python调用创蓝253短信验证码API文档
  11. 大端模式和小端模式的再理解
  12. pat1056. Mice and Rice (25)
  13. java连接数据库步骤
  14. 案例实践:零基础完成Loadrunner压力测试,十分钟教会你
  15. uva10099+uvauva10048
  16. justinmind夜话:数据母板系列视频教程之原型设计二十一条军规
  17. 英语和汉语的区别10大区别点
  18. 汇编 movl %gs:20, %eax 的作用
  19. 基于OpenCV的单目相机标定与三维定位
  20. 三通道图像和四通道图像

热门文章

  1. 冒号和他的学生们(连载25)——软件应变
  2. 多表查询的分类及其查询语法
  3. Python-列表推导式
  4. js 字符串 转换成 数字 的方法
  5. 使用OpenCV进行仪表数值读取
  6. 开通抖音小店后,如何高效地对接达人?附带自用话术
  7. 递推+模拟---想好如何存储?
  8. linux简单命令解释器设计,Linux环境下模拟实现命令解释器
  9. Javacript中parentElement和parentNode的简单用法[0303]
  10. 简谐振动(物理笔记)