本帖最后由 zlqe 于 2020-12-15 15:34 编辑
blinker ws2812彩灯控制加温湿度采集
第一次发表帖子,希望各位路过的大佬轻轻的喷 哈哈哈哈 有什么建议都可以提出来
先看看整体
然后是DHT11
然后是灯
接下来步入正题
首先,在接触esp822这么久,尝试过很多联网控制的东西,最后还是觉得点灯科技的最简单最好用,我的物联网入门就是由点灯开始的。
然后我来讲讲我的这个小东西, 首先esp8266作为国产芯片, 价格上很便宜, 性价比很高。 然后是 ws2812灯珠,淘宝价格差不多一两毛一颗,稍微有点贵了, 但是它相对于其他的普通RGB灯珠而言最大的优势就是它只需要一根线就能控制更高精度的RGB颜色。 再然后是DHT11温湿度传感器 虽然温湿度测量范围不宽,但是普通家用绰绰有余。主要是便宜,性价比高。
连线
DHT11 vcc-5v gnd- gnd DATA- D4
ws2812 vcc-5v gnd- gnd in - D1
其他的没啥了
接下来开始准备写代码
首先需要搭建开发环境 我就不细致讲了 粗略说一下这个是点灯科技官方说明
https://blinker.app/doc/getting-start-8266
点灯的技术部门更新很快啊 现在支持的 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);
- }
复制代码
有任何问题请问我 我会及时回复的
谢谢 哈哈哈哈
|