本人初学,求教一个APP状态反聩的问题。-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1552|回复: 6

[已解答] 本人初学,求教一个APP状态反聩的问题。

[复制链接]
发表于 2021-9-18 20:43 | 显示全部楼层 |阅读模式
本帖最后由 xpmcn 于 2021-9-19 06:37 编辑

学习修改了一个APP+本地按钮的开关,但是1、打开APP中设备时不按开关按钮没有状态反馈(按调试中的刷新也不反馈);2、按开关按钮后大多数时候也不及时反馈,按调试中的刷新才反馈状态。重点想解决第1个问题,当然第2个问题也能解决更好。特求教,谢谢!

#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#define BLINKER_ESP_SMARTCONFIG
#include <Blinker.h>
char auth[] = "74592f80a84e";//APP中获取到的Secret Key(密钥)

//手机配网

#define RELAY 0
#define KEY 2
int relay_State = 0;
int KEY_NUM = 0;


// 新建组件对象
BlinkerButton Button1("btn-abc");  //注意:要和APP组件’数据键名’一致  // 按下BlinkerAPP按键即会执行该函数
void button1_callback(const String & state)
{
    if (state == BLINKER_CMD_ON) {
    BLINKER_LOG("Toggle on!");  
    Button1.text("断电");
    relay_State = 1;
    Button1.print("on");
  }
  else if (state == BLINKER_CMD_OFF) {
    BLINKER_LOG("Toggle off!");
    Button1.color("#FF0000");
    Button1.text("插座已送电");
    relay_State = 0;
    Button1.print("off");
  }
  Blinker.vibrate();
}

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

  Blinker.vibrate();

  uint32_t BlinkerTime = millis();

  Blinker.print("millis", BlinkerTime);
  //Text1.print("os time", BlinkerTime);
}

void setup() {
  // 初始化串口,并开启调试信息,仅调试用,可以删除
  Serial.begin(115200);
  BLINKER_DEBUG.stream(Serial);
  // 初始化IO
  pinMode(RELAY, OUTPUT);
  pinMode(KEY, INPUT);
  digitalWrite(RELAY,HIGH);//上电继电器释放

  // 初始化blinker
  Blinker.begin(auth);
  Button1.attach(button1_callback);
  Blinker.attachData(dataRead);
}

void loop() {
  Blinker.run();

  KEY_NUM = 0;
  if (digitalRead(KEY) == LOW)
  {
    delay(10);
    if (digitalRead(KEY) == LOW)
    {
      KEY_NUM = 1;
      while (digitalRead(KEY) == LOW);
    }
  }
  if (KEY_NUM == 1)
  {
    relay_State = relay_State + 1;
  }
  if (relay_State >= 2)
  {
    relay_State = 0;
  }

  if (relay_State == 1)
  {
    digitalWrite(RELAY, LOW);
  }
  else
  {
    digitalWrite(RELAY, HIGH);
  }
}

发表于 2021-9-18 20:53 | 显示全部楼层
可以先阅读教程学习:https://www.arduino.cn/thread-104162-1-1.html
 楼主| 发表于 2021-9-19 12:17 | 显示全部楼层
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#define BLINKER_ESP_SMARTCONFIG
#include <Blinker.h>
char auth[] = "74592f80a84e";//APP中获取到的Secret Key(密钥)

//此版本带手机配网功能,不需在程序中写入WiFi账号密码,只需要填写设备密钥

#define RELAY 0
#define KEY 2
int relay_State = 0;
int KEY_NUM = 0;


// 新建组件对象
BlinkerButton Button1("btn-abc");  //注意:要和APP组件’数据键名’一致  // 按下BlinkerAPP按键即会执行该函数
void button1_callback(const String & state)
{
    if (state == BLINKER_CMD_ON) {
    BLINKER_LOG("Toggle on!");  
    Button1.text("断电");
    relay_State = 1;
    Button1.print("on");
  }
  else if (state == BLINKER_CMD_OFF) {
    BLINKER_LOG("Toggle off!");
    Button1.color("#FF0000");
    Button1.text("插座已送电");
    relay_State = 0;
    Button1.print("off");
  }
  Blinker.vibrate();
}

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

  Blinker.vibrate();

  uint32_t BlinkerTime = millis();

  Blinker.print("millis", BlinkerTime);
  //Text1.print("os time", BlinkerTime);
}

