驴友花雕 发表于 2025-2-7 18:51:10

【花雕学编程】Arduino动手做(246)--ESP8266 blinker单路开关




驴友花雕 发表于 2025-2-7 18:57:11

【花雕学编程】Arduino动手做(246)--ESP8266 blinker单路开关




驴友花雕 发表于 2025-2-7 18:59:14

【花雕学编程】Arduino动手做(246)--ESP8266 blinker单路开关

单路继电器模块是一种用于电路控制的电子元件,它能够通过一个输入信号控制一个输出信号。这种模块通常包含一个继电器和一个控制电路。当输入信号(如电流或电压)达到一定阈值时,继电器会被激活,从而关闭或开启一个外部电路。
单路继电器模块的主要应用包括:

[*]自动化控制系统:用于开关、启动或停止设备。

[*]电源管理:用于切换电源或保护电路。

[*]传感器接口:用于将传感器信号转换为控制信号。

这种模块的优点是结构简单、成本低、使用方便。



驴友花雕 发表于 2025-2-7 19:01:27

【花雕学编程】Arduino动手做(246)--ESP8266 blinker单路开关

【花雕学编程】239种传感器执行器系列实验(资料代码+仿真编程+图形编程)
   实验二百四十六:ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340
   实验项目之十九:基于 ESP8266 的无线物联网开关(使用单路继电器)

实验开源代码

/*
【花雕学编程】239种传感器执行器系列实验(资料代码+仿真编程+图形编程)
   实验二百四十六:ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340
   实验项目之十九:基于 ESP8266 的无线物联网开关(使用单路继电器)
*/

#define BLINKER_WIFI            // 启用Blinker的WiFi功能

#include <ESP8266WiFi.h>      // 本程序使用 ESP8266WiFi库
#include <Blinker.h>            // 引入Blinker库

// Blinker授权码
char auth[] = "d251bb68ea";

int count = 0;            // 时间计数器
bool WIFI_Status = true;// WiFi状态标志位

#define RELAY_PIN D1      // 要操作的继电器引脚
bool relayState = false;// 继电器状态标志位

// 创建Blinker按钮对象
BlinkerButton Button1("btn-abc");

/* 配网函数 */
void smartConfig()
{
WiFi.mode(WIFI_STA); // 设置STA模式
Serial.println("\r\nWait for Smartconfig..."); // 打印log信息
WiFi.beginSmartConfig(); // 开始SmartConfig,等待手机端发出用户名和密码
while(1)
{
    Serial.println(".");
    digitalWrite(LED_BUILTIN,HIGH); // 指示灯闪烁
    delay(1000);
    digitalWrite(LED_BUILTIN,LOW); // 指示灯闪烁
    delay(1000);
    if(WiFi.smartConfigDone()) // 配网成功,接收到SSID和密码
    {
      Serial.println("SmartConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      break;      
    }
}
}

/* 继电器控制函数 */
void relayControl(const String & state)
{
    BLINKER_LOG("Set relay state: ", state);
    if (state == BLINKER_CMD_ON) {   // 打开继电器
      digitalWrite(LED_BUILTIN, HIGH);
      digitalWrite(RELAY_PIN, HIGH);
      relayState = true;
    }
    else if (state == BLINKER_CMD_OFF) {   // 关闭继电器
      digitalWrite(LED_BUILTIN, LOW);
      digitalWrite(RELAY_PIN, LOW);
      relayState = false;
    }
}

/* 按钮回调函数 */
void button1_callback(const String & state)
{
    relayControl(state); // 调用继电器控制函数
}

void setup()
{
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
   
    pinMode(RELAY_PIN, OUTPUT);
    digitalWrite(RELAY_PIN, LOW);
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
    Serial.println("\r\n正在连接WIFI...");

    while(WiFi.status() != WL_CONNECTED) // 判断是否连接WIFI成功
    {
      if(WIFI_Status)
      {
            Serial.print(".");
            digitalWrite(LED_BUILTIN, HIGH);
            delay(500);                     
            digitalWrite(LED_BUILTIN, LOW);   
            delay(500);               
            count++;
            if(count >= 5) // 5s
            {
                WIFI_Status = false;
                Serial.println("WiFi连接失败,请用手机进行配网");
            }      
      }
      else
      {
            smartConfig();// 微信智能配网
      }
    }

    Serial.println("连接成功");
    Serial.print("IP:");
    Serial.println(WiFi.localIP());
   
    Blinker.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str()); // 根据配网得到的WIFI信息和设备秘钥,连接到Blinker云

    // 注册按钮回调函数
    Button1.attach(button1_callback);
}

void loop()
{
    Blinker.run(); // 运行Blinker
}

驴友花雕 发表于 2025-2-7 19:03:27

【花雕学编程】Arduino动手做(246)--ESP8266 blinker单路开关

代码解读

1、库和宏定义:

#define BLINKER_WIFI:配置为WIFI接入模式。

#include <Blinker.h>:引入Blinker库。

#include <ESP8266WiFi.h>:引入ESP8266WiFi库,用于WiFi连接。

#define RELAY_PIN D1:定义继电器控制的引脚。

2、创建Blinker按钮对象:

BlinkerButton Button1("btn-abc"):创建一个Blinker按钮对象。

3、配网函数:

smartConfig():通过SmartConfig进行WiFi配网。

4、继电器控制函数:

relayControl(const String & state):根据指令控制继电器的开关。

5、按钮回调函数:

button1_callback(const String & state):按钮触发时调用继电器控制函数。

6、初始化函数:

setup():初始化串口通信、继电器引脚、WiFi连接以及Blinker平台,并注册按钮回调函数。

7、主循环:

loop():持续运行Blinker平台处理通信和事件。

这样就可以通过WiFi和Blinker平台来控制普通插排的继电器开关了。

驴友花雕 发表于 2025-2-7 19:05:11

【花雕学编程】Arduino动手做(246)--ESP8266 blinker单路开关

实验串口返回情况


驴友花雕 发表于 2025-2-7 19:44:08

【花雕学编程】Arduino动手做(246)--ESP8266 blinker单路开关

打开手机blinker的APP,进入开发者模式


驴友花雕 发表于 2025-2-7 19:47:08

【花雕学编程】Arduino动手做(246)--ESP8266 blinker单路开关

进入EspToch模式


驴友花雕 发表于 2025-2-7 19:53:41

【花雕学编程】Arduino动手做(246)--ESP8266 blinker单路开关

智能配网




驴友花雕 发表于 2025-2-7 19:56:10

【花雕学编程】Arduino动手做(246)--ESP8266 blinker单路开关

配置失败


驴友花雕 发表于 2025-2-7 20:51:43

【花雕学编程】Arduino动手做(246)--ESP8266 blinker单路开关

实验场景图


页: [1]
查看完整版本: 【花雕学编程】Arduino动手做(246)--ESP8266 blinker单路开关