ESP8266-01S,手机配网,本地开关,震动反馈-Arduino中文社区 - Powered by Discuz! Archiver

njbhqm 发表于 2021-12-1 09:30

ESP8266-01S,手机配网,本地开关,震动反馈

本帖最后由 njbhqm 于 2021-12-1 09:31 编辑

ESP8266-01S,手机配网,本地开关,震动反馈,引用网上大神的源码。
修改了,震动反馈,RX为输出继电器,消除抖动。但不知小板上的LED指示灯如何点亮?哪位大神指点一下,谢谢!
源码如下:
#define BLINKER_WIFI                  //接入方式:wifi
#define BLINKER_MIOT_OUTLET             //接入小爱插座库
#define BLINKER_DUEROS_OUTLET         //接入小度插座库
#define BLINKER_ALIGENIE_OUTLET         //接入天猫插座库
#define BLINKER_PRINT Serial            //串口协议库
#include <WiFiManager.h>                //wifimanager库
#include <Blinker.h>                  //官方库
#define LED_BUILTIN 2               //LED
char auth[] = "769058122000";         //设备key号

int relay=3;    //继电器io2
int Led =2;   //GPIO2为LED输出,低电平亮,针对01S模块
int key=0;      //本地轻触开关,io0与gnd接时动作
int counter = 3;

//使用web配置网络
WiFiManager wifiManager;
char devname[] = "ESP8266-chen";   //定义WIFI名称和主机名
void WebConfig() {
Serial.println("Entered config mode...");
// 自动连接WiFi,参数是连接ESP8266时的WiFi名称
wifiManager.setConfigPortalTimeout(60);//设置连接超时时间60s
wifiManager.autoConnect(devname);
WiFi.hostname(devname);//设置主机名
// WiFi连接成功后将通过串口监视器输出连接成功信息
Serial.println("");
    Serial.print("ESP8266 Connected to ");
    Serial.println(WiFi.SSID());            // WiFi名称
    Serial.print("IP address:\t");
    Serial.println(WiFi.localIP());         // IP
}

//*******新建组件对象
BlinkerButton Button1("btn-abc");            //设置app按键的键名
//*******app上按下按键即会执行该函数app里按键有2种模式3钟不同样式,下面写出所有的开关状态。
void button1_callback(const String & state)      //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
{
BLINKER_LOG("app操作了!: ", state);          //串口打印
if (digitalRead(relay)==LOW) {            //如果state是on状态
    BLINKER_LOG("灭灯!");                      //串口打印
    digitalWrite(relay, HIGH);
    Button1.color("red");                     //设置app按键是红色
    Button1.text("已打开");
    Button1.print("off");                     //反馈回按键状态是开
    Blinker.vibrate();                        //手机震动
}
else if (digitalRead(relay)==HIGH) {      //如果state是off状态
    BLINKER_LOG("亮灯!");                      //串口打印
    digitalWrite(relay,LOW);
    Button1.color("green");                   //设置app按键是绿色
    Button1.text("已关闭");
    Button1.print("on");                      //反馈回按键状态是关
    Blinker.vibrate();                        //手机震动
}
}
//*******如果小爱有对设备进行操作就执行下面
void miotPowerState(const String & state)
{
    BLINKER_LOG("小爱语音操作!");            //串口打印
    if (state == BLINKER_CMD_ON){
      digitalWrite(relay,LOW);
      BlinkerMIOT.powerState("on");
      BLINKER_LOG("亮灯!");
      BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_OFF){
      digitalWrite(relay,HIGH);
      BlinkerMIOT.powerState("off");
      BLINKER_LOG("灭灯!");
      BlinkerMIOT.print();
    }
}
void miotQuery(int32_t queryCode)       //小爱设备查询的回调函数
{
    BLINKER_LOG("MIOT Query codes: ", queryCode);
    switch (queryCode)
    {
      case BLINKER_CMD_QUERY_ALL_NUMBER :
            BLINKER_LOG("MIOT Query All");
            BlinkerMIOT.powerState(relay ? "on" : "off");
            BlinkerMIOT.print();
            break;
      case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
            BLINKER_LOG("MIOT Query Power State");
            BlinkerMIOT.powerState(relay ? "on" : "off");
            BlinkerMIOT.print();
            break;
      default :
            BlinkerMIOT.powerState(relay ? "on" : "off");
            BlinkerMIOT.print();
            break;
    }
}
//*******如果小度有对设备进行操作就执行下面
void duerPowerState(const String & state)
{
    BLINKER_LOG("小度语音操作!");            //串口打印
    if (state == BLINKER_CMD_ON){
      digitalWrite(relay,LOW);
      BlinkerDuerOS.powerState("on");
      BLINKER_LOG("亮灯!");
      BlinkerDuerOS.print();
    }
    else if (state == BLINKER_CMD_OFF){
      digitalWrite(relay,HIGH);
      BlinkerDuerOS.powerState("off");
      BLINKER_LOG("关灯!");
      BlinkerDuerOS.print();
    }
}
void duerQuery(int32_t queryCode)         //小度设备查询的回调函数
{
    BLINKER_LOG("DuerOS Query codes: ", queryCode);
    switch (queryCode)
    {
      case BLINKER_CMD_QUERY_ALL_NUMBER :
            BLINKER_LOG("DuerOS Query All");
            BlinkerDuerOS.powerState(relay ? "on" : "off");
            BlinkerDuerOS.print();
            break;
      case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
            BLINKER_LOG("DuerOS Query Power State");
            BlinkerDuerOS.powerState(relay ? "on" : "off");
            BlinkerDuerOS.print();
            break;
      default :
            BlinkerDuerOS.powerState(relay ? "on" : "off");
            BlinkerDuerOS.print();
            break;
    }
}
//*******如果天猫精灵有对设备进行操作就执行下面
void aligeniePowerState(const String & state)
{
    BLINKER_LOG("天猫精灵语音操作!");            //串口打印
    if (state == BLINKER_CMD_ON){
      digitalWrite(relay,LOW);
      BlinkerAliGenie.powerState("on");
      BLINKER_LOG("亮灯!");
      BlinkerAliGenie.print();
    }
    else if (state == BLINKER_CMD_OFF){
      digitalWrite(relay,HIGH);
      BlinkerAliGenie.powerState("off");
      BLINKER_LOG("关灯!");
      BlinkerAliGenie.print();
    }
}
void aligenieQuery(int32_t queryCode)      //天猫设备查询的回调函数
{
    BLINKER_LOG("AliGenie Query codes: ", queryCode);
    switch (queryCode)
    {
      case BLINKER_CMD_QUERY_ALL_NUMBER :
            BLINKER_LOG("AliGenie Query All");
            BlinkerAliGenie.powerState(relay ? "on" : "off");
            BlinkerAliGenie.print();
            break;
      case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
            BLINKER_LOG("AliGenie Query Power State");
            BlinkerAliGenie.powerState(relay ? "on" : "off");
            BlinkerAliGenie.print();
      default :
            BlinkerAliGenie.powerState(relay ? "on" : "off");
            BlinkerAliGenie.print();
            break;
    }
}
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    Blinker.vibrate();
    uint32_t BlinkerTime = millis();
    Blinker.print("millis", BlinkerTime);
}

