8266 4路继电器,小爱同学代码应该怎么加,-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1126|回复: 7

[求助] 8266 4路继电器,小爱同学代码应该怎么加,

[复制链接]
发表于 2022-2-18 15:56 | 显示全部楼层 |阅读模式
8266 4路继电器,小爱同学代码应该怎么加,点灯的按钮可以正常使用,小爱同学不能用,继电器为高电平触发,求大神看看
  1. #define BLINKER_WIFI
  2. #define BLINKER_MIOT_MULTI_OUTLET //定义小爱同学为4孔插座
  3. #include <Blinker.h>

  4. char auth[] = "0b64e478e6c9"; //上一步中在app中获取到的Secret Key
  5. char ssid[] = "SM"; //您的WiFi热点名称
  6. char pswd[] = "a88888888"; //您的WiFi密码

  7. //定义继电器信号
  8. #define bt1 5         //定义继电器1信号接入GPIO5,D1
  9. #define bt2 4         //定义继电器2信号接入GPIO4,D2
  10. #define bt3 0         //定义继电器3信号接入GPIO0,D3
  11. #define bt4 2         //定义继电器4信号接入GPIO2,D4

  12. // 新建Blinker软件组件对象
  13. BlinkerButton Button1("Switch1");       //组件对象,要和APP组件中的“数据键名”一致,开关1
  14. BlinkerButton Button2("Switch2");       //组件对象,要和APP组件中的“数据键名”一致,开关2
  15. BlinkerButton Button3("Switch3");       //组件对象,要和APP组件中的“数据键名”一致,开关3
  16. BlinkerButton Button4("Switch4");       //组件对象,要和APP组件中的“数据键名”一致,开关4

  17. // 按下按键1即会执行该函数 浇水
  18. void button1_callback(const String & state) {
  19.   BLINKER_LOG("get button state: ", state);
  20.   if (state == "on") {
  21.     digitalWrite(bt1, HIGH);
  22.     // 反馈开关状态
  23.     Button1.print("on");
  24.   } else if (state == "off") {
  25.     digitalWrite(bt1, LOW);
  26.     // 反馈开关状态
  27.     Button1.print("off");
  28.   }
  29. }

  30. // 按下按键2即会执行该函数 水循环
  31. void button2_callback(const String & state) {
  32.   BLINKER_LOG("get button state: ", state);
  33.   if (state == "on") {
  34.     digitalWrite(bt2, HIGH);
  35.     // 反馈开关状态
  36.     Button2.print("on");
  37.   } else if (state == "off") {
  38.     digitalWrite(bt2, LOW);
  39.     // 反馈开关状态
  40.     Button2.print("off");
  41.   }
  42. }

  43. // 按下按键3即会执行该函数 鱼食
  44. void button3_callback(const String & state) {
  45.   BLINKER_LOG("get button state: ", state);
  46.   if (state == "on") {
  47.     digitalWrite(bt3, HIGH);
  48.     // 反馈开关状态
  49.     Button3.print("on");
  50.     Blinker.delay(10000);//打开后延时10S关闭设置为喂鱼时间,预留网络延迟时间1-2S
  51.     digitalWrite(bt3, LOW);
  52.     // 反馈开关状态
  53.     Button3.print("off");
  54.   } else if (state == "off") {
  55.     digitalWrite(bt3, LOW);
  56.     // 反馈开关状态
  57.     Button3.print("off");
  58.   }
  59. }

  60. // 按下按键4即会执行该函数 水池加水
  61. void button4_callback(const String & state) {
  62.   BLINKER_LOG("get button state: ", state);
  63.   if (state == "on") {
  64.     digitalWrite(bt4, HIGH);
  65.     // 反馈开关状态
  66.     Button4.print("on");
  67.   } else if (state == "off") {
  68.     digitalWrite(bt4, LOW);
  69.     // 反馈开关状态
  70.     Button4.print("off");
  71.   }
  72. }

  73. void setup() {
  74.   // 初始化串口
  75.   Serial.begin(115200);

  76.   // 初始化有LED的IO
  77.   pinMode(bt1, OUTPUT);
  78.   digitalWrite(bt1, LOW);//高电平触发,默认低电平
  79.   pinMode(bt2, OUTPUT);
  80.   digitalWrite(bt2, LOW);
  81.   pinMode(bt3, OUTPUT);
  82.   digitalWrite(bt3, LOW);
  83.   pinMode(bt4, OUTPUT);
  84.   digitalWrite(bt4, LOW);

  85.   // 初始化blinker
  86.   Blinker.begin(auth, ssid, pswd);
  87.   Button1.attach(button1_callback);
  88.   Button2.attach(button2_callback);
  89.   Button3.attach(button3_callback);
  90.   Button4.attach(button4_callback);
  91. }


  92. void loop() {
  93.   Blinker.run();
  94. }
