锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

WiFiduino+blinker+小爱同学打造智慧卧室

时间:2023-01-30 12:00:00 配件直流电源连接器继电器d4a

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、实现功能
  • 二、所需材料
  • 三、导线连接
  • 四、软件开发
    • 1.开发环境建设
    • 2.编写程序
  • 五 手机操作部分
    • 1.blinkerAPP
    • 2. 米家APP
    • 3.小米音箱APP
  • 六、实物部分
    • 1.实物图片
  • 总结


前言

本科二年级通过比赛接触arduino,怀着对arduino的热爱买了arduino套件,但是想多做少,arduino买了套件后,我一直在吃灰;大学毕业后,我一直有创造智能家居的想法。下班后,我有更多的业余时间,所以在吃灰的帮助下arduino套件,然后购买其他材料来改造卧室。


一、实现功能

通过手机blinke的APP可检查卧室温湿度,控制卧室吊灯、台灯、窗帘开关;卧室吊灯、台灯、窗帘、空调开关可通过小爱扬声器控制。
注:空调开关采用小爱扬声器自带的模块,未进行编程开发。

二、所需材料

1.伺服舵机
2. L298N
电机驱动模块
3. 12V2A直流电源适配器
4. WiFiduino物联网开发板
5. 减速电机
6. 面包板
7. 导线若干
8.DHT11温湿度模块
9.电位器
10. 卷拉式手拉拉链拉珠头拉绳卷轴
11. 有小爱同学的设备(小米音箱,小米手机)

三、导线连接

1.将WiFiduino的VCC接口与GND接口通过导线外接面包板 、-位置。
2.DHT11模块的VCC接口连接面包板 ,GND接口连接面包板-,DATA接口连接WiFiduino的D8接口。
3.
继电器的VCC接口连接面包板 ,GND接口连接面包板-,IN接口连接WiFiduino的D4接口。
4.L298N模块的ENA连接面包板 ,IN1、IN2分别连接WiFiduino的D2、D3接口。
5.伺服舵机红线黄连接面包板。 、棕色线连接面包板-,黄色线连接到WiFiduino的D7接口。
6.继电器输出连接到台灯的导线上,作为台灯的开关;
7.12V2A直流电源输出连接L289N的输入端,L289N的OUT1、OUT2连接减速电机的输入端。

四、软件开发

注:确保小爱音箱和WiFiduino连接到同一无线网络

1.开发环境建设

不再重复详细的环境建设步骤,网上教程很多, 如果有困难,可以加我讨论。

本步骤主要完成:
arduino 软件安装
esp8266 库安装
blinker 库安装

2.编写程序

注:小编买的小爱同学有红外发射功能,所以没有编写空调控制代码。

#define BLINKER_WIFI #define BLINKER_PRINT Serial #define BLINKER_MIOT_SENSOR ////小被定义为传感器设备 #define BLINKER_MIOT_MULTI_OUTLET ///设置为小爱多个插座的模式  #include //引入blinker模块 #include //引入舵机模块 #include //引入温湿度模块  //0.WIFI配置关键值 char auth[] = "bd48bafdbef2";///点灯技术关键值 char ssid[] = "赚赚赚";       //要连入WIFI的名称 char pswd[] = "3.1415926535";//要连入WIFI的密码 //1.界面定义 #define CURT_1 D2 //定义窗帘接口1
#define CURT_2 D3 //定义窗帘接口2
#define TABLE_L D4 //定义台灯接口
#define DHTPIN D8 //定义温湿度传感器接口
#define ROOM_L D7 //定义卧室灯舵机接口
#define DHTTYPE DHT11 //定义温湿度传感器接口类型为DHT11
//2.舵机与传感器配置
Servo lamp_servo;//定义灯舵机
DHT dht(DHTPIN, DHTTYPE);//温湿度采集函数
float humi_read = 0, temp_read = 0;
//3.点灯科技按键配置
BlinkerSlider RAN_CUR("窗帘");//定义窗帘滑块
BlinkerButton BTN_TABLE_L("台灯");//定义台灯滑块
BlinkerButton BTN_ROOM_L("卧室灯");//定义卧室灯开关按键
BlinkerNumber HUMI("湿度");//定义湿度度数据显示
BlinkerNumber TEMP("温度");//定义温度度数据显示

