当前位置:首页 » 《随便一记》 » 正文

ESP8266+Blinker 的万物互联(智能家居篇)_我与nano的博客

13 人参与  2022年05月05日 09:44  分类 : 《随便一记》  评论

点击全文阅读


前面学习了使用ESP8266将温湿度等上传到阿里云平台,于是我想起来了万物互联,就想先做个有关智能家居的,通过查阅资料发现了Blinker(轻松物联网)。下面是演示视频

Esp8266物联网


在这里插入图片描述

文章目录

  • 前言
  • 一、准备
  • 二、操作步骤
    • 1.Blinker配置
    • 2.ESP8266配置
  • 三、效果展示
  • 总结

前言

实现万物互联第一步,千里点灯,然后添加你想要的模块就可以了,接下来我们进入正文。

一、准备

ESP8266开发板
温湿度传感器
MQ-3传感器
土壤湿度传感器
OLED显示屏
灯、继电器、风扇
舵机
稳压模块
电池

这些便是所需要的硬件,软件的话,需要Arduino ide和手机APP点灯Blinker
App直接走应用商城里下载即可

二、操作步骤

1.Blinker配置

在这里插入图片描述
第一步添加独立设备
在这里插入图片描述
这里选择网络接入,然后会生成KEY,保存好这个密钥,接下来会用到
在这里插入图片描述
接下来我们进行相应的配置
在这里插入图片描述
选择你需要的组件即可,你也可以添加自己想要的组件
在这里插入图片描述
这是Blinker端的配置就基本完成了,接下来我们进入ESP8266端。

2.ESP8266配置

具体的配置我不多说了,很简单,这里我直接附上源码。


#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT//
#define BLINKER_WITHOUT_SSL      //非SSL加密通信接入,省堆栈  */
#include <Blinker.h>
#include <Servo.h>                  //加载舵机库   
#include <DHT.h>    
#include <Wire.h>
#include <ACROBOTIC_SSD1306.h>
Servo myservo;                      //定义舵机对象
#define sensor_Pin   0
int servo1 = 16;                    //IO14(D5),用来做控制舵机
int servo_open = 70;                //舵机打开开关的角度,自己可以实际测试,更改适合的角度
int servo_close = 0;                //舵机关闭开关的角度
#define LED   2  // 板子上的灯
#define LE   14  // 板子上的灯
 
float humi_read = 0, temp_read = 0,val,soil_data = 0; 
//下面3项需要根据实际填写
char auth[] = "********"; // blinker app提供的秘钥
char ssid[] = "*******";// wifi 名字
char pswd[] = "******";// wifi 密码
 

// 新建组件对象
BlinkerButton Button1("btn-abc");//注意:要和APP组件’数据键名’一致
BlinkerButton Button2("btn-ab");//注意:要和APP组件’数据键名’一致
BlinkerButton Button3("btn-abcd");//注意:要和APP组件’数据键名’一致
BlinkerButton Button4("btn-a");//注意:要和APP组件’数据键名’一致
BlinkerNumber HUMI("num-e");
BlinkerNumber TEMP("num-d");
BlinkerNumber MQ("num-n");
BlinkerNumber T("num-z");
#define DHTPIN 5  //
 
#define DHTTYPE DHT11   // DHT 11

 
DHT dht(DHTPIN, DHTTYPE);
 
void heartbeat()
{
    //反馈温度数据
    soil_data = analogRead(sensor_Pin);   //模拟数据读取(A0脚输入的数据)385-1024
    soil_data -= 385;         //0-639
    soil_data /= 6.39;        //0.00-100.00,变为百分比
    soil_data = 100 - soil_data;         //修改为百分比越大湿度越大
     int analogValue = analogRead(A0);
     val = 0;
    HUMI.print(humi_read);

    //反馈湿度数据
    TEMP.print(temp_read);
      MQ.print(val);
    T.print(soil_data);
}
void button1_callback(const String & state) 
{
    BLINKER_LOG("get button state: ", state);
    digitalWrite(LED, !digitalRead(LED)); 

}
 
