数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1280|回复: 11

[Arduino] 用IFTTT控制智能插座开关有时候会失效,正在考虑自己做一个URL控制的开关

[复制链接]
发表于 2023-4-29 14:28:46 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
手机上设置了Automate+IFTTT+TP-Link智能插座,实现手机充电到了80%自动停止


不过发现IFTTT链接TP-Link经常会失效,每次出现异常就要去IFTTT网站检查一次,实际什么也没有做,就是登录进去检查日志,断开连接,重新链接,然后就莫名其妙好了

这样的故障出现过三四次了,也是一种烦恼

现在就考虑自己做个属于自己的插座,替代IFTTT+TP-link智能插座,
手机上还是用Automate, 通过URL控制自己制作的插座开关

我手头买了ESP32, 就是还没有开始学
还有拆机的继电器不过是12V的,供电是一个小问题
发表于 2023-4-29 16:48:44 | 显示全部楼层
还是直接使用成品方便,功能和效果有保证。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-29 16:53:15 | 显示全部楼层
wqwq212 发表于 2023-4-29 16:48
还是直接使用成品方便,功能和效果有保证。

手头买了不少智能插座了,不同牌子的,可只有TP-Link支持IFTTT,

现在很想绕过ifttt, 有什么办法推荐么?

如果Automate能够跟智能插座直接沟通就方便了
回复 支持 反对

使用道具 举报

发表于 2023-4-29 17:38:18 | 显示全部楼层
个人建议,不是特别专业的。
直接上涂鸦平台,多年前我就预言涂鸦最稳定,经历了时间的洗礼,确实是涂鸦平台最稳定。

智能家居,我只信赖涂鸦,安排。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-29 22:20:49 | 显示全部楼层
jpdd521 发表于 2023-4-29 17:38
个人建议,不是特别专业的。
直接上涂鸦平台,多年前我就预言涂鸦最稳定,经历了时间的洗礼,确实是涂鸦平 ...

我发现,我手头的CE smart牌子的智能插座,就是用了tuyaus.com,看名字像是涂鸦美国的服务器
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-29 22:46:18 | 显示全部楼层
jpdd521 发表于 2023-4-29 17:38
个人建议,不是特别专业的。
直接上涂鸦平台,多年前我就预言涂鸦最稳定,经历了时间的洗礼,确实是涂鸦平 ...

第一次接触涂鸦,翻了一下,大量文档需要读一下,看看怎么下手做第一个属于自己的项目
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-29 23:36:41 | 显示全部楼层
jpdd521 发表于 2023-4-29 17:38
个人建议,不是特别专业的。
直接上涂鸦平台,多年前我就预言涂鸦最稳定,经历了时间的洗礼,确实是涂鸦平 ...

看到现在,对涂鸦开发平台有个基本的印象,但是好像涂鸦没有给URL接口,

我需要的是URL控制开关
回复 支持 反对

使用道具 举报

发表于 2023-4-30 00:16:16 来自手机浏览器 | 显示全部楼层
pcdoctor 发表于 2023-4-29 23:36
看到现在,对涂鸦开发平台有个基本的印象,但是好像涂鸦没有给URL接口,

我需要的是URL控制开关 ...

可以想办法转一下。不然没太合适的用的了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-30 03:05:30 | 显示全部楼层
jpdd521 发表于 2023-4-30 00:16
可以想办法转一下。不然没太合适的用的了。

