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

基于STM32设计的智慧浇花系统(华为云IOT) 主控MCU选择STM32F103芯片,通过土壤湿度传感器、环境温湿度传感器,检测整个周边环境信息,再通过ESP8266 WIFI传递到物联网平台。程序里可以预设湿度阀值,当检测到土壤湿度低于阀值就自动浇花。在手机APP上可以实现远程控制水泵浇花,本地在搭载一个TFT小尺寸显示屏,可以实时显示测量检测的数据,在办公室里也可以通过TFT彩屏显示屏解周围环境的信息。...... 阅读详情

功能:
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 0x09

char 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为50ms

    LED_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; // 关闭led
    while (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;    // 进入操作过程1
                LED_GSM = 1;    // 关闭指示灯
                readMesIng = 0; // 读取短信过程中
            }
        }
    }
}

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

基于STM32与GSM短信的智能花盆远程浇水补光系统 嵌入式系统是让智能硬件自主运行的技术基础,其核心原理是通过各类传感器感知环境变化,由控制器进行逻辑判断,再驱动执行机构完成动作。以自动浇花为例,土壤湿度传感器和光照传感器采集数据后,主控芯片按照预设阈值控制水泵和补光灯,形成闭环控制。在远程控制场景中,GSM短信通信利用成熟蜂窝网络传输指令,无需WiFi和云平台,具有覆盖广、稳定性高、部署成本低的优势,特别适用于家庭园艺、温室大棚等分散场景。一个基于STM32主控,融合GSM短信模块、传感器及执行机构的智能花盆系统,实现了自动浇水、补光和手机短信远程操作,为 阅读详情

相关推荐

STM32+GSM远程农艺控制系统实战指南

嵌入式远程农艺控制是物联网在智慧农业中的基础落地形态,其核心在于低功耗主控、广域可靠通信与精准执行闭环的协同设计。基于STM32的嵌入式系统凭借高可靠性与丰富外设,成为边缘端农情响应的理想载体;GSM通信则突破Wi-Fi依赖,在无宽带、弱网络环境下保障指令可达性。该技术路径兼顾成本、鲁棒性与可维护性,广泛适用于家庭阳台种植、温室补光灌溉、偏远地区作物监护等场景。本文围绕STM32硬件选型约束、GSM短信状态机解析、土壤湿度本地化校准及动态电源管理四大关键环节,提供可复用的工程级实现方案,尤其聚焦‘浇水’与‘

weixin_33461476的博客 262

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

硬件电路的设计 (末尾附文件) 3.1系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STM32F103C8T6单片机核心电路+温湿度传感器DHT11电路+LCD1602液晶显示电路+继电器控制电路+GSM短信模块SIM800A电路+高亮LED灯补光电路+光照强度电路+电源电路组成。 1、检测花盆湿度、温度和光照状态值,并显示;参数显示通过LCD1602液晶显示, 2、远程控制,通过GSM短信远程浇水和补光灯控制。发送一条短信:jiaoshui,继电器1打开(可外接水泵表示浇水),返回短信ji

weixin_46018613的博客 1万+

基于STM32单片机远程浇花花盆GSM短信浇水补光设计

本设计由STM32F103C8T6单片机核心电路+温湿度传感器DHT11电路+LCD1602液晶显示电路+继电器控制电路+GSM短信模块SIM800A电路+高亮LED灯补光电路+光照强度电路+电源电路组成 1、检测花盆湿度、温度和光照状态值,并显示;参数显示通过LCD1602液晶显示, 2、远程控制,通过GSM短信远程浇水和补光灯控制。发送一条短信:jiaoshui,继电器1打开(可外接水泵表示浇水),返回短信jiaoshui_ok,1分钟关闭。发送一条短信:buguang,强制补光,并返回短信buguagn_ok,1分钟关闭。发送短信:get,返回液晶显示内容即温湿度内容,用于远程查看数据。 3、湿度低于35自动浇水、光照较暗自动补光。 4、GSM模块SIM800A和SIM900A电路程序完全兼容外观外形一模一样。。 资料内容:程序源码 电路图 任务书 答辩技巧 开题报告 参考论文 系统框图 程序流程图 使用到的芯片资料 器件清单

基于STM32单片机远程浇花花盆GSM短信浇水补光灌溉湿度设计6

