ESP8266+Blinker+小爱同学舵机控制开关

ESP8266

文章目录

  • ESP8266
  • 一、简介
  • 二、硬件连接
  • 三、代码
  • 四、blinker软件配置
  • 总结

一、简介

最近想着用我们的小爱同学语音控制卧室的灯,这样就可以在睡觉的时候不用下床了,之前我们总是测试ESP8266控制5v的灯,如何控制220v的节能灯,相信大家也看到过很多的控制办法,一种是之间通过继电器进行控制,二一个就是采用舵机之间放在开关上进行控制,今天就给大家介绍第二种

二、硬件连接

这里我添加了一个DHT11温湿度传感器用于温湿度信息的采集显示,整个控制的电源采用一个普通的5v 1A的充电器为其供电
舵机

ES8266 舵机
GPIO5 橙色信号线
VCC 红色VCC
GND 棕色GND

DHT11

ES8266 温湿度传感器
GPIO2 DATA
3.3V VCC
GND GND

三、代码

网络连接采用智能配网,前面文章有专门说明
此处的代码需要改为自己的设备秘钥char auth[] = "*****";

gitee 代码链接

#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#define BLINKER_MIOT_SENSOR   //定义为语音控制传感器设备 
#include 
#include 
#include 

#define dj 5
Servo myservo;//定义舵机

#define DHTPIN 2 //
#define DHTTYPE DHT11   // DHT 11


char auth[] = "*****";//根据需要自行修改
bool WIFI_Status = true;

DHT dht(DHTPIN, DHTTYPE);
 
int32_t humi_read = 0;//湿度 小爱同学只能查整数的数据 
float temp_read = 0; //温度

// 新建组件对象
BlinkerButton Button1("test");
BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");

int counter = 0;

//配网函数
void smartConfig()
{
     
  WiFi.mode(WIFI_STA);
  Serial.println("\r\nWait for Smartconfig...");
  WiFi.beginSmartConfig();//等待手机端发出的用户名与密码
  while (1)
  {
     
    Serial.print(".");
    digitalWrite(LED_BUILTIN, HIGH);  
    delay(1000);                      
    digitalWrite(LED_BUILTIN, LOW);    
    delay(1000);                      
    if (WiFi.smartConfigDone())//退出等待
    {
     
      Serial.println("SmartConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      break;
    }
  }
}

//设置wifi函数
void WIFI_Set()
{
     
    Serial.println("\r\n正在连接");
    int count = 0;
    while(WiFi.status()!=WL_CONNECTED)
    {
     
        if(WIFI_Status)
        {
     
            Serial.print(".");
            digitalWrite(LED_BUILTIN, HIGH);  
            delay(500);                       
            digitalWrite(LED_BUILTIN, LOW);    
            delay(500);                 
            count++;
            if(count>=5)//5s后连接失败
            {
     
                WIFI_Status = false;
                Serial.println("WiFi连接失败,请用手机进行配网"); 
            }
        }
        else
        {
     
            smartConfig();  //微信智能配网
        }
     }  
     Serial.println("连接成功");  
     Serial.print("IP:");
     Serial.println(WiFi.localIP());
}

void miotPowerState(const String & state)//电源类操作
{
     
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
     

        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();//反馈状态 
        myservo.write(60);//收到“on”的指令后舵机旋转55度
        delay(1000);
        myservo.write(80);
        Button1.print("on");
 
    }
    else if (state == BLINKER_CMD_OFF) {
     

         BlinkerMIOT.powerState("off");
         BlinkerMIOT.print(); 
         myservo.write(95);
         delay(1000);
         myservo.write(80); 
         Button1.print("off");  
           
    }
}

// 按下按键即会执行该函数
void button1_callback(const String & state)
{
     
    BLINKER_LOG("get button state: ", state);
    if (state=="on") 
    {
     
        myservo.write(60);//收到“on”的指令后舵机旋转55
        delay(1000);
        myservo.write(80);
        Button1.print("on"); 
        
    } else if(state=="off")
    {
     
       myservo.write(95);//长按开关按键后舵机旋转90
       delay(1000);
       myservo.write(80);
       Button1.print("off");
    }
        
}

void heartbeat()
{
     
    //反馈湿度数据
    HUMI.print(humi_read);
    //设置ui组件图标和颜色
    HUMI.icon("fas fa-tint");
    HUMI.color("#0099FF ");

    //反馈温度数据
    TEMP.print(temp_read);
    TEMP.icon("fas fa-thermometer-empty");
    TEMP.color("#FF3300");
}
 
 
void miotQuery(int32_t queryCode)
{
     
    BLINKER_LOG("MIOT Query codes: ", queryCode);

    switch (queryCode)
    {
     
        //同时查询传感器数据
        case BLINKER_CMD_QUERY_ALL_NUMBER :
            BLINKER_LOG("MIOT Query All");
            BlinkerMIOT.temp(temp_read);
            BlinkerMIOT.humi(humi_read);
            BlinkerMIOT.pm25(20);
            BlinkerMIOT.co2(20);
            BlinkerMIOT.print();
            break;
        //查询pm2.5
        case BLINKER_CMD_QUERY_PM25_NUMBER :
            BLINKER_LOG("MIOT Query PM25");
            BlinkerMIOT.pm25(20);
            BlinkerMIOT.print();
            break;
        //查询湿度
        case BLINKER_CMD_QUERY_HUMI_NUMBER :
            BLINKER_LOG("MIOT Query HUMI");
            BlinkerMIOT.humi(humi_read);
            BlinkerMIOT.print();
            break;
        //查询温度
        case BLINKER_CMD_QUERY_TEMP_NUMBER :
            BLINKER_LOG("MIOT Query TEMP");
            BlinkerMIOT.temp(temp_read);
            BlinkerMIOT.print();
            break;
        //查询CO2
        case BLINKER_CMD_QUERY_TIME_NUMBER :
            BLINKER_LOG("MIOT Query co2");
            BlinkerMIOT.co2(20);
            BlinkerMIOT.print();
            break;
        default :
            BlinkerMIOT.temp(20);
            BlinkerMIOT.humi(20);
            BlinkerMIOT.pm25(20);
            BlinkerMIOT.co2(20);
            BlinkerMIOT.print();
            break;
    }
}

void setup()
{
     
    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
    
    // 初始化舵机
    myservo.attach(dj);//舵机的IO口
    myservo.write(80);//上电时舵机75度
    
    BlinkerMIOT.attachPowerState(miotPowerState);
    
    Button1.print("off");
    // 初始化blinker
    Blinker.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str());
    Button1.attach(button1_callback);
    Blinker.attachHeartbeat(heartbeat);
    BlinkerMIOT.attachQuery(miotQuery); //小爱同学 数据反馈
    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;
    }
 
    Blinker.delay(800);
}

四、blinker软件配置

打开blinker软件添加我们的设备,在界面添加我们的控件组件,这里添加三个,和代码匹配

  • 灯的开关 test
  • 温度显示 temp
  • 湿度显示 humi

总结

这样就可以进行blinker app控制我们的卧室灯,也可以通过小爱同学进行卧室灯的开关控制。因为前面文章对小爱同学的控制以及Blinker的添加设备等基本操作详细说明,这里就不耽误大家时间了。

你可能感兴趣的:(ESP8266,物联网,ESP8266,智能家居,blinker)