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

chen70854022 发表于 2020-3-28 21:13

基于Blinker的智能花盆

本帖最后由 chen70854022 于 2020-3-28 21:22 编辑

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

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

实现功能:
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);
    }
}


烧录后我们就可以看到串口在打印湿度值了

至于APP端也可以参考我的布局,也可以自己摆放自己喜欢的布局

左侧数据是我们的开发板的信号强度,右边是湿度(由于我这里没有插入土壤中,所以是满格)下面是历史数据可以看每天或者每周的历史数据,再往下是一个手动浇水按钮,按下即可浇水3秒(时长可以在程序里设置)。有什么疑问可以回帖,有空我会解答一下的,祝你成功!!






greenshop 发表于 2020-4-1 11:47

为什么app组件显示空白

chen70854022 发表于 2020-4-1 16:17

greenshop 发表于 2020-4-1 11:47
为什么app组件显示空白

那不是显示52了么

greenshop 发表于 2020-4-1 17:05

chen70854022 发表于 2020-4-1 16:17
那不是显示52了么

换成中间的图形就变空白

greenshop 发表于 2020-4-1 17:13

chen70854022 发表于 2020-4-1 16:17
那不是显示52了么

没有指标和文字

默啊默 发表于 2020-4-2 23:32

怎么接线的 怎么放水里反而小了有微信嘛

Menka1inan 发表于 2020-4-3 13:43

我觉得这个难点在于如何换水,哈哈哈,因为抽水机不可能接在水龙头旁边

Cp0204 发表于 2020-4-6 09:55

默啊默 发表于 2020-4-2 23:32
怎么接线的 怎么放水里反而小了有微信嘛

传感器是越湿越小,如果要更直观,用 1024-val

15273258152 发表于 2020-4-9 00:09

大佬,图表的数据键名应该填什么啊?

ywdwhy 发表于 2020-4-11 16:12

15273258152 发表于 2020-4-9 00:09
大佬,图表的数据键名应该填什么啊?

temp;P这个可以自己修改吧
页: [1] 2
查看完整版本: 基于Blinker的智能花盆