//4.点灯科技按键反馈函数
//4.1窗帘反馈馈函数
void RAN_CUR_callback(int32_t value_CUR)
{ 
          
    BLINKER_LOG("get slider value: ", value_CUR);
    if ((0<=value_CUR)&(value_CUR<=33)){ 
        //减速电机正转、上拉窗帘
        digitalWrite(CURT_1,HIGH);
        digitalWrite(CURT_2,LOW);
        }
    else if((34<=value_CUR)&(value_CUR<=67)){ 
        
        digitalWrite(CURT_1,LOW);
        digitalWrite(CURT_2,LOW);
        }
    else//减速电机反转、下拉窗帘
        { 
        
        digitalWrite(CURT_1,LOW);
        digitalWrite(CURT_2,HIGH);
        }
}
//4.2卧室灯反馈函数
void BTN_ROOM_L_callback(const String & state_ROOM_L)
{ 
           BTN_ROOM_L.text("卧室灯");//按键名字
    BLINKER_LOG("get button state: ", state_ROOM_L);
    if (state_ROOM_L== BLINKER_CMD_ON) { 
        //开关按键 打开
        lamp_servo.write(40);
        BTN_ROOM_L.color("#00FF00");//按键颜色
        BTN_ROOM_L.print("on");
    }
    else if(state_ROOM_L== BLINKER_CMD_OFF) 
    { 
         
        lamp_servo.write(130); 
        BTN_ROOM_L.color("#000000");//按键颜色
        BTN_ROOM_L.print("off");
    }
    else
    BLINKER_LOG("get button state: ", state_ROOM_L);
}
//4.3台灯反馈函数
void BTN_TABLE_L_callback(const String & state_TABLE_L)
{ 
            
  BTN_TABLE_L.text("台灯");//按键名
  BLINKER_LOG("get button state: ", state_TABLE_L);//获取按键状态
  if (state_TABLE_L == "on") { 
        //开关按键 打开
    digitalWrite(TABLE_L, HIGH);
    BTN_TABLE_L.color("#00FF00");//按键颜色为绿色
    BTN_TABLE_L.print("on"); 
    }
    else  { 
         
      digitalWrite(TABLE_L, LOW);       
      BTN_TABLE_L.color("#000000");//按键颜色为黑色
      BTN_TABLE_L.print("off");    
    }
}
//4.4用于温湿度的心跳包
void heartbeat()
{ 
        
    //反馈湿度数据
    HUMI.print(humi_read);
    HUMI.unit("%");//设置温度单位
    HUMI.color("#fddb10");

    //反馈温度数据
    TEMP.print(temp_read);
    TEMP.unit("°");//设置湿度单位
    TEMP.color("#fddb01");
}

//5.小爱同学语音输出模块
char i;
bool ostate[5]={ 
        false};
