求助esp8266使用小爱同学 、天猫精灵无法控制,附带源码-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3703|回复: 10

[已解答] 求助esp8266使用小爱同学 、天猫精灵无法控制,附带源码

[复制链接]
发表于 2021-2-2 21:36 | 显示全部楼层 |阅读模式
#define BLINKER_WIFI
#define BLINKER_ESP_SMARTCONFIG
#define BLINKER_ALIGENIE_MULTI_OUTLET
#define BLINKER_MIOT_MULTI_OUTLET
#include <Blinker.h>
#define LED 5
#define LED2 4

char auth[] = "5ee963455d27";  //设备密匙
char ssid[] = "H3C_fl";
char pswd[] = "fxb12251314";

// 新建组件对象
BlinkerButton Button1("btn-1");    // APP组件名称
BlinkerButton Button2("btn-2");    // APP组件名称
BlinkerButton Button3("btn-3");    // APP组件名称
BlinkerNumber Number1("num-xxx");  // blinker新建组件
bool switch_onoff = 0;             //开关标志位
bool switch_onoff_2 = 0;
bool switch_onoff_3 = 0;
bool oState[5] = { false };
//开灯函数1
void ON() {
  digitalWrite(LED, HIGH);
  Button1.color("#B22222");
  Button1.text("点我关灯");
  Button1.print();
  switch_onoff = 1;
}
//关灯函数1
void OFF() {
  digitalWrite(LED, LOW);
  Button1.color("#000000");
  Button1.text("点我开灯");
  Button1.print();
  switch_onoff = 0;
}

//开灯函数2
void ON2() {
  digitalWrite(LED2, HIGH);
  Button2.color("#B22222");
  Button2.text("点我关灯");
  Button2.print();
  switch_onoff_2 = 1;
}
//关灯函数2
void OFF2() {
  digitalWrite(LED2, LOW);
  Button2.color("#000000");
  Button2.text("点我开灯");
  Button2.print();
  switch_onoff_2 = 0;
}

void heartbeat()  //心跳包
{
  Number1.print(WiFi.RSSI());  //信号强度

  if (switch_onoff == 1) {
    Button1.color("#B22222");
    Button1.text("点我关灯");
    Button1.print();
    BUILTIN_SWITCH.print("on");
  } else {
    Button1.color("#000000");
    Button1.text("点我开灯");
    Button1.print();
    BUILTIN_SWITCH.print("off");
  }
  if (switch_onoff_2 == 1) {
    Button2.color("#B22222");
    Button2.text("点我关灯");
    Button2.print();
    BUILTIN_SWITCH.print("on");
  } else {
    Button2.color("#000000");
    Button2.text("点我开灯");
    Button2.print();
    BUILTIN_SWITCH.print("off");
  }
}

// 按下APP按键即会执行该函数
void button1_callback(const String &state) {
  switch_onoff = !switch_onoff;
  if (switch_onoff) {
    ON();
  } else {
    OFF();
  }

  BLINKER_LOG("get button state: ", state);
}

// 按下APP按键即会执行该函数2
void button2_callback(const String &state) {
  switch_onoff_2 = !switch_onoff_2;
  if (switch_onoff_2) {
    ON2();
  } else {
    OFF2();
  }

  BLINKER_LOG("get button state2: ", state);
}

// 按下APP按键即会执行该函数3
void button3_callback(const String &state) {
  switch_onoff_3 = !switch_onoff_3;
  if (switch_onoff_3) {
    ON();
    ON2();
  } else {
    OFF();
    OFF2();
  }

  BLINKER_LOG("get button state2: ", state);
}

////////阿里精灵
void aligeniePowerState(const String & state, uint8_t num)
{
  BLINKER_LOG("need set outlet: ", num, ", power state: ", state);
  if (state == BLINKER_CMD_ON) {
    if (num == 1) {
      switch_onoff = 1;
      ON();
      BlinkerAliGenie.powerState("on", 1);
      BlinkerAliGenie.print();
    }
    else if (num == 2) {
      switch_onoff_2 = 1;
      ON2();
      BlinkerAliGenie.powerState("on", 2);
      BlinkerAliGenie.print();
    }
    else if (num == 0) {
      switch_onoff = 1;
      switch_onoff_2 = 1;
      switch_onoff_3 = 1;
      ON();
      ON2();
      BlinkerAliGenie.powerState("on", 0);
      BlinkerAliGenie.print();
    }
  }
  else if (state == BLINKER_CMD_OFF) {
    if (num == 1) {
      switch_onoff = 0;
      OFF();
      BlinkerAliGenie.powerState("off", 1);
      BlinkerAliGenie.print();
    }
    else if (num == 2) {
      switch_onoff_2 = 0;
      OFF2();
      BlinkerAliGenie.powerState("off", 2);
      BlinkerAliGenie.print();
    }
    else if (num == 0) {
      switch_onoff = 0;
      switch_onoff_2 = 0;
      switch_onoff_3 = 0;
      OFF();
      OFF2();
      BlinkerAliGenie.powerState("off", 0);
      BlinkerAliGenie.print();
    }
  }
}
/////////
void miotPowerState(const String & state, uint8_t num)
{
  BLINKER_LOG("need set outlet: ", num, ", power state: ", state);
  if (state == BLINKER_CMD_ON) {
    if (num == 1) {
      switch_onoff = 1;
      ON();
      BlinkerMIOT.powerState("on", 1);
      BlinkerMIOT.print();
    }
    else if (num == 2) {
      switch_onoff_2 = 1;
      ON2();
      BlinkerMIOT.powerState("on", 2);
      BlinkerMIOT.print();
    }
    else if (num == 0) {
      switch_onoff = 1;
      switch_onoff_2 = 1;
      switch_onoff_3 = 1;
      ON();
      ON2();
      BlinkerMIOT.powerState("on", 0);
      BlinkerMIOT.print();
    }
  }
  else if (state == BLINKER_CMD_OFF) {
    if (num == 1) {
      switch_onoff = 0;
      OFF();
      BlinkerMIOT.powerState("off", 1);
      BlinkerMIOT.print();
    }
    else if (num == 2) {
      switch_onoff_2 = 0;
      OFF2();
      BlinkerMIOT.powerState("off", 2);
      BlinkerMIOT.print();
    }
    else if (num == 0) {
      switch_onoff = 0;
      switch_onoff_2 = 0;
      switch_onoff_3 = 0;
      OFF();
      OFF2();
      BlinkerMIOT.powerState("off", 0);
      BlinkerMIOT.print();
    }
  }
}
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 switch_callback(const String &state) {
  BLINKER_LOG("get switch state: ", state);

  if (state == BLINKER_CMD_ON) {
    ON();
    ON2();
    BUILTIN_SWITCH.print("on");
  } else {
    OFF();
    OFF2();
    BUILTIN_SWITCH.print("off");
  }
}