//*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态
void heartbeat()
{
BLINKER_LOG("状态同步!");
   if (digitalRead(relay)==LOW)
    {
      Button1.print("on");
      Button1.color("green");            //设置app按键是绿色
      Button1.text("已关闭");
    }
    else
    {
    Button1.print("off");
    Button1.color("red");                  //设置app按键是红色
    Button1.text("已打开");
    }
}
///如果本地开关有动作执行下面手动模式
void sdms()
{
if (digitalRead(relay)==HIGH&&digitalRead(key)==LOW)
{
   Blinker.delay(180);//延时400ms,最少需150ms
   if (digitalRead(key)==HIGH)
   {            
      BLINKER_LOG("本地开关动作!");      
      BLINKER_LOG("亮灯!");                     //串口打印
      digitalWrite(relay,LOW);
      Button1.color("green");                  //设置app按键是绿色
      Button1.text("已关闭");
      Button1.print("on");
      }
   }
if (digitalRead(relay)==LOW&&digitalRead(key)==LOW)
    {            
      Blinker.delay(180);
      if (digitalRead(key)==HIGH)
      {
      BLINKER_LOG("本地开关动作!");
      BLINKER_LOG("灭灯!");                      //串口打印
      digitalWrite(relay, HIGH);
      Button1.color("red");                     //设置app按键是红色
      Button1.text("已打开");
      Button1.print("off");
      }
      }
}
void setup()
{
// 初始化串口
Serial.begin(115200);
delay(10);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();

// 初始化有LED的IO
pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);      //默认上电开LOW 时接通继电器。
pinMode(key,INPUT_PULLUP);      //输入上拉
// 初始化blinker
WebConfig();//配置网络
Blinker.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str()); //初始化blinker
Button1.attach(button1_callback);      //app按键回调
Blinker.attachData(dataRead);//状态回调
Blinker.attachHeartbeat(heartbeat);            //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。
BlinkerMIOT.attachPowerState(miotPowerState);            //小爱语音操作注册函数
BlinkerDuerOS.attachPowerState(duerPowerState);            //小度语音操作注册函数
BlinkerAliGenie.attachPowerState(aligeniePowerState);      //天猫语音操作注册函数
BlinkerMIOT.attachQuery(miotQuery);//小爱设备查询的回调函数
BlinkerDuerOS.attachQuery(duerQuery);//小度设备查询的回调函数
BlinkerAliGenie.attachQuery(aligenieQuery);//天猫设备查询的回调函数
}
void loop() {
Blinker.run();
sdms();//本地开关扫描
}

njbhqm 发表于 2021-12-1 09:35

本帖最后由 njbhqm 于 2021-12-1 09:38 编辑

上电默认继电器不动作,使用常闭触点,默认接通。按键反馈为红色,打开。


希望大神指点,小板上的LED指示灯能显示 联网信号

宇之枫海云 发表于 2021-12-1 15:42

digitalWrite(relay, HIGH);      //默认上电开LOW 时接通继电器。
=============================================
低电平导通的继电器,默认为高肯定不动作!有个动作,本地开关下拉后执行继电器置低,这样不就继电器动作了吗?怎么显示已关闭呢?看不明白了

njbhqm 发表于 2021-12-1 16:18

宇之枫海云 发表于 2021-12-1 15:42
digitalWrite(relay, HIGH);      //默认上电开LOW 时接通继电器。
================================ ...

非常规接线,
继电器使用的是 常闭触点

许普查 发表于 2022-2-23 12:29

nt relay=3;    //继电器io2
int Led =2;   //GPIO2为LED输出,低电平亮,针对01S模块
int key=0;      //本地轻触开关,io0与gnd接时动作
int counter = 3;
如果楼主的是01S,这几个设置的有问题,我今天刚把这个搞明白

njzc0232 发表于 2022-10-10 14:07

int Led =0;
页: [1]
查看完整版本: ESP8266-01S,手机配网,本地开关,震动反馈