功能描述: 本系统由STM32F103C8T6单片机、温湿度传感器DHT11、LCD1602液晶显示、继电器控制、GSM模块SIM800、高亮LED灯、光照检测及电源组成。1、检测花盆湿度、温度和光照状态值,并显示;参数显示通过LCD1602液晶显示,2、远程控制,通过GSM短信远程浇水和补光灯控制。发送信息:“jiaoshui”,继电器打开(可外接水泵表示浇水),设备收到后,解析并返回jiaoshui_ok,约30s后关闭。发送信息:“buguang”,强制补光,设备收到后,解析并返回buguagn_o

单片机设计开发 615

基于STM32的智能花盆系统设计与实现(Qt上位机源码包)

这是基于STM32的智能花盆系统设计与实现项目对应的 《华为云》上位机源码包。如果需要自己改动上位机,学习上位机开发的,可以下载。 注意: 如果不需要修改源码就没必要下载本源码包,STM32的源码包里已经提供编译好的Android手机APP和Windows上位机APP可以直接使用。 上位机采用Qt开发,支持在Android设备和Windows下运行,代码里写了Anroid相关的配置,自己需要配置好自己Qt的Android开发环境才可以正常编译Android的程序。 本项目对应的博客在这里:https://blog.youkuaiyun.com/xiaolong1126626497/article/details/131571782

5.STM32F103-自动浇花小实验

(1)把土壤湿度传感器放入水中,看到LCD屏幕上显示湿度,此时水泵处于关闭状态; (2)把土壤湿度传感器拿出水面,看到LCD屏幕上显示湿度,此时水泵处于开启状态,并且蜂鸣器报警。

基于STM32单片机远程浇花花盆GSM短信浇水补光灌溉系统

*单片机设计介绍,基于STM32单片机远程浇花花盆GSM短信浇水补光灌溉系统。

2201_75940997的博客 1360

可视化大屏系列(5):设备状态面板与数据分析仪表盘

在这篇文章中,我们将重点讨论如何通过智能化手段提升工地设备的管理效率与维护质量。随着智能工地系统的不断发展,设备监控与维护管理变得尤为重要。本篇将从 设备状态实时监控、自动化维护提醒、设备管理与维修记录 三个方面入手,展示如何通过 Vue3 和 ECharts 构建一个智能化的设备管理平台,实时采集和展示设备运行状态、及时生成维护提醒并记录维修历史,以提高设备的使用效率与安全性。我们还将结合实际代码示例,详细讲解如何实现这些功能,帮助你在智能工地项目中实现设备管理的智能化、数字化和自动化。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 3365

8个经典智慧灌溉电路方案精选汇总

智慧灌溉运用物联网、大数据、云计算与传感器技术相结合的方式对农业生产中的环境温度、 湿度、光照强度、土壤墒情等参数进行实时监控,系统通过分析处理传感器数据信息,达到所设阈值或认为干预操作, 作为灌溉设备运行的控制条件,实现智能化灌溉。 1、基于Arduino智能节水灌溉项目,原理+PCB图+源码等开源 Atmel成立于1984年,总部位于加利福尼亚州何塞市,其产品线有非易失性内存、MCU、照汽车和通用市场,其中MCU是主打产品,而且一直保持着强劲的增长势头,被广泛应用于各类电子设备以及连接装置、物联网安全等

weixin_43618242的博客 2920

SMRATS(一) SMARTS+PPO baseline运行教程

python类方法 class Agent: @classmethod def from_function() python typing 含义 为防止弱类型python出现忘记变量类型的问题,python3.5及之后版本增加了对应的类型提示。 输入和输出类型 函数接受并返回一个字符串,注释像下面这样: def greeting(name: str) -> str: return 'Hello ' + name 常用的typing类型 int,long,float: 整型,

Freshduke的博客 1415

从光斑图到锤形优化:一次搞定Zemax双胶合透镜的像散与场曲问题

本文详细解析了Zemax双胶合透镜设计中像散与场曲问题的诊断与优化方法。从光斑图分析到锤形优化技巧,提供了完整的光学设计实战指南,帮助设计师快速定位问题并有效改善系统性能,特别适合光学设计工程师和Zemax使用者参考。

weixin_27134495的博客 233

【单片机毕业设计】【mcuclub-dz-119】智能远程浇花系统设计与实现

