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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2647|回复: 10

[已解答] app端打开,怎么获取当前开关状态?

[复制链接]
发表于 2020-3-4 14:15 | 显示全部楼层 |阅读模式
本帖最后由 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();
}

打开后开关状态

打开后开关状态
33.jpg
44.jpg
22.jpg
发表于 2020-3-4 15:56 | 显示全部楼层
你没有返回数据,每次在setup里加一个状态返回就行了
发表于 2020-3-4 15:59 | 显示全部楼层
发表于 2020-3-4 15:59 | 显示全部楼层
[mw_shl_code=arduino,true]if (state == BLINKER_CMD_ON) {
Button1.text("已开启")
Button1.print("on");
}
else if (state == BLINKER_CMD_OFF) {
Button1.text("已开启");
Button1.print("off");
}[/mw_shl_code]
发表于 2020-3-4 17:30 | 显示全部楼层
https://www.arduino.cn/thread-83176-1-1.html
教程有写,请先阅读教程

点评

非常感谢 搞定了  发表于 2020-3-4 23:34
 楼主| 发表于 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);
   else  SetButton(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 来自手机 | 显示全部楼层
这家伙回复长期这样,教程根本就没有
 楼主| 发表于 2020-3-24 09:55 | 显示全部楼层
天竹村 发表于 2020-3-18 06:26
解决了吗,怎么解决的

解决了呀。。。6楼把代码都贴出来了
发表于 2020-3-24 11:28 | 显示全部楼层
天竹村 发表于 2020-3-18 23:04
这家伙回复长期这样,教程根本就没有

你考虑下是不是自己基础有问题,或者阅读能力有问题,那个教程就是讲如何反馈的状态的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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