blinker做的卧室灯开关发现一个问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5460|回复: 12

[已解答] blinker做的卧室灯开关发现一个问题

[复制链接]
发表于 2020-5-29 11:39 | 显示全部楼层 |阅读模式
本帖最后由 houguanghaha 于 2020-5-29 12:00 编辑

做了一个卧室灯开关并安装到墙壁86盒中,实现了小爱同学,墙壁开关点动控制开关灯.看起来一切正常.但是有时半夜没有操作灯自动亮了,可能是某些信息号干扰,但不知如何解决?

接线图如下
未标题-1.jpg

程序如下
[mw_shl_code=arduino,true]#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#define BLINKER_PRINT Serial
#include <Blinker.h>
#include <ESP8266WiFi.h>
WiFiServer server(80);

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

int GPIO = 0;
//实体按钮开关
int switch_button = 2;
int temp = 0;

BlinkerButton ButtonOn("btn-on");
BlinkerButton ButtonOff("btn-off");
BlinkerButton ButtonState("btn-state");

void button_on_callback(const String & state) {
  BLINKER_LOG("get button state: ", state);
  digitalWrite(GPIO, HIGH);
  ButtonState.print("on");
  ButtonState.color("#00BB00");
  ButtonState.text("灯亮了");
  Blinker.vibrate();
}
void button_off_callback(const String & state) {
  BLINKER_LOG("get button state: ", state);
  digitalWrite(GPIO, LOW);
  ButtonState.print("off");
  ButtonState.color("#FF0000");
  ButtonState.text("灯关了");
  Blinker.vibrate();
}
void miotPowerState(const String & state)
{
  BLINKER_LOG("need set power state: ", state);
  if (state == BLINKER_CMD_ON) {
    digitalWrite(GPIO, HIGH);
    BlinkerMIOT.powerState("on");
    BlinkerMIOT.print();
  }
  else if (state == BLINKER_CMD_OFF) {
    digitalWrite(GPIO, LOW);
    BlinkerMIOT.powerState("off");
    BlinkerMIOT.print();
  }
}
void heartbeat()
{
  BLINKER_LOG("状态同步!");
  if (digitalRead(GPIO) == LOW)
  {
    ButtonState.print("on");
    ButtonState.color("#00BB00");
    ButtonState.text("灯亮了");
  }
  else
  {
    ButtonState.print("off");
    ButtonState.color("#FF0000");
    ButtonState.text("灯关了");
  }
}
void setup() {
  Serial.begin(115200);
  BLINKER_DEBUG.stream(Serial);
  pinMode(GPIO, OUTPUT);
  pinMode(switch_button, INPUT);
  digitalWrite(GPIO, LOW);
  Blinker.begin(auth, ssid, pswd);
  ButtonOn.attach(button_on_callback);
  ButtonOff.attach(button_off_callback);
  BlinkerMIOT.attachPowerState(miotPowerState);

  Blinker.attachHeartbeat(heartbeat);

  server.begin();
  Serial.println(F("Server started"));
}
void loop() {
  Blinker.run();

  temp = digitalRead(switch_button);
  if (temp == LOW) {
    digitalWrite(GPIO, !digitalRead(GPIO));
    pinMode(switch_button, INPUT_PULLUP);
    delay(300);
  }

  WiFiClient client = server.available();
  if (!client) {
    delay(100);
    return;
  }
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  int val;
  if (req.indexOf("/gpio/on") != -1)
    digitalWrite(GPIO, HIGH);

  else if (req.indexOf("/gpio/off") != -1)
    digitalWrite(GPIO, LOW);

  else {
    Serial.println("invalid request");
    client.print("HTTP/1.1 404\r\n");
    client.stop();
    return;
  }
  client.flush();
  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nWelcome to 666! ";
  s += "</html>\n";

  client.print(s);
  delay(1);
  Serial.println("Client disonnected");
}[/mw_shl_code]


发表于 2020-5-29 12:08 | 显示全部楼层
估计是设备重启了,具体只有看设备调试信息。
 楼主| 发表于 2020-5-29 14:54 | 显示全部楼层
奈何col 发表于 2020-5-29 12:08
估计是设备重启了,具体只有看设备调试信息。

重启默认是关闭状态,灯也应该不亮才对啊,现在是自动触发了

点评

1.控制程序都是你自己写的,服务器不会发送控制信息。 2.重启时或程序出错,需要自己判断了 3.看调试信息  详情 回复 发表于 2020-5-29 16:24
发表于 2020-5-29 16:24 | 显示全部楼层
houguanghaha 发表于 2020-5-29 14:54
重启默认是关闭状态,灯也应该不亮才对啊,现在是自动触发了

1.控制程序都是你自己写的,服务器不会发送控制信息。
2.重启时或程序出错,需要自己判断了
3.看调试信息
发表于 2020-6-1 00:52 | 显示全部楼层
如果排除程序问,用的是图片所示的AC-DC没有隔离电源。个人觉得应当是电源问题,遇到电涌导致三极管打开。换个隔离DC电源或纯充电宝供电试试看吧。
发表于 2020-6-1 22:25 | 显示全部楼层
本帖最后由 keliyuan 于 2020-6-1 22:30 编辑


暗盒开关线很容易受电源线干扰,
GPIO  接一个10K下拉电阻。
发表于 2020-6-1 22:57 | 显示全部楼层
设计时要考虑手动关闭的,再考虑远程自动关闭,否则就会非常尴尬。
发表于 2020-6-11 22:25 | 显示全部楼层
楼主你那个点动开关不是执行复位的么 怎么控制开关灯啊
发表于 2020-6-16 09:26 | 显示全部楼层
楼主,用了您的代码,为什么连小爱都控制不了
 楼主| 发表于 2020-6-17 15:18 | 显示全部楼层
topdog 发表于 2020-6-1 22:57
设计时要考虑手动关闭的,再考虑远程自动关闭,否则就会非常尴尬。

目前已经正常
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 09:35 , Processed in 0.102199 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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