构建一个ESP32远程开关

文章讲述了作者在使用ESP32控制5V驱动继电器时遇到的问题,如电灯科技设备的接入限制、远程管理的延迟以及成本考虑。作者通过自定义HTTP接口实现本地控制,并探讨了自制设备与购买第三方产品的成本对比。
摘要由CSDN通过智能技术生成

硬件购买

在网上购买了一个5V电压驱动继电器,因为是PNP驱动的,低电压闭合,如果要使用ESP32来控制,需要将驱动电压降为3.3v,达到PNP关断必要的压降

接入点灯科技的远程管理

目前遇到的问题

1. 电灯科技的设备限制,只能接入一个

2. 远程管理的延迟大,免费的服务不稳定

接入代码

目前没有远程控制的需求,在局域网控制即可, 所以在ESP32里面加入了Http接口,通过网页控制,使用Ngrok DDNS未来也能远程控制,在下面的代码修改加入 WIFI的SSID 密码,点灯科技申请的ID

#define BLINKER_WIFI  
#define BLINKER_WITHOUT_SSL
#include <Blinker.h>  

#include <WiFi.h>
#include <WebServer.h>

// 继电器开关
#define SWITCH_PIN 14

bool switch_state = false;
WebServer server(80); 

void switch_callback(const String & state)
{
    BLINKER_LOG("get switch state: ", state);

    if (state == BLINKER_CMD_ON) {
        switch_state = true;
        digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(SWITCH_PIN, HIGH);
        BUILTIN_SWITCH.print("on");
    }
    else if (state == BLINKER_CMD_OFF) {
        switch_state = false;
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(SWITCH_PIN, LOW);
        BUILTIN_SWITCH.print("off");
    }
}

void heartbeat(){
    if (switch_state) BUILTIN_SWITCH.print("on");
    else BUILTIN_SWITCH.print("off");
}

String summary(){
    String data = "online, switch: " + STRING_format(switch_state ? "on" : "off");
    return data;
}

void dataRead(const String & data){
    BLINKER_LOG("Blinker readString: ", data);
    Blinker.vibrate();
    uint32_t BlinkerTime = millis();
    Blinker.print("millis", BlinkerTime);
}

void handle_root() {
  String s = server.arg("s");
  if (s == "off") {
    switch_callback("off");
  } else {
    switch_callback("on");
  }
  server.sendHeader("Location", "/", true); 
  server.send(302, "text/plain", "");
}

void handle_index() {
  String s = "<!DOCTYPE html>";
  s += "<head></head>";
	s += "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\">";
  s += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">";
	s += "<style type=\"text/css\">";
	s += "a{padding: 20px; margin: 20px;font-size: 36px; color: white;border-radius: 5px;display:inline-block}";
	s += "h1, p {text-align: center;}b{font-weight: bold;color: green}";
	s += ".On {background-color: green;}";
	s += ".Off {background-color: red;}";
	s += "</style>";
	s += "<body>";
	s += "<h1>电源开关<b>";
  s += (switch_state? "ON" : "OFF");
  s += "</b></h1>";
	s += "<p>";
	s += "<a href=\"/pw1?s=on\" class=\"On\">ON</a>";
	s += "<a href=\"/pw1?s=off\" class=\"Off\">OFF</a>";
	s += "</p>";
	s += "</body>";
  s += "</html>";
  server.send(200, "text/html", s);
}

void setup() {
  Serial.begin(115200);
  BLINKER_DEBUG.stream(Serial);

  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);

  pinMode(SWITCH_PIN, OUTPUT);
  digitalWrite(SWITCH_PIN, HIGH);

  switch_state = true;
  
  Blinker.begin("", "", ""); 
  Blinker.attachData(dataRead);    
  Blinker.attachHeartbeat(heartbeat);
  Blinker.attachSummary(summary);
  BUILTIN_SWITCH.attach(switch_callback);

  server.on("/pw1", handle_root);
  server.on("/", handle_index);
  server.begin();

  WiFi.setSleep(false);
}

void loop() {
  Blinker.run();
  server.handleClient();
}

运行结果

成本

自制的成本基本会超过淘宝购买的第三方非品牌的远程开关,还不包括电量统计,塑料外壳

  1. ESP32开发板   15
  2. 继电器               2
  3. 插座                   5-8

唯一方便的地方,就是自主性强,如果有阿里云的服务器则更好了,映射到远端就能远程控制

当然当继电器 X8 X16的时候,自制的会便宜很多

220V注意用电安全,检查好电路才通电

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32智能家居项目实例是指利用ESP32开发板来构建一个智能家居控制系统的示例项目。智能家居系统可以帮助我们实现远程控制家中各种设备的功能,提高生活的便利性和舒适度。 以智能灯控为例,通过将ESP32连接到家庭WiFi网络,我们可以通过手机App远程控制灯的开关、亮度调节和颜色变化。实现这个项目的步骤如下: 1. 硬件准备:准备一个ESP32开发板、一个LED灯以及连接线。 2. 软件准备:下载并安装Arduino IDE开发环境,然后在IDE中安装ESP32开发板的库文件和驱动程序。 3. 连接电路:将ESP32和LED灯通过连接线连接起来,确保接线正确无误。 4. 编写代码:打开Arduino IDE,创建一个新的工程,编写代码来控制LED灯的开关、亮度和颜色。代码需要使用ESP32的WiFi和GPIO库函数来实现远程控制功能。 5. 上传代码:将编写好的代码上传到ESP32开发板中,确保代码能够正常运行。 6. 手机App控制:下载并安装相应的手机App,将ESP32连接到家庭WiFi网络,并在App中配置设备连接信息。 7. 远程控制:使用手机App来控制ESP32智能家居系统,远程开关灯、调节亮度和改变颜色。 通过这个示例项目,我们可以看到ESP32作为智能家居控制系统的中心控制器的强大功能。除了智能灯控,我们还可以通过ESP32实现其他智能家居功能,如温度和湿度监测、门窗监控、智能插座等。 总之,ESP32智能家居项目实例是利用ESP32开发板构建一个远程控制家庭设备的示例项目,其功能可以根据需求进行扩展和定制,为我们的生活带来更多的便利和舒适。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值