查看: 1132|回复: 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]


  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

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

    该用户从未签到

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

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

    点评

    1.控制程序都是你自己写的,服务器不会发送控制信息。 2.重启时或程序出错,需要自己判断了 3.看调试信息  详情 回复 发表于 2020-5-29 16:24
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2020-5-29 16:24 | 显示全部楼层
    houguanghaha 发表于 2020-5-29 14:54
    重启默认是关闭状态,灯也应该不亮才对啊,现在是自动触发了

    1.控制程序都是你自己写的,服务器不会发送控制信息。
    2.重启时或程序出错,需要自己判断了
    3.看调试信息

    该用户从未签到

    发表于 2020-6-1 00:52 | 显示全部楼层
    如果排除程序问,用的是图片所示的AC-DC没有隔离电源。个人觉得应当是电源问题,遇到电涌导致三极管打开。换个隔离DC电源或纯充电宝供电试试看吧。
  • TA的每日心情
    开心
    2020-7-3 09:39
  • 签到天数: 465 天

    [LV.9]以坛为家II

    发表于 2020-6-1 22:25 | 显示全部楼层
    本帖最后由 keliyuan 于 2020-6-1 22:30 编辑


    暗盒开关线很容易受电源线干扰,
    GPIO  接一个10K下拉电阻。
  • TA的每日心情
    开心
    2020-7-2 21:23
  • 签到天数: 260 天

    [LV.8]以坛为家I

    发表于 2020-6-1 22:57 | 显示全部楼层
    设计时要考虑手动关闭的,再考虑远程自动关闭,否则就会非常尴尬。

    该用户从未签到

    发表于 2020-6-11 22:25 | 显示全部楼层
    楼主你那个点动开关不是执行复位的么 怎么控制开关灯啊
  • TA的每日心情
    开心
    2020-6-15 21:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2020-6-16 09:26 | 显示全部楼层
    楼主,用了您的代码,为什么连小爱都控制不了

    该用户从未签到

     楼主| 发表于 2020-6-17 15:18 | 显示全部楼层
    topdog 发表于 2020-6-1 22:57
    设计时要考虑手动关闭的,再考虑远程自动关闭,否则就会非常尴尬。

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

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    求助,用l298n模块控制电机转速,老是无缘无故的转动怎么...
    求助,用l298n模块控制电
    代码如下:int state1=0; int state2=0; void setup() { pinMode(9,OUTPUT); pinMode(
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    绑定github账号,免费增加设备额度
    绑定github账号,免费增加
    免费增加blinker设备额度的方法: 1.登录点灯管理台( https://admin.diandeng.tech/
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表