如果极度简化,我不需要手机app控制, ESP32写代码处理http请求,不需要其他复杂代码,也就不需要涂鸦平台了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-30 08:07:32 | 显示全部楼层
网上找了一段ESP32 web server 代码,控制LED开关,实现了我的基本要求,只要把LED换成继电器,就好了

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

  3. /*Put your SSID & Password*/
  4. const char* ssid = " YourNetworkName";  // Enter SSID here
  5. const char* password = " YourPassword";  //Enter Password here

  6. WebServer server(80);

  7. uint8_t LED1pin = 4;
  8. bool LED1status = LOW;

  9. uint8_t LED2pin = 5;
  10. bool LED2status = LOW;

  11. void setup() {
  12.   Serial.begin(115200);
  13.   delay(100);
  14.   pinMode(LED1pin, OUTPUT);
  15.   pinMode(LED2pin, OUTPUT);

  16.   Serial.println("Connecting to ");
  17.   Serial.println(ssid);

  18.   //connect to your local wi-fi network
  19.   WiFi.begin(ssid, password);

  20.   //check wi-fi is connected to wi-fi network
  21.   while (WiFi.status() != WL_CONNECTED) {
  22.   delay(1000);
  23.   Serial.print(".");
  24.   }
  25.   Serial.println("");
  26.   Serial.println("WiFi connected..!");
  27.   Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  28.   server.on("/", handle_OnConnect);
  29.   server.on("/led1on", handle_led1on);
  30.   server.on("/led1off", handle_led1off);
  31.   server.on("/led2on", handle_led2on);
  32.   server.on("/led2off", handle_led2off);
  33.   server.onNotFound(handle_NotFound);

  34.   server.begin();
  35.   Serial.println("HTTP server started");
  36. }
  37. void loop() {
  38.   server.handleClient();
  39.   if(LED1status)
  40.   {digitalWrite(LED1pin, HIGH);}
  41.   else
  42.   {digitalWrite(LED1pin, LOW);}
  43.   
  44.   if(LED2status)
  45.   {digitalWrite(LED2pin, HIGH);}
  46.   else
  47.   {digitalWrite(LED2pin, LOW);}
  48. }

  49. void handle_OnConnect() {
  50.   LED1status = LOW;
  51.   LED2status = LOW;
  52.   Serial.println("GPIO4 Status: OFF | GPIO5 Status: OFF");
  53.   server.send(200, "text/html", SendHTML(LED1status,LED2status));
  54. }

  55. void handle_led1on() {
  56.   LED1status = HIGH;
  57.   Serial.println("GPIO4 Status: ON");
  58.   server.send(200, "text/html", SendHTML(true,LED2status));
  59. }

  60. void handle_led1off() {
  61.   LED1status = LOW;
  62.   Serial.println("GPIO4 Status: OFF");
  63.   server.send(200, "text/html", SendHTML(false,LED2status));
  64. }

  65. void handle_led2on() {
  66.   LED2status = HIGH;
  67.   Serial.println("GPIO5 Status: ON");
  68.   server.send(200, "text/html", SendHTML(LED1status,true));
  69. }

  70. void handle_led2off() {
  71.   LED2status = LOW;
  72.   Serial.println("GPIO5 Status: OFF");
  73.   server.send(200, "text/html", SendHTML(LED1status,false));
  74. }

  75. void handle_NotFound(){
  76.   server.send(404, "text/plain", "Not found");
  77. }

  78. String SendHTML(uint8_t led1stat,uint8_t led2stat){
  79.   String ptr = "<!DOCTYPE html> <html>\n";
  80.   ptr +="<head><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">\n";
  81.   ptr +="<title>LED Control</title>\n";
  82.   ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  83.   ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
  84.   ptr +=".button {display: block;width: 80px;background-color: #3498db;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
  85.   ptr +=".button-on {background-color: #3498db;}\n";
  86.   ptr +=".button-on:active {background-color: #2980b9;}\n";
  87.   ptr +=".button-off {background-color: #34495e;}\n";
  88.   ptr +=".button-off:active {background-color: #2c3e50;}\n";
  89.   ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
  90.   ptr +="</style>\n";
  91.   ptr +="</head>\n";
  92.   ptr +="<body>\n";
  93.   ptr +="<h1>ESP32 Web Server</h1>\n";
  94.     ptr +="<h3>Using Station(STA) Mode</h3>\n";
  95.   
  96.    if(led1stat)
  97.   {ptr +="<p>LED1 Status: ON</p><a class="button button-off" href="/led1off">OFF</a>\n";}
  98.   else
  99.   {ptr +="<p>LED1 Status: OFF</p><a class="button button-on" href="/led1on">ON</a>\n";}

  100.   if(led2stat)
  101.   {ptr +="<p>LED2 Status: ON</p><a class="button button-off" href="/led2off">OFF</a>\n";}
  102.   else
  103.   {ptr +="<p>LED2 Status: OFF</p><a class="button button-on" href="/led2on">ON</a>\n";}

  104.   ptr +="</body>\n";
  105.   ptr +="</html>\n";
  106.   return ptr;
  107. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-30 08:09:30 | 显示全部楼层
这段代码复制后,仅仅修改ssid和password就顺利运行了
回复 支持 反对

使用道具 举报

发表于 2023-4-30 08:44:25 | 显示全部楼层
pcdoctor 发表于 2023-4-30 03:05
如果极度简化,我不需要手机app控制, ESP32写代码处理http请求,不需要其他复杂代码,也就不需要涂鸦平 ...

ESP32写代码处理http请求,没有任何问题。
关键是这个方法对大多数人来说,只能在家庭内部使用
没有公网IP,不能在外操作。

我搞自己的平台好多年了,看我的帖子,我介绍了我家整个的智能家居系统的架构。
如果你就打算做着一个插座,那就插座直接处理URL是最简单的方法了。如果设备多了,还是需要平台的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-9 21:42 , Processed in 0.312001 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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