本毕业设计旨在设计一种智能远程浇花系统,通过STC89C52单片机和多种传感器实现对植物生长环境的实时监测与控制。系统采用土壤湿度模块检测土壤湿度,当湿度低于设定最小值时,触发声光报警,并通过GSM模块向主人发送浇水请求短信,等待主人回复决定是否启动浇水。同时,系统还通过液位传感器检测蓄水池液位,当液位低于设定最小值时,触发声光报警,并通过GSM模块向主人发送加水请求短信,等待主人回复决定是否启动加水。在蓄水池加水期间,即使土壤湿度低于设定最小值,也不进行浇水,确保蓄水池加水完成后再进行浇水。系统具备按键设

weixin_61121477的博客 261

www.jiaoshui.net

<br />东莞晟龙胶粘:www.jiaoshui.net

ruay520fang的专栏 419

virtuoso--DFF

27-实验课-std_cell2

qq_61440044的博客 2006

数理金融学笔记 Chap2 二叉树模型Binomial

2 二叉树模型与期权定价 Binomial Model and Option Pricing 文章目录2 二叉树模型与期权定价 Binomial Model and Option Pricing单期二叉树模型 One-step Binomial Model风险与无风险资产单期二叉树模型与无套利条件无套利定价 No Arbitrage Pricing风险中性定价 Risk Neutral PricingDelta套期保值 Delta Hedging两期二叉树模型 Two-Step Binomial Model

weixin_66831131的博客 2388

基于STM32单片机智能花盆控制系统设计(毕业设计资料)

智能花盆设计思想:通过传感器检测植物生长环境参数,如温湿度、光照等。判断植物的生长环境状况,当植物需要照顾时及时提醒主人。 设计要求的功能: stm32设计 1、检测花盆湿度、温度和光照强度,并显示;(传感器模块、显示模块)用1602液晶显示, 2、远程控制,通过GSM短信远程浇水和补光灯控制。(GSM模块、电机控制模块),发送一条短信:jiaoshui,继电器1打开,水泵开,水泵打开后,1分钟关闭。发送一条短信:buguang,灯亮,1分钟关闭。 3、自动浇水、自动补光。 【资源下载】下载地址

AuroraFaye的博客 1万+

Chrome更新出现错误代码3: 0X80070422 -- system level的解决方案

本文主要介绍了Chrome更新出现错误代码3: 0X80070422 – system level的解决方案,希望能对使用Chrome的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

基于STM32的自动养花系统

实时检测植物的生长环境,检测土壤的湿度、空气中的二氧化碳、光照强度,并在OLED屏幕上展现。设有湿度、二氧化碳浓度、光照强度等阈值,当检测到的数据异常,则执行相应的操作,如:当土壤湿度过低,则打开水泵进行浇水,二氧化碳浓度过高则打开通风口,进行减低二氧化碳浓度处理;光照强度过低则进行补光。系统对于给植物浇花的水箱设有水位传感器实时检测含水量,过低则进行抽水补充,且设有阈值存储器,可实时的调整阈值范围,适应各种植物的养护。

weixin_52680858的博客 4252

SAP-MM-供应商对账平台(功能集合)

(1)集成OA审批,线上核销,结果写入SAP; (2)集成SRM,线上与供应商对账确认,写入SAP; (3)集成财务付款结果确认写入,OA回传结果,定时同步SRM供应商平台。 欢迎留言交流,功能完善,如需要页面设计,请订阅专栏

qq_32198063的博客 748

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

基于STM32单片机智能大棚浇花花盆土壤湿度温度无线设计23-202

23-202、基于STM32单片机智能大棚浇花花盆农业土壤湿度补光WiFi手机APP设计+DS18B20温度显示设计功能描述:本系统由STM32F103C8T6单片机核心板、1.44寸TFT彩屏、无线WIFI模块、土壤湿度传感器、光照采集电路、USB补光灯驱动电路、水泵驱动电路、蜂鸣器驱动电路、独立按键电路、DS18B20温度检测电路及电源组成。【1】本设计单片机通过土壤湿度传感器采集土壤湿度,通过光敏电阻分压电路采集光照数据。通过对比土壤湿度阈值和光照阈值是否异常,从而驱动水泵、补光灯、蜂鸣器相应动作。按

Danpianjihuizong的博客 557

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: 基于STM32单片机老人防跌倒报警系统GSM短信上报原理图PCB
下一篇: 基于STM32单片机直流电机控制加减速正反转系统proteus仿真原理图程序
极寒钛科技
博客等级 码龄7年 843粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值