blinker ws2812彩灯控制加DHT11温湿度采集-Arduino中文社区 - Powered by Discuz! Archiver

zlqe 发表于 2020-12-15 14:32

blinker ws2812彩灯控制加DHT11温湿度采集

本帖最后由 zlqe 于 2020-12-15 15:34 编辑

blinker ws2812彩灯控制加温湿度采集
第一次发表帖子,希望各位路过的大佬轻轻的喷哈哈哈哈    有什么建议都可以提出来

https://www.arduino.cn/forum.php?mod=image&aid=71837&size=300x300&key=efbbb7f208c78c86&nocache=yes&type=fixnone
先看看整体
https://www.arduino.cn/forum.php?mod=image&aid=71839&size=300x300&key=5b2a8503658eff60&nocache=yes&type=fixnone

https://www.arduino.cn/forum.php?mod=image&aid=71832&size=300x300&key=cd300671327185fe&nocache=yes&type=fixnone

然后是DHT11
https://www.arduino.cn/forum.php?mod=image&aid=71833&size=300x300&key=d5700e204d3947b6&nocache=yes&type=fixnone
然后是灯
https://www.arduino.cn/forum.php?mod=image&aid=71834&size=300x300&key=9076d07c9d3a2cbf&nocache=yes&type=fixnone
接下来步入正题
首先,在接触esp822这么久,尝试过很多联网控制的东西,最后还是觉得点灯科技的最简单最好用,我的物联网入门就是由点灯开始的。



然后我来讲讲我的这个小东西,   首先esp8266作为国产芯片,价格上很便宜,   性价比很高。   然后是 ws2812灯珠,淘宝价格差不多一两毛一颗,稍微有点贵了,但是它相对于其他的普通RGB灯珠而言最大的优势就是它只需要一根线就能控制更高精度的RGB颜色。 再然后是DHT11温湿度传感器 虽然温湿度测量范围不宽,但是普通家用绰绰有余。主要是便宜,性价比高。
连线
DHT11   vcc-5v   gnd- gndDATA- D4
ws2812    vcc-5v   gnd- gndin -    D1
其他的没啥了

接下来开始准备写代码


首先需要搭建开发环境   我就不细致讲了   粗略说一下这个是点灯科技官方说明
https://blinker.app/doc/getting-start-8266
https://www.arduino.cn/forum.php?mod=image&aid=71830&size=300x300&key=a508161d91c14dc9&nocache=yes&type=fixnone
点灯的技术部门更新很快啊现在支持的arduino ide版本必须是1.8.7以上了    我直接用1.8.13
然后是esp8266支持包也要用2.5.0以上版本了我用的是2.7.4
然后再加上点灯科技的库文件

开发环境大功告成



然后开始写代码   

写代码之前一定先看看手册 看文档摸透了再开始是最好的   也可以看一点 实验一点
开发文档链接
https://blinker.app/doc/home
然后再看看官方的接入例程
https://blinker.app/doc/getting-start-arduino


代码和注释放上来

#define BLINKER_WIFI   
#include <Blinker.h>
#include <DHT.h>                           //加载三个库
int times = 0 ;         
char auth[] = "XXXXXXXX";             //设备密匙
char ssid[] = "XXXXXXXX";                  //WiFi·名称
char pswd[] = "XXXXXXXX";               //WiFi密码
/*****************ws2812的相关配置******************/   
#include <Adafruit_NeoPixel.h>                     
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN            D1          //控制引脚
#define NUMPIXELS      8         //级联灯珠数目
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

/*************三个按键对应的输出******************/
int led = D0 ;                  
int switch2 = D2 ;
int switch3 = D3 ;
/********************DHT11配置**************/

BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");
#define DHTPIN D4 //温湿度接的是D4端口
#define DHTTYPE DHT11   
DHT dht(DHTPIN, DHTTYPE);
float humi_read = 0, temp_read = 0;

/***************心跳包返回温湿度信息************/
void heartbeat()
{
    HUMI.print(humi_read);
    TEMP.print(temp_read);
}
/**** ****************数据储存回调函数*****************/
void dataStorage()
{
Blinker.dataStorage("temp",temp_read);
Blinker.dataStorage("humi",humi_read);
}
/************颜色组件相关**************/
#define RGB_1 "RGB"         //组件名称
BlinkerRGB RGB1(RGB_1);
/*******三个按键*****************/
BlinkerButton Button1("btn1");
BlinkerButton Button2("btn2");
BlinkerButton Button3("btn3");


/*************按键回调函数***********************/
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state == "on" )                      //开灯
{BLINKER_LOG("btn abc on : ", state );
   digitalWrite(led, 1);
    }
   if (state =="off" )                  //关灯
{BLINKER_LOG("btn abc off : ", state );
   digitalWrite(led, 0);
    }
   if ( state =="tap" )                  //点击取反
{BLINKER_LOG("btn abc tap : ", state );
   digitalWrite(led, !digitalRead(led));
    }
    Blinker.delay(200);
    if( digitalRead(led) == 1){            //状态返回
    Button1.color("#B22222");                //颜色变成红色
    Button1.text("小灯,打开");               //显示文本
    Blinker.delay(200);
    Button1.print("on");
    BLINKER_LOG("read : high ");
    }
    if( digitalRead(led) ==0){            //同上
   Button1.color("#228B22");            //显示蓝色
   Button1.text("小灯,关闭");               //同上
   Blinker.delay(200);
   Button1.print("off");
   BLINKER_LOG("read : ,low" );
   }
      Blinker.delay(10);
    Blinker.vibrate(255);               //调用手机震动255ms
}