//5.1小爱同学语音输出反馈模块
void miotPowerState(const String & state, uint8_t num)
{ 
        
  BLINKER_LOG("need set outlet: ", num, ", power state: ", state);
  i = 0; //初始化
  if (num == 0) { 
        
    i = 0;
   }
  else if (num == 1) { 
        
    i = 1;
   }
  else if (num == 2) { 
        
    i = 2;
   }
  else if (num == 3) { 
        
    i = 3;
   }
  else if (num == 4) { 
        
    i = 4;
    }
   else if (num == 5) { 
        
    i = 5;
    }
  if (state == BLINKER_CMD_ON) { 
        
    switch (i) { 
        
      case 0://窗帘反馈
        digitalWrite(CURT_1, LOW);
        digitalWrite(CURT_2, HIGH);
        delay(20000);
        digitalWrite(CURT_1, LOW);
        digitalWrite(CURT_2, LOW);
        BlinkerMIOT.powerState("on", num);
        BlinkerMIOT.print();
        ostate[num] = true;
        break;
      case 1://台灯反馈函数
        digitalWrite(TABLE_L, HIGH);
        digitalWrite(i, !digitalRead(TABLE_L));
        BlinkerMIOT.powerState("on", num);
        BlinkerMIOT.print();
        ostate[num] = true;
        break;
       case 2://卧室灯反馈函数
        lamp_servo.write(40);
        BlinkerMIOT.powerState("on", num);
        BlinkerMIOT.print();
        ostate[num] = true;
        break;
       case 3:
        break;
       case 4:
        break;
      default:
        BlinkerMIOT.powerState("on", num);
        BlinkerMIOT.print();
        ostate[num] = true;
    }
  }
  else if (state == BLINKER_CMD_OFF) { 
        
    switch (i) { 
        
      case 0://窗帘反馈
        digitalWrite(CURT_1, HIGH);
        digitalWrite(CURT_2, LOW);
        delay(8000);
        digitalWrite(CURT_1, LOW);
        digitalWrite(CURT_2, LOW);
        BlinkerMIOT.powerState("off", num);
        BlinkerMIOT.print();
        ostate[num] = false;
        break;
      case 1://台灯反馈函数
        digitalWrite(TABLE_L, LOW);
        digitalWrite(i, !digitalRead(TABLE_L));
        BlinkerMIOT.powerState("off", num);
        BlinkerMIOT.print();
        ostate[num] = false;
        break;
       case 2://卧室灯反馈函数
        lamp_servo.write(130);
        BlinkerMIOT.powerState("0ff", num);
        BlinkerMIOT.print();
        ostate[num] = false;
        break;
       case 3:
        break;
       case 4:
        break;
      default:
        BlinkerMIOT.powerState("off", num);
        BlinkerMIOT.print();
        ostate[num] = false;
    }
  }
}
//5.2小爱状态监测模块模块
void miotQuery(int32_t queryCode, uint8_t num){ 
        
  BLINKER_LOG("AliGenie Query outlet: ", num, ", codes: ", queryCode);
  switch (queryCode){ 
        
    case BLINKER_CMD_QUERY_ALL_NUMBER :
      BLINKER_LOG("MIOT Query All");
      BlinkerMIOT.powerState(ostate[num] ? "on" : "off", num);
      BlinkerMIOT.print();
      break;
    case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
      BLINKER_LOG("MIOT Query Power State");
      BlinkerMIOT.powerState(ostate[num] ? "on" : "off", num);
      BlinkerMIOT.print();
      break;
    default :
      BlinkerMIOT.powerState(ostate[num] ? "on" : "off", num);
      BlinkerMIOT.print();
      break;
  }
}
void setup(){ 
        
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    Blinker.begin(auth, ssid, pswd);

    //窗帘接口赋值与初始化
    pinMode(CURT_1, OUTPUT);
    pinMode(CURT_2, OUTPUT);
    digitalWrite(CURT_1, LOW);
    digitalWrite(CURT_2, LOW);
    //台灯接口口赋值与初始化
    pinMode(TABLE_L, OUTPUT);
    digitalWrite(TABLE_L, LOW);
    //卧室灯舵机接口赋值与初始化
    lamp_servo.attach(ROOM_L);  
    lamp_servo.write(90);
    
    //blinke按键赋值模块
    RAN_CUR.attach(RAN_CUR_callback);//添加窗帘模块
    BTN_TABLE_L.attach(BTN_TABLE_L_callback);//添加台灯模块
     BTN_ROOM_L.attach(BTN_ROOM_L_callback);//添加卧室灯模块
    Blinker.attachHeartbeat(heartbeat);//添加温湿度模块心跳包
    dht.begin();
   
    //语音控制模块
    BlinkerMIOT.attachPowerState(miotPowerState);
    BlinkerMIOT.attachQuery(miotQuery);
}
void loop(){ 
        
     Blinker.run();
     humi_read = dht.readHumidity();//读取湿度
     temp_read = dht.readTemperature();//读取温度
     Blinker.delay(10);
}

五 手机操作部分

1.blinkerAPP

参考文章:小爱同学+blinker+esp8266实现千里点灯

此步骤主要完成:
下载blinker APP
安装并添加按钮

通过以上两步给blinker界面添加温度、湿度显示的数据模块,添加台灯、卧室灯的开关按键,添加窗帘滑块。添加按钮后的界面如下图所示。

在这里插入图片描述

2. 米家APP

下载米家APP,注册账户,之后按如下图操作。

3.小米音箱APP

下载小米音箱APP,注册账户,之后按如下图操作。


=------------------------------------------------------------------------------------------------------------------------------------=

=------------------------------------------------------------------------------------------------------------------------------------=
=------------------------------------------------------------------------------------------------------------------------------------=

六、实物部分

1.实物图片


2.测试视频
测试视频点击这里。

总结

本文仅仅简单介绍了使用WiFiduino、小爱同学、blinker进行智慧卧室改造的过程。Arduino还有许多其他强大的功能,希望大家一起学习。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章