app端打开,怎么获取当前开关状态?-Arduino中文社区 - Powered by Discuz! Archiver

bigfou 发表于 2020-3-4 14:15

app端打开,怎么获取当前开关状态?

本帖最后由 bigfou 于 2020-3-4 14:20 编辑

每次打开app后能否读到当前开关状态,然后显示对应的颜色?我实际操作下来,每次打开如图1,灰色的,但实际上,开关有状态。开关配置如图4。程序如下
模块是 esp-01

#define BLINKER_WIFI

#include <Blinker.h>

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

#define BUTTON_1 "btn-abc"
#define jdq_io 0
BlinkerButton Button1(BUTTON_1);

void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);
    if (state == BLINKER_CMD_ON) {
      digitalWrite(jdq_io, LOW);

      BLINKER_LOG("Toggle on!");

      //Button1.icon("icon_1");
      Button1.color("#FF0000");
      Button1.text("开");
      Button1.print("on");
    }
    else if (state == BLINKER_CMD_OFF) {
      digitalWrite(jdq_io, HIGH);

      BLINKER_LOG("Toggle off!");

      //Button1.icon("icon_1");
      Button1.color("#FFFF00");
      Button1.text("关");
      Button1.print("off");
    }
}
void setup()
{
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);

    pinMode(jdq_io, OUTPUT);
    digitalWrite(jdq_io, LOW);

    Blinker.begin(auth, ssid, pswd);
    Button1.attach(button1_callback);
}

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

jyc001 发表于 2020-3-4 15:56

你没有返回数据,每次在setup里加一个状态返回就行了

jyc001 发表于 2020-3-4 15:59

可以看https://www.arduino.cn/thread-94320-1-1.html这篇

jyc001 发表于 2020-3-4 15:59

if (state == BLINKER_CMD_ON) {
Button1.text("已开启")
Button1.print("on");
}
else if (state == BLINKER_CMD_OFF) {
Button1.text("已开启");
Button1.print("off");
}

奈何col 发表于 2020-3-4 17:30

https://www.arduino.cn/thread-83176-1-1.html
教程有写,请先阅读教程

bigfou 发表于 2020-3-4 23:35

本帖最后由 bigfou 于 2020-3-4 23:38 编辑

非常感谢奈何col,弄好了。代码分享一下,欢迎交流
另外感谢 jyc001 的恢复,但连接里的注释真的太少了。

完整代码如下:增加了心跳回调
我的继电器模块是低电平触发,所以初始化就给低电平。

#define BLINKER_WIFI
#include <Blinker.h>

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

#define BUTTON_1 "btn-abc"
#define jdq_io 0
BlinkerButton Button1(BUTTON_1);

void SetButton(char state)
{
   if (state == 1)
    {
      Button1.color("#6DBF47");
      Button1.text("开");
      Button1.print("on");
    }
    else
    {
      Button1.color("#7C7C7C");
      Button1.text("关");
      Button1.print("off");
    }
}

void button1_callback(const String & state)
{
    //BLINKER_LOG("get button state: ", state);
    if (state == BLINKER_CMD_ON) {
      digitalWrite(jdq_io, LOW);

      BLINKER_LOG("Toggle on!");
      SetButton(1);
    }
    else if (state == BLINKER_CMD_OFF) {
      digitalWrite(jdq_io, HIGH);
      BLINKER_LOG("Toggle off!");
      SetButton(0);
    }
}

//*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态30s~60s一次
void heartbeat()
{
   BLINKER_LOG("状态同步!");
   if (digitalRead(jdq_io)==LOW) SetButton(1);
   elseSetButton(0);
}

void setup()
{
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);

    pinMode(jdq_io, OUTPUT);
    digitalWrite(jdq_io, HIGH);

    Blinker.begin(auth, ssid, pswd);
    Button1.attach(button1_callback);
    Blinker.attachHeartbeat(heartbeat);
}

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


天竹村 发表于 2020-3-18 06:26

解决了吗,怎么解决的

天竹村 发表于 2020-3-18 23:04

这家伙回复长期这样,教程根本就没有

bigfou 发表于 2020-3-24 09:55

天竹村 发表于 2020-3-18 06:26
解决了吗,怎么解决的

解决了呀。。。6楼把代码都贴出来了

coloz 发表于 2020-3-24 11:28

天竹村 发表于 2020-3-18 23:04
这家伙回复长期这样,教程根本就没有
你考虑下是不是自己基础有问题,或者阅读能力有问题,那个教程就是讲如何反馈的状态的。
页: [1]
查看完整版本: app端打开,怎么获取当前开关状态?