又双叒更新同步开关状态 ,小爱同学+app+本地按键控制状.....-Arduino中文社区 - Powered by Discuz! Archiver

一入极客深似海 发表于 2020-3-7 16:09

z01228 发表于 2020-3-7 12:38
应该是你没有定义好io口 我重新写了下程序你试一试

没问题了,谢谢大神。我再仔细读读你这个程序。感谢感谢感谢

一入极客深似海 发表于 2020-3-7 16:27

z01228 发表于 2020-3-7 12:27
你用这个试一试。我加了程序防抖。这个程序可以app+小爱+本地按键控制。状态也可以同步。




你给定义的 void sdms()中串口打印:本地开关动作!在串口中是一直在不停的刷新。我给改了一下。只有在按的时候才会显示。

这是串口显示内容:
亮灯!
本地开关动作!
ERROR: MQTT NOT ALIVE OR MSG LIMIT
灭灯!
本地开关动作!
ERROR: MQTT NOT ALIVE OR MSG LIMIT

虽然不知道    ERROR: MQTT NOT ALIVE OR MSG LIMIT这一行是怎么来的,但是也无伤大雅。
我把代码给你
void sdms(){

if (digitalRead(kg)==HIGH&&digitalRead(kg2)==LOW) { //
    Blinker.delay(150);//延时150ms不能太少标准按键成功率
   
    if (digitalRead(kg2)==HIGH){
      BLINKER_LOG("亮灯!");                         //串口打印
      digitalWrite(kg,LOW);
      Button1.color("#0000FF");                  //设置app按键是浅蓝色
      Button1.text("亮");
      Button1.print("on");
         BLINKER_LOG("本地开关动作!");
      }
}
if (digitalRead(kg)==LOW&&digitalRead(kg2)==LOW) {            
    Blinker.delay(150);
    if (digitalRead(kg2)==HIGH){
      BLINKER_LOG("灭灯!");                           //串口打印
      digitalWrite(kg, HIGH);
      Button1.color("#00FFFF");                     //设置app按键是深蓝色
      Button1.text("灭");
      Button1.print("off");
         BLINKER_LOG("本地开关动作!");
      }
}
}

你能给提提建议也是极好的。你的建议对我很重要。对你再次表达感激。

一入极客深似海 发表于 2020-3-7 17:38

本帖最后由 一入极客深似海 于 2020-3-7 17:43 编辑

不会飞的猪 发表于 2020-3-7 12:22
你是怎样实现即用物理开关控制又用APP控制的呢?求教
我用的是这个
这是我的程序,你只要会接线就没问题了

/************官方按键示例程序详细注释,方便第一次看程序的。如果有错误的及时通知下修改***************
   十六进制颜色码
   (#FF0000 红色)(#FFFF00 黄色)(#FFFFFF 白色)(#0000FF 蓝色)(#00FFFF 浅蓝色)(#FFFFFF白色)
   程序特色1.app控制2.小爱控制3.状态同步4.添加本地按键
   D7接继电器,开机默认(low)动作,D6接本地轻触按键(与GND接触就动作(按下轻开才动作))
      
*/
   

#define BLINKER_WIFI                  //官方wifi协议库
#define BLINKER_MIOT_LIGHT            //小爱灯类库
#define BLINKER_PRINT Serial            //串口协议库
#include <Blinker.h>                  //官方库

char auth[] = "*******";         //设备key号
char ssid[] = "********";                     //wifi名称
char pswd[] = "*********";            //wifi密码
             //wifi密码

int kg=D7;//继电器输出 此引脚控制输出
int kg2=D6;//本地轻触开关,此引脚连接本地轻触开关与GND接,动作


//*******新建组件对象
BlinkerButton Button1("k1");            //设置app按键的键名