void button2_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state == "on" )
{BLINKER_LOG("btn abc on : ", state );
   digitalWrite(switch2, 1);
    }
   if (state =="off" )
{BLINKER_LOG("btn abc off : ", state );
   digitalWrite(switch2, 0);
    }
   if ( state =="tap" )
{BLINKER_LOG("btn abc tap : ", state );
   digitalWrite(switch2, !digitalRead(switch2));
    }
    Blinker.delay(200);
    if( digitalRead(switch2) ==1){
    Button2.color("#B22222");
    Button2.text("开关2,打开");
    Blinker.delay(200);
    Button2.print("on");
    BLINKER_LOG("read : high ");
    }
    if( digitalRead(switch2) ==0){
   Button2.color("#228B22");
   Button2.text("开关2,关闭");
   Blinker.delay(200);
   Button2.print("off");
   BLINKER_LOG("read : ,low" );
   }
      Blinker.delay(10);
    Blinker.vibrate(255);
}


void button3_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state == "on" )
{BLINKER_LOG("btn abc on : ", state );
   digitalWrite(switch3, 1);
    }
   if (state =="off" )
{BLINKER_LOG("btn abc off : ", state );
   digitalWrite(switch3, 0);
    }
   if ( state =="tap" )
{BLINKER_LOG("btn abc tap : ", state );
   digitalWrite(switch3, !digitalRead(switch3));
    }
    Blinker.delay(200);
    if( digitalRead(switch3) ==1){
    Button3.color("#B22222");
    Button3.text("开关3,打开");
    Blinker.delay(200);
    Button3.print("on");
    BLINKER_LOG("read : high ");
    }
    if( digitalRead(switch3) ==0){
   Button3.color("#228B22");
   Button3.text("开关3,关闭");
   Blinker.delay(200);
   Button3.print("off");
   BLINKER_LOG("read : ,low" );
   }
   Blinker.delay(10);
    Blinker.vibrate(255);
}
/*********颜色组件回调函数************/
void rgb1_callback(uint8_t r_value, uint8_t g_value,
                   uint8_t b_value, uint8_t bright_value)
{

BLINKER_LOG("R value: ", r_value);
BLINKER_LOG("G value: ", g_value);
BLINKER_LOG("B value: ", b_value);
BLINKER_LOG("Rrightness value: ", bright_value);

pixels.setBrightness(bright_value);
    for(int i = 0; i < NUMPIXELS; i++){
      pixels.setPixelColor(i, r_value, g_value, b_value);
   Blinker.delay(10);
   pixels.show();
   }
   Blinker.vibrate(255);   
   Blinker.notify("!颜色改变");
}

// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
}

void setup() {
//pinMode(PIR_sensor,INPUT);
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
pinMode(PIN, OUTPUT);
pinMode(led, OUTPUT);
pinMode(switch2, OUTPUT);
pinMode(switch3, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(PIN, LOW);
digitalWrite(led, LOW);
digitalWrite(switch2, LOW);
digitalWrite(switch3, LOW);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
Button1.attach(button1_callback);
Button2.attach(button2_callback);
Button3.attach(button3_callback);
RGB1.attach(rgb1_callback);
Blinker.attachHeartbeat(heartbeat);
Blinker.attachDataStorage(dataStorage);
dht.begin();
}

void loop() {

    Blinker.run();         //运行点灯
/******************温湿度·采集********************/
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    if (isnan(h) || isnan(t))
    {
      BLINKER_LOG("Failed to read from DHT sensor!");
    }
    else
    {
      BLINKER_LOG("Humidity: ", h, " %");
      BLINKER_LOG("Temperature: ", t, " *C");
      humi_read = h;
      temp_read = t;
    }

   
    if (t > 20)
    { if (times <=1 ){
      times = 2 ;
      Blinker.sms("D3A320房间 温度达到20摄氏度!");                  //发送短信到注册的手机
      Blinker.wechat("Title:温度较高","state:temperature high" ,"Message:温度较高") ;
    }
    }
   if (t < 15 ){
      times = 0 ;
   }
    Blinker.delay(2000);
}




有任何问题请问我   我会及时回复的

谢谢哈哈哈哈








奈何col 发表于 2020-12-15 19:54

文档请以https://diandeng.tech/doc 为准

歪比巴卜 发表于 2020-12-15 16:01

zlqe 发表于 2020-12-15 20:39

后期会加上显示屏和红外控制

zlqe 发表于 2020-12-15 20:42

歪比巴卜 发表于 2020-12-15 16:01


谢谢哈哈哈哈哈

zlqe 发表于 2020-12-15 20:43

奈何col 发表于 2020-12-15 19:54
文档请以https://diandeng.tech/doc 为准

嗯嗯这个的全面得多
页: [1]
查看完整版本: blinker ws2812彩灯控制加DHT11温湿度采集