复制代码


发表于 2022-2-19 14:03 | 显示全部楼层
需要在初始化中注册 小爱回调void setup()
{

    //小爱同学注册回调
    BlinkerMIOT.attachPowerState(miotPowerState);//注册小爱电源回调
    BlinkerMIOT.attachColor(miotColor);//注册小爱颜色回调
    BlinkerMIOT.attachBrightness(miotBright);//注册小爱亮度回调
    BlinkerMIOT.attachColorTemperature(miotColoTemp);//注册小爱色温回调
}


控制回调用
//小爱电源类回调,例如:开灯/关灯
void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
       digitalWrite(LED_BUILTIN, LOW);//低电平打开LED
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_OFF) {

        digitalWrite(LED_BUILTIN, HIGH);//高电平关闭LED
        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
    }
}

发表于 2022-2-19 14:06 | 显示全部楼层
需要在初始化中注册小爱回调

void setup()
{
    // 初始化串口


    //小爱同学注册回调
    BlinkerMIOT.attachPowerState(miotPowerState);//注册小爱电源回调
    BlinkerMIOT.attachColor(miotColor);//注册小爱颜色回调
    BlinkerMIOT.attachBrightness(miotBright);//注册小爱亮度回调
    BlinkerMIOT.attachColorTemperature(miotColoTemp);//注册小爱色温回调



//再用小爱电源类回调,例如:开灯/关灯
void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
       digitalWrite(LED_BUILTIN, LOW);//低电平打开LED
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_OFF) {

        digitalWrite(LED_BUILTIN, HIGH);//高电平关闭LED
        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
    }
}

 楼主| 发表于 2022-2-19 14:48 | 显示全部楼层
tao555 发表于 2022-2-19 14:03
需要在初始化中注册 小爱回调void setup()
{

我是定义的多孔插座,小爱怎么控制
发表于 2022-2-19 16:01 | 显示全部楼层
xiaosa049 发表于 2022-2-19 14:48
我是定义的多孔插座,小爱怎么控制

光定义个类型有什么用,你的程序没有一句接受小爱控制的,当然控制不了。
你试试在初始化中加入
BlinkerMIOT.attachPowerState(miotPowerState);//注册小爱电源回调

在加入函数
void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
       digitalWrite(LED_BUILTIN, LOW);//低电平打开LED
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_OFF) {

        digitalWrite(LED_BUILTIN, HIGH);//高电平关闭LED
        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
    }
}


这是一段单路 支持小爱控制的开关代码 请参考

#define BLINKER_MIOT_LIGHT
#define BLINKER_WIFI

#include <Blinker.h>

char auth[] = "ff376716aec4";//电灯科技上的密钥
char ssid[] = "360WiFi-ABDBDF";//你家的WiFi名字
char pswd[] = "@XINYU404";//你家WiFi的密码

int GPIO=0;

#define BUTTON_1 "ButtonKey"


BlinkerButton Button1("anniu");//这个anniu必须要和电灯科技上的按键相同

void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);
    digitalWrite(GPIO,!digitalRead(GPIO));
    Blinker.vibrate();
}