void setup() {
  // 初始化串口
  Serial.begin(115200);
  BLINKER_DEBUG.stream(Serial);
  // BLINKER_DEBUG.debugAll();
  // 初始化IO
  pinMode(12, INPUT);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);
  pinMode(LED2, OUTPUT);
  digitalWrite(LED2, LOW);
  // 初始化blinker
  Blinker.begin(auth, ssid, pswd);

  Button1.attach(button1_callback);
  Button2.attach(button2_callback);
  Button3.attach(button3_callback);
  Blinker.attachHeartbeat(heartbeat);
  BlinkerAliGenie.attachPowerState(aligeniePowerState);  //天猫精灵开关
  BlinkerMIOT.attachPowerState(miotPowerState);
  BlinkerMIOT.attachQuery(miotQuery);
  BUILTIN_SWITCH.attach(switch_callback);
}

void loop() {
  Blinker.run();
}

发表于 2021-2-2 22:56 | 显示全部楼层
确保lib和package为最新,并测试例程,如果还是不行,请看调试信息是否有报错
 楼主| 发表于 2021-2-2 23:47 | 显示全部楼层
奈何col 发表于 2021-2-2 22:56
确保lib和package为最新,并测试例程,如果还是不行,请看调试信息是否有报错 ...

QQ截图20210202234613.png 这里呼叫天猫和小爱没有任何反应

 楼主| 发表于 2021-2-2 23:48 | 显示全部楼层
https://github.com/blinker-iot/blinker-library/blob/master/examples/Blinker_AliGenie/AliGenie_MULTI_OUTLET/AliGenie_MULTI_OUTLET.ino   用这个直接写入测试也没有反应

点评

您确定您写入了,用的例程?正常情况,串口也应该有输出  详情 回复 发表于 2021-2-3 00:11
发表于 2021-2-3 00:11 | 显示全部楼层
1278945 发表于 2021-2-2 23:48
https://github.com/blinker-iot/blinker-library/blob/master/examples/Blinker_AliGenie/AliGenie_MULTI_ ...

您确定您写入了,用的例程?正常情况,串口也应该有输出
 楼主| 发表于 2021-2-3 00:24 | 显示全部楼层
奈何col 发表于 2021-2-3 00:11
您确定您写入了,用的例程?正常情况,串口也应该有输出

确定写入了, app操作可以 。
语音控制不能用我找不出什么原因
发表于 2021-2-3 10:24 | 显示全部楼层
1278945 发表于 2021-2-3 00:24
确定写入了, app操作可以 。
语音控制不能用我找不出什么原因

我在blinker的官网发现只有阿里云的设备key才可以使用语音控制,我之前问题和你一样,换了一下设备就可以了
发表于 2021-2-3 10:26 | 显示全部楼层
奈何col 发表于 2021-2-2 22:56
确保lib和package为最新,并测试例程,如果还是不行,请看调试信息是否有报错 ...

可能是服务器的问题。语音控制不支持电灯科技的key但是支持阿里云的key

点评

目前语音助手接入,只有阿里broker支持,这个文档有写明  详情 回复 发表于 2021-2-3 10:36
发表于 2021-2-3 10:36 | 显示全部楼层
3137234383 发表于 2021-2-3 10:26
可能是服务器的问题。语音控制不支持电灯科技的key但是支持阿里云的key

目前语音助手接入,只有阿里broker支持,这个文档有写明,请阅读文档https://diandeng.tech/doc/voice-assistant

 楼主| 发表于 2021-2-3 14:10 | 显示全部楼层
3137234383 发表于 2021-2-3 10:24
我在blinker的官网发现只有阿里云的设备key才可以使用语音控制,我之前问题和你一样,换了一下设备就可以 ...

是阿里云
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 14:48 , Processed in 0.154420 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表