基于Blinker的智能花盆-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7003|回复: 19

[分享] 基于Blinker的智能花盆

[复制链接]
发表于 2020-3-28 21:13 | 显示全部楼层 |阅读模式
本帖最后由 chen70854022 于 2020-3-28 21:22 编辑

在开始之前建议大家先看一遍blinker的开发文档,这样可以对函数和一些基本的组件有个大概的认识,更方便我们接下来搞事情,文档地址:https://www.diandeng.tech/doc/sdk-download
一、准备工作:Node mcu一个  、土壤湿度传感器一个,如果想实现浇水功能还需要一个小水泵,然后按VCC-VCC ,GND-GND,A0-A0接好线

node mcu一个

node mcu一个

土壤湿度

土壤湿度

二、准备好硬件后我们需要搭建开发环境,如果已经搭建成功的就跳过吧,环境搭建可以去我的B站看视频教程,地址:https://www.bilibili.com/video/BV1zE411i7xo/
然后在手机APP上获取一个KEY在程序里替换,WiFi账号和密码也要替换成你自己的
下面是源码程序,注释很清楚
[mw_shl_code=arduino,true]/* *****************************************************************
作者:峥小晨  智能花盆

实现功能:
1、监测花盆湿度信息并通过APP远程查看
2、自动浇水,当传感器监测到湿度过低的时候,自动给花盆浇水
3、手动浇水,当需要的时候可以使用APP远程手动给花盆浇水
4、数据自动上传云端,方便查看历史数据
* *****************************************************************/

#define BLINKER_WIFI

#include <Blinker.h>
#define LED_BUILTIN 2 //水泵连接的引脚
Ticker flipper;       //创建定时器对象

int val; //用来存储湿度值

char auth[] = "a9f8958137"; //替换为你获取到的key
char ssid[] = "cn";         //替换为你的wifi账号
char pswd[] = "ch151";  //替换为你的WIFI密码

// 新建组件对象
BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-1");
BlinkerNumber Number2("num-2");

void heartbeat() //心跳包使得我们每次打开APP都可以看到实时的最新湿度数据
{
    Number1.print(WiFi.RSSI()); //把信号强度发送给APP端
    Number2.print(val);         //同步湿度数据
}

// 按下按键即会执行该函数
void button1_callback(const String &state)
{
    BLINKER_LOG("get button state: ", state);
    digitalWrite(LED_BUILTIN, LOW);
    Blinker.delay(3000); //每次手动浇水3秒
    digitalWrite(LED_BUILTIN, HIGH);
}

void flip()
{
    val = analogRead(A0); //获取湿度
    BLINKER_LOG(val);
}
void dataStorage() //图表回调
{
    Blinker.dataStorage("temp", val);
}
void setup()
{
    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);

    // 初始化有LED的IO
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Button1.attach(button1_callback);
    Blinker.attachHeartbeat(heartbeat);
    flipper.attach(2, flip);                //定时器每5秒调用一次flip函数
    Blinker.attachDataStorage(dataStorage); //图表
}

void loop()
{
    Blinker.run();
    if (val > 700) //如果检测到湿度过低,执行浇水3秒  这个温湿度计是湿度越大数值越小
    {
        digitalWrite(LED_BUILTIN, LOW);
        Blinker.delay(3000);
        digitalWrite(LED_BUILTIN, HIGH);
    }
}
[/mw_shl_code]

烧录后我们就可以看到串口在打印湿度值了
QQ截图20200328190547.png
至于APP端也可以参考我的布局,也可以自己摆放自己喜欢的布局
Screenshot_2020-03-28-20-46-26-752_iot.clz.me.jpg
左侧数据是我们的开发板的信号强度,右边是湿度(由于我这里没有插入土壤中,所以是满格)下面是历史数据可以看每天或者每周的历史数据,再往下是一个手动浇水按钮,按下即可浇水3秒(时长可以在程序里设置)。有什么疑问可以回帖,有空我会解答一下的,祝你成功!!






发表于 2020-4-1 11:47 | 显示全部楼层
为什么app组件显示空白
微信图片_20200401114629.jpg
 楼主| 发表于 2020-4-1 16:17 | 显示全部楼层
greenshop 发表于 2020-4-1 11:47
为什么app组件显示空白

那不是显示52了么
发表于 2020-4-1 17:05 | 显示全部楼层

换成中间的图形就变空白
发表于 2020-4-1 17:13 | 显示全部楼层

没有指标和文字
微信图片_20200401171226.jpg
发表于 2020-4-2 23:32 | 显示全部楼层
怎么接线的 怎么放水里反而小了有微信嘛
发表于 2020-4-3 13:43 | 显示全部楼层
我觉得这个难点在于如何换水,哈哈哈,因为抽水机不可能接在水龙头旁边
发表于 2020-4-6 09:55 | 显示全部楼层
默啊默 发表于 2020-4-2 23:32
怎么接线的 怎么放水里反而小了有微信嘛

传感器是越湿越小,如果要更直观,用 1024-val
发表于 2020-4-9 00:09 | 显示全部楼层
大佬,图表的数据键名应该填什么啊?
发表于 2020-4-11 16:12 | 显示全部楼层
15273258152 发表于 2020-4-9 00:09
大佬,图表的数据键名应该填什么啊?

temp这个可以自己修改吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 11:36 , Processed in 0.138259 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表