void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ",state);

    if (state == BLINKER_CMD_OFF) {
        digitalWrite(GPIO, HIGH);

        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_ON) {
        digitalWrite(GPIO, LOW);
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
    }
}


void setup() {
    Serial.begin(115200);
    pinMode(GPIO,OUTPUT);
    digitalWrite(GPIO,HIGH);
    Blinker.begin(auth, ssid, pswd);
    Button1.attach(button1_callback);
    BlinkerMIOT.attachPowerState(miotPowerState);

}

void loop()
{
    Blinker.run();
}
 楼主| 发表于 2022-2-20 10:48 | 显示全部楼层
tao555 发表于 2022-2-19 16:01
光定义个类型有什么用,你的程序没有一句接受小爱控制的,当然控制不了。
你试试在初始化中加入
Blinker ...

还是不太懂
//小爱同学
void miotPowerState(const String & state)
{
  BLINKER_LOG("need set power state: ", state);

  if (state == BLINKER_CMD_ON) {
    digitalWrite(bt1, HIGH);
    // 反馈开关状态
    Button1.print("on");
    BlinkerMIOT.powerState("on");
    BlinkerMIOT.print();
  }
  else if (state == BLINKER_CMD_OFF) {
    digitalWrite(bt1, LOW);
    // 反馈开关状态
    Button1.print("off");
    BlinkerMIOT.powerState("off");
    BlinkerMIOT.print();
  }
}
我这样可以开第一路,其余的开不了
发表于 2022-2-21 09:46 | 显示全部楼层
xiaosa049 发表于 2022-2-20 10:48
还是不太懂
//小爱同学
void miotPowerState(const String & state)

既然实现了一路操作,其他路也加上相应的控制语句就可以了
发表于 2022-2-21 10:03 | 显示全部楼层
我想应该是这样写,我没多路控制,没试过。


//按钮事件1
void 你的按钮X_callback(const String & state)        //换成你的按钮定义
{
    BLINKER_LOG("get button state: ", state);
    digitalWrite(按钮端口X,!digitalRead(按钮端口X));  //换成你的按钮端口    Blinker.vibrate();   //震动反馈
}
//按钮事件2
void 你的按钮X_callback(const String & state)        //换成你的按钮定义
{
    BLINKER_LOG("get button state: ", state);
    digitalWrite(按钮端口X,!digitalRead(按钮端口X)); //换成你的按钮端口    Blinker.vibrate();   //震动反馈
}

。。。。。。//有几路写几个


下面是小爱同学控制
//小爱同学1
void miotPowerState(const String & state)
{
  BLINKER_LOG("need set power state: ", state);

  if (state == BLINKER_CMD_ON) {
    digitalWrite(按钮端口X, HIGH);//换成你要控制的端口
    // 反馈开关状态
    Button1.print("on");
    BlinkerMIOT.powerState("on");
    BlinkerMIOT.print();
  }
  else if (state == BLINKER_CMD_OFF) {
    digitalWrite(按钮端口X, LOW);//与上面端口一致
    // 反馈开关状态
    Button1.print("off");
    BlinkerMIOT.powerState("off");
    BlinkerMIOT.print();
  }
}
//小爱同学2
void miotPowerState(const String & state)
{
  BLINKER_LOG("need set power state: ", state);

  if (state == BLINKER_CMD_ON) {
    digitalWrite(按钮端口X, HIGH);//换成你要控制的端口
    // 反馈开关状态
    Button1.print("on");
    BlinkerMIOT.powerState("on");
    BlinkerMIOT.print();
  }
  else if (state == BLINKER_CMD_OFF) {
    digitalWrite(按钮端口X, LOW);//与上面端口一致
    // 反馈开关状态
    Button1.print("off");
    BlinkerMIOT.powerState("off");
    BlinkerMIOT.print();
  }
}
.。。。。。//有几路写几次
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 10:37 , Processed in 0.130768 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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