// 心跳包函数
void heartbeat() {

    if (relay_State == BLINKER_CMD_ON) {
    BLINKER_LOG("Toggle on!");  
    Button1.text("断电");
    relay_State = 1;
    Button1.print("on");
  }
  else if (relay_State == BLINKER_CMD_OFF) {
    BLINKER_LOG("Toggle off!");
    Button1.color("#FF0000");
    Button1.text("插座已送电");
    relay_State = 0;
    Button1.print("off");
}
}
void setup() {
  // 初始化串口,并开启调试信息,仅调试用,可以删除
  Serial.begin(115200);
  BLINKER_DEBUG.stream(Serial);
  // 初始化IO
  pinMode(RELAY, OUTPUT);
  pinMode(KEY, INPUT);
  digitalWrite(RELAY,HIGH);//上电继电器释放

  // 初始化blinker
  Blinker.begin(auth);
  Button1.attach(button1_callback);
  Blinker.attachData(dataRead);
  //注册一个心跳包
  Blinker.attachHeartbeat(heartbeat);
}

void loop() {
  Blinker.run();

  KEY_NUM = 0;
  if (digitalRead(KEY) == LOW)
  {
    delay(10);
    if (digitalRead(KEY) == LOW)
    {
      KEY_NUM = 1;
      while (digitalRead(KEY) == LOW);
    }
  }
  if (KEY_NUM == 1)
  {
    relay_State = relay_State + 1;
  }
  if (relay_State >= 2)
  {
    relay_State = 0;
  }

  if (relay_State == 1)
  {
    digitalWrite(RELAY, LOW);
  }
  else
  {
    digitalWrite(RELAY, HIGH);
  }
}

哪位能指点一下,编译时出错:
"Blinker.h" 对应多个库
已使用: C:\Users\MY\Documents\Arduino\libraries\blinker-library-master222
未使用:C:\Users\MY\Documents\Arduino\libraries\blinker-library-master
exit status 1
为开发板 Generic ESP8266 Module 编译时出错。

在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。
发表于 2021-9-19 15:00 | 显示全部楼层
1.你装了两个库,请把删除了,然后按照文档重新装库。
2.写有error才是报错信息,你提供的信息中没有报错。
 楼主| 发表于 2021-9-20 15:06 | 显示全部楼层
本帖最后由 xpmcn 于 2021-9-20 15:29 编辑

重新安装了最新的环境和库除了没有库的提示外还是同样的提示,哪位可以帮助看一看代码是否有问题。

点评

您发的提示,只能说明您装了两个库,请把这两个库都删除了,再安装新的库。 这个提示不是报错,你要使用鼠标拖拽报错信息右侧的滚动条,在信息中找到写有“error”的地方,那个才是报错。  详情 回复 发表于 2021-9-21 09:41
发表于 2021-9-21 09:41 | 显示全部楼层
xpmcn 发表于 2021-9-20 15:06
重新安装了最新的环境和库除了没有库的提示外还是同样的提示,哪位可以帮助看一看代码是否有问题。 ...

您发的提示,只能说明您装了两个库,请把这两个库都删除了,再安装新的库。

这个提示不是报错,你要使用鼠标拖拽报错信息右侧的滚动条,在信息中找到写有“error”的地方,那个才是报错。
 楼主| 发表于 2021-9-23 12:57 | 显示全部楼层
本帖最后由 xpmcn 于 2021-9-23 13:08 编辑

终于编译通过了,总结一下。二种开关状态反馈,一是单纯的APP按键操作反馈状态,点开设备是没有开关状态反馈的,点击按钮后反馈状态不同步;二是单纯的设置心跳包反馈状态,点开APP的设备就显示开关当前的开关状态,点击按钮后要是30-60秒刷新状态;三是把前面二种方式混合用,点击按钮后状态反馈也是不同步。下面罗列出以上二种情况的代码,初学小白一枚,请指导!

//按键执行操作
BlinkerButton Button1("btn-abc");
void button1_callback(const String & state)
{
    if (state == BLINKER_CMD_ON) {
    BLINKER_LOG("Toggle on!");  
    Button1.text("断电");
    relay_State = 1;
    Button1.print("on");
  }
  else if (state == BLINKER_CMD_OFF) {
    BLINKER_LOG("Toggle off!");
    Button1.color("#FF0000");
    Button1.text("插座已送电");
    relay_State = 0;
    Button1.print("off");
  }
  Blinker.vibrate();
}


//心跳包返回设备当前状态
void heartbeat()
{
   if (digitalRead(relay_State) == LOW)
    {
      Button1.print("on");
      Button1.text("断电");
    }
    else
    {
    Button1.print("off");
    Button1.color("#FF0000");              //设置app按键是红色
    Button1.text("插座已送电");
    }
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 11:31 , Processed in 0.141350 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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