//*******app上按下按键即会执行该函数app里按键有2种模式3钟不同样式,下面写出所有的开关状态。
void button1_callback(const String & state)            //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
{
BLINKER_LOG("app操作了!: ", state);                //串口打印

if (digitalRead(kg)==LOW) {            //如果state是on状态
    BLINKER_LOG("灭灯!");                           //串口打印
    digitalWrite(kg, HIGH);
    Button1.color("#00FFFF");                     //设置app按键是深蓝色
    Button1.text("灭");
    Button1.print("off");                         //反馈回按键状态是开
}
else if (digitalRead(kg)==HIGH) {       //如果state是off状态
    BLINKER_LOG("亮灯!");                         //串口打印
   digitalWrite(kg,LOW);
    Button1.color("#0000FF");                  //设置app按键是浅蓝色
    Button1.text("亮");
    Button1.print("on");                      //反馈回按键状态是关
}
}
//*******如果小爱有对设备进行操作就执行下面
void miotPowerState(const String & state)
{
    BLINKER_LOG("小爱语音操作!");            //串口打印

    if (state == BLINKER_CMD_ON){
      digitalWrite(kg,LOW);
      BlinkerMIOT.powerState("on");
      BLINKER_LOG("亮灯!");
      BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_OFF){
      digitalWrite(kg,HIGH);
      BlinkerMIOT.powerState("off");
      BLINKER_LOG("灭灯!");
      BlinkerMIOT.print();
    }
}
//*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态30s~60s一次
void heartbeat()
{
BLINKER_LOG("状态同步!");
   if (digitalRead(kg)==LOW)
    {
      Button1.print("on");
      Button1.color("#0000FF");            //设置app按键是浅蓝色
      Button1.text("亮");
    }
    else
    {
    Button1.print("off");
    Button1.color("#00FFFF");            //设置app按键是深蓝色
    Button1.text("灭");
    }
}
///如果本地开关有动作执行下面手动模式
void sdms(){

if (digitalRead(kg)==HIGH&&digitalRead(kg2)==LOW) { //
    Blinker.delay(150);//延时150ms不能太少标准按键成功率
   
    if (digitalRead(kg2)==HIGH){
      BLINKER_LOG("亮灯!");                         //串口打印
      digitalWrite(kg,LOW);
      Button1.color("#0000FF");                  //设置app按键是浅蓝色
      Button1.text("亮");
      Button1.print("on");
         BLINKER_LOG("本地开关动作!");
      }
}
if (digitalRead(kg)==LOW&&digitalRead(kg2)==LOW) {            
    Blinker.delay(150);
    if (digitalRead(kg2)==HIGH){
      BLINKER_LOG("灭灯!");                           //串口打印
      digitalWrite(kg, HIGH);
      Button1.color("#00FFFF");                     //设置app按键是深蓝色
      Button1.text("灭");
      Button1.print("off");
         BLINKER_LOG("本地开关动作!");
      }
}
}
void setup()
{
// 初始化串口
Serial.begin(9600);
BLINKER_DEBUG.stream(Serial);

// 初始化有LED的IO
pinMode(kg, OUTPUT);
digitalWrite(kg, LOW);            //默认上电是开LOW 时的是接通继电器。
pinMode(kg2,INPUT_PULLUP);         //输入上拉

// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Button1.attach(button1_callback);            //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"
BlinkerMIOT.attachPowerState(miotPowerState);            //小爱语音操作注册函数
Blinker.attachHeartbeat(heartbeat);            //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。
}

void loop() {
sdms();//本地开关手动模式函数
Blinker.run();
}


不会飞的猪 发表于 2020-3-7 18:06

z01228 发表于 2020-3-7 12:27
你用这个试一试。我加了程序防抖。这个程序可以app+小爱+本地按键控制。状态也可以同步。




我的意思是电路接线如何实现的嘿嘿

不会飞的猪 发表于 2020-3-7 18:11

一入极客深似海 发表于 2020-3-7 17:38
我用的是这个
这是我的程序,你只要会接线就没问题了



我就是在想咋接线的问题

一入极客深似海 发表于 2020-3-7 18:44

本帖最后由 一入极客深似海 于 2020-3-7 18:58 编辑

不会飞的猪 发表于 2020-3-7 18:11
我就是在想咋接线的问题
D7(控制引脚)-------->发光二极管----------VCC.
D6(本地轻触开关的引脚)-------->轻触开关----------->GND

就这么接

1411881729 发表于 2020-3-7 21:20

楼主 可以发一下串口监控工具吗

z01228 发表于 2020-3-8 09:50

一入极客深似海 发表于 2020-3-7 16:27
你给定义的 void sdms()中串口打印:本地开关动作!在串口中是一直在不停的刷新。我给改了一下。只有在 ...

这个我还真没有去注意:lol 串口印这个东西 在调试时比较有用,实际应用时可以不写的

z01228 发表于 2020-3-8 09:52

1411881729 发表于 2020-3-7 21:20
楼主 可以发一下串口监控工具吗

ide自己有的

weiding 发表于 2020-3-8 12:17

esp01s v4.0的继电器模块不得的
页: 1 [2] 3 4 5 6 7 8 9 10 11
查看完整版本: 又双叒更新同步开关状态 ,小爱同学+app+本地按键控制状.....