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

ESP8266

一、简介

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

二、硬件连接

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

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

DHT11

ES8266温湿度传感器
GPIO2DATA
3.3VVCC
GNDGND

三、代码

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

gitee 代码链接

#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#define BLINKER_MIOT_SENSOR   //定义为语音控制传感器设备 
#include <Blinker.h>
#include <Servo.h>
#include <DHT.h>

#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的添加设备等基本操作详细说明,这里就不耽误大家时间了。

  • 5
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值