涂鸦arduino中文社区活动
查看: 670|回复: 4

小爱如何反馈灯的状态

[复制链接]

该用户从未签到

发表于 2021-1-18 17:23 | 显示全部楼层 |阅读模式
可以实现通过小爱控制开关灯
但是调用查询接口时
无法通过switch里的BLINKER_CMD_QUERY_POWERSTATE_NUMBER来反馈
当和小爱说查询灯的状态时串口显示直接进入了default
然后回答“奇怪,设备们都不理我了”
源码放评论区,求教各位
下面分别是“打开灯”“关闭灯”“灯的状态”的串口显示
[635745] MIOT Query codes: 0
[635809] 进入default
[636361] 小爱正在读取灯的状态: on
[636362] 已打开
[647208] MIOT Query codes: 0
[647269] 进入default
[647605] 小爱正在读取灯的状态: off
[647605] 已关闭
[673832] MIOT Query codes: 0
[673890] 进入default
[690021] MIOT Query codes: 0
[690097] 进入default


该用户从未签到

 楼主| 发表于 2021-1-18 17:23 | 显示全部楼层
本帖最后由 francis00315 于 2021-1-18 17:25 编辑

#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#define BLINKER_PRINT Serial
#include <Blinker.h>

char auth[] = "******";
char ssid[] = "*****";
char pswd[] = "****";

// 新建组件对象
BlinkerButton Button1("btn-abc");
BlinkerButton Button2("btn-state");
BlinkerNumber Number1("num-abc");

bool ostate = false;
int counter = 0;

// 按下按键即会执行该函数
void button1_callback(const String & state) {
    BLINKER_LOG("获取灯的状态: ", state);

    //digitalWrite(4, !digitalRead(4));

     if (state=="on") {
        digitalWrite(4, HIGH);
        // 反馈开关状态
        BLINKER_LOG("正在为您开灯");   
        BLINKER_LOG("已打开");
        Button1.print("on");
    } else if(state=="off"){
        digitalWrite(4, LOW);
        // 反馈开关状态
        BLINKER_LOG("正在为您关灯");
        BLINKER_LOG("已关闭");
        Button1.print("off");
        Button1.color("#000000");
    }
}
void button2_callback(const String & state) {
    BLINKER_LOG("获取灯的状态: ", state);

     if (state=="tap")
     {
        if (digitalRead(4)==HIGH)
        {
          Button2.print("灯是打开的");
          BLINKER_LOG("已打开");
        }
        else
        {
          Button2.print("已经关闭了哦");
          BLINKER_LOG("已关闭");
        }
     }
}
//小爱电源类的操作接口
void miotPowerState(const String & state)
{
    BLINKER_LOG("小爱正在读取灯的状态: ", state);

    if (state == BLINKER_CMD_ON) {
        digitalWrite(4, HIGH);

        BlinkerMIOT.powerState("on");
        BLINKER_LOG("已打开");
        BlinkerMIOT.print();
        ostate = true;
    }
    else if (state == BLINKER_CMD_OFF) {
        digitalWrite(4, LOW);

        BlinkerMIOT.powerState("off");
        BLINKER_LOG("已关闭");
        BlinkerMIOT.print();
        ostate = false;
    }
}

void miotQuery(int32_t queryCode)
{
  BLINKER_LOG("MIOT Query codes: ", queryCode);

  switch (queryCode)
  {
    case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
      BLINKER_LOG("灯的状态");
      BlinkerMIOT.powerState(ostate ? "on" : "off");
      BlinkerMIOT.print();
      break;
    default :
      BlinkerMIOT.powerState(ostate ? "on" : "off");
      BlinkerMIOT.print();
      BLINKER_LOG("进入default");
      break;
  }
}
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    counter++;
    Number1.print(counter);
}

void setup() {
    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
    #if defined(BLINKER_PRINT)
        BLINKER_DEBUG.stream(BLINKER_PRINT);
    #endif

    // 初始化有LED的IO
    pinMode(4, OUTPUT);
    digitalWrite(4, LOW);
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);
    Button1.attach(button1_callback);
    Button2.attach(button2_callback);
    BlinkerMIOT.attachPowerState(miotPowerState);
    BlinkerMIOT.attachQuery(miotQuery);    //语音指令与控制函数对应(查询指令)
}

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

该用户从未签到

 楼主| 发表于 2021-1-20 13:09 | 显示全部楼层
顶一下帖,球球了

该用户从未签到

 楼主| 发表于 2021-1-21 09:15 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

点灯·blinker-3 天猫精灵接入8266+继电器控制灯
点灯·blinker-3 天猫精灵
继续倒腾,今天试试把“点灯”接入家里的天猫精灵。 参考“点灯”官网教程:ht
stm32f103刷arduino 掉坑里了,出不来了
stm32f103刷arduino 掉坑
买了一个stm32f103c8t6的小板子,照教程刷了generic_boot20_pc13.bin,一切正常,用us
关于数据API调用的疑问
关于数据API调用的疑问
zai 调取数据时候 返回的是 response 400. 这是什么问题 是因为token算的不对
第一次装Visual Studio系统找不到指定文件要怎么解决啊
第一次装Visual Studio系
DIY宠物喂食器,竟如此简单,更有硬件开发工具免费领!
DIY宠物喂食器,竟如此简
去年疫情突发,封城、封小区以及人员隔离,让原本享受千般宠爱的主子们变成了靠吃猫砂
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表