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);
}
有任何问题请问我 我会及时回复的
谢谢哈哈哈哈
文档请以https://diandeng.tech/doc 为准 赞 后期会加上显示屏和红外控制 歪比巴卜 发表于 2020-12-15 16:01
赞
谢谢哈哈哈哈哈 奈何col 发表于 2020-12-15 19:54
文档请以https://diandeng.tech/doc 为准
嗯嗯这个的全面得多
页:
[1]