void button2_callback(const String & state) 
{
    BLINKER_LOG("get button state: ", state);
    digitalWrite(LE, !digitalRead(LE)); 
  
}
void button3_callback(const String & state) 
{
    BLINKER_LOG("get button state: ", state);
    if (state=="on") {
         myservo.write(servo_open);  
        // 反馈开关状态
        Button1.print("on");
    } else if(state=="off"){
        myservo.write(servo_open);
        // 反馈开关状态
        Button1.print("off");
    }
    

}

void button4_callback(const String & state) 
{
    BLINKER_LOG("get button state: ", state);
    if (state=="on") {
         myservo.write(servo_close);  
        // 反馈开关状态
        Button1.print("on");
    } else if(state=="off"){
        myservo.write(servo_close);
        // 反馈开关状态
        Button1.print("off");
    }
    

}
void setup() 
{
    // 初始化串口,并开启调试信息,调试用可以删除
    Serial.begin(115200); 
     Wire.begin(12,13);
  oled.init();                      // Initialze SSD1306 OLED display
  oled.clearDisplay();              // Clear screen
   oled.setTextXY(0,0);              // Set cursor position, start of line 0
  oled.putString("Temp:  *C");
  oled.setTextXY(1,0);              // Set cursor position, start of line 1
  oled.putString("Humi:  %");
  oled.setTextXY(2,0);              // Set cursor position, start of line 2
  oled.putString("soil:  dS/m");
  oled.setTextXY(3,0);             // Set cursor position, line 2 10th character
  oled.putString("C7H8:  mg/m3");
    BLINKER_DEBUG.stream(Serial);
    // 初始化IO
    pinMode(LED, OUTPUT); 
    digitalWrite(LED, LOW); // 初始化 led 高电平 ,则灯熄灭状态

     pinMode(LE, OUTPUT); 
    digitalWrite(LE, HIGH); // 初始化 led 高电平 ,则灯熄灭状态

    myservo.attach(servo1);           //设置指定io为舵机
    myservo.write(servo_close);       //控制舵机旋转到指定角度
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Button1.attach(button1_callback);
    Button2.attach(button2_callback);
    Button3.attach(button3_callback);
    Button4.attach(button4_callback);
    Blinker.attachHeartbeat(heartbeat);
    dht.begin();
}
 
void loop() 
{
    Blinker.run();
     float h = dht.readHumidity();
    float t = dht.readTemperature();
      oled.setTextXY(0,5);              // Set cursor position
  oled.putString("  ");
  oled.setTextXY(0,5); 
  oled.putNumber(float(t));       

  oled.setTextXY(1,5);              // Set cursor position
  oled.putString("  ");
  oled.setTextXY(1,5); 
  oled.putNumber(float(h));  

  oled.setTextXY(2,5);              // Set cursor position
  oled.putString("  ");
  oled.setTextXY(2,5); 
  oled.putNumber(float(soil_data));  

  
  oled.setTextXY(3,5);              // Set cursor position
  oled.putString("  ");
  oled.setTextXY(3,5); 
  oled.putNumber(float(val));  
  /*
    if (isnan(h) || isnan(t))
    {
        BLINKER_LOG("Failed to read from DHT sensor!");
    }
    else
    {
        BLINKER_LOG("Humidity: ", h, " %");
        BLINKER_LOG("Temperature: ", t, " *C");
         BLINKER_LOG("MQ: ", val, " %");
           BLINKER_LOG("T: ", soil_data, " %");*/
        humi_read = h;
        temp_read = t;
    //}
}

代码很简单也很好理解,按照代码里的注释操作即可。

三、效果展示

在这里插入图片描述
在这里插入图片描述
可以将温湿度,土壤湿度,甲烷浓度上传到你的手机APP上,即使远在千里也能实时查看。

总结

万物互联这个名词听起来就有趣,写这篇博客一方面是记录自己的学习生活,另一方面帮助那些需要的同学也给自己做个备份,加油。
这里也送给大家一句话:
人生就像一只储蓄罐,你投入的每一分努力都会在未来的某一天回馈于你。流年笑掷,未来可期。只有努力奋斗,才会有美好的前程。加油!


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/39508.html

舵机  组件  数据  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1