有大神能给解答一下,小爱同学命令可以发送串口信息吗-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2224|回复: 7

[已解答] 有大神能给解答一下,小爱同学命令可以发送串口信息吗

[复制链接]
发表于 2020-6-10 16:22 来自手机 | 显示全部楼层 |阅读模式
我有一个8266继电器,他的开合是通过串口发送16位码来开合,小爱同学有这个命令吗,试了半天没有成功。有大神能给解答一下吗
发表于 2020-6-10 16:58 | 显示全部楼层
你收到blinker传来的小爱指令后,你自己发就行了
 楼主| 发表于 2020-6-10 17:54 | 显示全部楼层
void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
        digitalWrite(D1, HIGH);
        delay(200);
        Serial.write(data1on, 4);
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
        oState = true;
    }
    else if (state == BLINKER_CMD_OFF) {
        digitalWrite(D1, LOW);
        delay(200);
        Serial.write(data1off, 4);
        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
         oState = false;
    }
}
这样是不是不行,收到小爱指令是说的收到回调函数吗?

点评

这样可以,将delay换成blinker.delay  详情 回复 发表于 2020-6-11 08:50
发表于 2020-6-11 08:50 | 显示全部楼层
minqqq 发表于 2020-6-10 17:54
void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

这样可以,将delay换成blinker.delay
 楼主| 发表于 2020-6-11 12:17 来自手机 | 显示全部楼层
我开始用的就是blinker.delay,但是这样用小爱控制没有反应,点灯的按钮控制没问题

点评

把你的delay和串口操作都放到MIOT.print后面,你放前面,就会导致反馈超时  详情 回复 发表于 2020-6-11 14:02
发表于 2020-6-11 14:02 | 显示全部楼层
minqqq 发表于 2020-6-11 12:17
我开始用的就是blinker.delay,但是这样用小爱控制没有反应,点灯的按钮控制没问题 ...

把你的delay和串口操作都放到MIOT.print后面,你放前面,就会导致反馈超时
 楼主| 发表于 2020-6-11 20:09 | 显示全部楼层
放在后面了还是没用,顺便问一下小爱会返回动作信息吗?
#define BLINKER_PRINT Serial
#define BLINKER_MIOT_OUTLET
#define BLINKER_WIFI
#define BLINKER_ESP_SMARTCONFIG
#include <Blinker.h>

char auth[] = "  ";  //设备key

BlinkerButton Button1("btn-1");
BlinkerButton Button2("btn-2");
BlinkerButton Button3("btn-3");
char data1on[4] = {0xA0, 0x01, 0x01, 0xA2};
char data1off[4] = {0xA0, 0x01, 0x00, 0xA1};
char data2on[4] = {0xA0, 0x02, 0x01, 0xA3};
char data2off[4] = {0xA0, 0x02, 0x00, 0xA2};
unsigned long Timers[3]={0};
char i;
int D1=0;
int D2=2;
bool oState=false;
void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

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

        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
         Blinker.delay(200);
        Serial.write(data1on, 4);
        oState = true;
    }
    else if (state == BLINKER_CMD_OFF) {
        digitalWrite(D1, LOW);

        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
        Blinker.delay(200);
        Serial.write(data1off, 4);
         oState = false;
    }
}

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.powerState(oState ? "on" : "off");
            BlinkerMIOT.print();
            break;
        case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
            BLINKER_LOG("MIOT Query Power State");
            BlinkerMIOT.powerState(oState ? "on" : "off");
            BlinkerMIOT.print();
            break;
        default :
            BlinkerMIOT.powerState(oState ? "on" : "off");
            BlinkerMIOT.print();
            break;
    }
}

void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);

    Blinker.vibrate();
   
    uint32_t BlinkerTime = millis();
   
    Blinker.print("millis", BlinkerTime);
}

void button1_callback(const String & state) {
  BLINKER_LOG("get button state: ", state);
  digitalWrite(D2, LOW);
  Blinker.delay(50);
  digitalWrite(D1, HIGH);
  Blinker.delay(50);
  Serial.write(data2off, 4);
  Blinker.delay(50);
  Serial.write(data1on, 4);
   Button1.print("on");
  Button1.icon("fas fa-lightbulb");
  Button1.color("#fddb00");
  Button1.text("打开啦");
  Button2.print("off");
  Button2.icon("fas fa-lightbulb");
  Button2.color("#000000");
  Button2.text("关灯");

}
void button2_callback(const String & state) {
  BLINKER_LOG("get button state: ", state);
  digitalWrite(D1, LOW);
  Blinker.delay(50);
  digitalWrite(D2, HIGH);
  Blinker.delay(50);
  Serial.write(data1off, 4);
  Blinker.delay(50);
  Serial.write(data2on, 4);
  Button2.print("on");
  Button2.icon("fas fa-lightbulb");
  Button2.color("#fddb00");
  Button2.text("打开啦");
  Button1.print("off");
  Button1.icon("fas fa-lightbulb");
  Button1.color("#000000");
  Button1.text("关灯");

  
}
void button3_callback(const String & state) {
  BLINKER_LOG("get button state: ", state);
  digitalWrite(D1, LOW);
  Blinker.delay(50);
  digitalWrite(D2, LOW);
  Blinker.delay(50);
  Serial.write(data1off, 4);
  Blinker.delay(50);
  Serial.write(data2off, 4);
  Blinker.delay(50);
  Button1.print("off");
  Button1.icon("fas fa-lightbulb");
  Button1.color("#000000");
  Button1.text("关灯");
  Button2.print("off");
  Button2.icon("fas fa-lightbulb");
  Button2.color("#000000");
  Button2.text("关灯");
  Button3.print("off");
  Button3.icon("fas fa-lightbulb");
  Button3.color("#000000");
  Button3.text("关闭");
}
void heartbeat(){
  BLINKER_LOG("状态同步!");
  if(digitalRead(D1)==HIGH){
  Button1.print("on");
  Button1.icon("fas fa-lightbulb");
  Button1.color("#fddb00");
  Button1.text("打开啦");
  }
  else{
     Button1.print("off");
  Button1.icon("fas fa-lightbulb");
  Button1.color("#000000");
  Button1.text("关灯");
  }
   if(digitalRead(D2)==HIGH){
  Button2.print("on");
  Button2.icon("fas fa-lightbulb");
  Button2.color("#fddb00");
  Button2.text("打开啦");
   }
   else{
  Button2.print("off");
  Button2.icon("fas fa-lightbulb");
  Button2.color("#000000");
  Button2.text("关灯");
   }
}
void setup() {
  // 初始化串口
  Serial.begin(115200);
  BLINKER_DEBUG.stream(Serial);
  BLINKER_DEBUG.debugAll();

  // 初始化有LED的IO
  pinMode(D1, OUTPUT);
  digitalWrite(D1, LOW);
  pinMode(D2, OUTPUT);
  digitalWrite(D2, LOW);
  // 初始化blinker
  Blinker.begin(auth);
  Button1.attach(button1_callback);
  Button2.attach(button2_callback);
  Button3.attach(button3_callback);
  Blinker.attachHeartbeat(heartbeat);
  BlinkerMIOT.attachPowerState(miotPowerState);
  BlinkerMIOT.attachQuery(miotQuery);
  Blinker.attachData(dataRead);
}

void loop() {
  Blinker.run();
}
这是我的代码,麻烦大神看看
 楼主| 发表于 2020-6-12 14:14 | 显示全部楼层
要是不加delay可以吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 09:32 , Processed in 0.108138 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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