全攻略自制esp8266 WIFI智能排插教程

前言

其实自己动手制作一个智能排插很容易,看见网上的教程有点乱,所以我决定自己写一篇,只需要你懂一点编程知识,就可以制作自己专属的智能排插。有兴趣的小伙伴可以往下看,下面我会给出代码和需要购买的硬件,和淘宝购买链接,你们也可以买同款的就行
个人觉得自己制作一个智能排插还是很酷的,这是智能家居的第一步,而且这个教程对于初学者来说也很简单。只需要懂一点点的编程知识和基本的电路知识!

准备的硬件材料

这些材料在淘宝都可以买到,而且便宜。你们可以自己淘宝购买
1、一个ESP8266继电器模块
https://detail.tmall.com/item.htm?id=613196686630&ali_refid=a3_430582_1006:1109448581:N:f3UcR2bj62K11wu5bKiTmdlaW7nnE8LJ:3e76be54b71ce399c8244dd109c174a5&ali_trackid=1_3e76be54b71ce399c8244dd109c174a5&spm=a230r.1.14.13
2、220v转5v直流电源模块一个
https://detail.tmall.com/item.htm?id=563768859713&ali_refid=a3_430583_1006:1104520036:N:zrgs3NL8uSoaUvWTt4XPeQ==:4be61dba0a78e09e2b944690f4166ef4&ali_trackid=1_4be61dba0a78e09e2b944690f4166ef4&spm=a230r.1.14.3
3、esp8266下载器一个
购买链接:https://detail.tmall.com/item.htm?spm=a230r.1.14.25.57e444berFdTzt&id=595781846210&ns=1&abbucket=7
4、普通排插一个

最后成品

其实最后就是将这些模块集成在排插里面,让排插变成一个我们可以控制的器件

最后成品
内部接线图注意事项:
1、将变压模块输入端连接到220V输出端连接到esp8266模块的电源输入端
2、将排插的火线截断,两根分别连接到继电器的com端和nc端

编程准备

1、安装arduino
https://www.arduino.cn/resource.php
2、然后对ESP8266程序写入的教程大致有两种,1是下载别人做好的bin文件包,使用专用软件烧录到ESP8266,我查了下,资料比较多,貌似难度很大;2是使用USB转TTL工具进行写入,先利用Arduino IDE进行写入,我们就用这种方法。
打开Arduino IDE,默认的Arduino IDE是没有ESP8266库的,需要我们自己添加上。
点击Arduino IDE的文件-首选项,在附加开发板管理器网址中填入:
http://arduino.esp8266.com/stable/package_esp8266com_index.json

在这里插入图片描述
在这里插入图片描述

然后点击工具-开发板-开发板管理器,在搜索框中输入esp8266,然后回车,稍等一会儿,就能在搜索结果中看到esp866 for esp8266 community的项目,点击安装。
在这里插入图片描述
安装需要一些时间,完成后重启Arduino IDE,再看开发板管理器,就能看到esp866 for esp8266 community的状态是安装过的(installed)。

在这里插入图片描述
这时候再打开工具-开发板,在开发板管理器下面,就能找到我们的ESP8266 Module了,点击选中它。
这时我们打开工具,开发板XXXX就变成了Generic ESP8266 Module了,说明当前的开发板是ESP8266了。

在这里插入图片描述
这些工作都准备好以后我们就可以编程

编程

下面展示一些 内联代码片

// A code block
var foo = 'bar';
// An highlighted block
#include <ESP8266WiFi.h>
#define MAX_SRV_CLIENTS 5    //定义可连接的客户端数目最大值 不能超过5个

//设置成TCP连接,服务端
WiFiServer server(8080);//服务器端口8080
WiFiClient serverClients[MAX_SRV_CLIENTS];
//WiFiClient  client;   //创建客户端
//const int tcpPort = 8266;//服务器端口
//打开继电器
uint8_t  tmp1[]= {0xA0,0x01,0x01,0xA2};
//关闭继电器
uint8_t  tmp2[]= {0xA0,0x01,0x00,0xA1};

char ssid[] = "WWW";  //  你的路由器SSID (name)
char password[] = "cc123456"; // 你的wifi密码 password
String aa = "";//接收到客户端的数据
uint8_t fale1 = 0;
uint8_t fale2 = 0;
//char   *Value16;
void setup()
{
  //这个波特率是和模块的通讯频率,不能更改
  Serial.begin(9600);
  pinMode(4,OUTPUT);//继电器io
  //
  IPAddress Localip(192,168,8,107);//指派模块的局域网ip
  IPAddress Gateway(192,168,8,1);//局域网网关,路由器ip,这里的ip根据你的路由设置
  IPAddress Subnet(255,255,0,0);//局域网子网掩码 ,可以在电脑或者路由器查到
  WiFi.config(Localip, Gateway, Subnet);//配置网络
  WiFi.begin(ssid, password);//连接wifi
  WiFi.mode(WIFI_STA);//wifi为客户端
  //启动UART传输和服务器
  server.begin();
  server.setNoDelay(true);
  }
  void loop()
{ 
 // kongzhi();
// if(Serial.available() >0)
// {
 // Value16 =(char*)(Serial.read());
  
//  }
  uint8_t i;
  //检测服务器端是否有活动的客户端连接
  if (server.hasClient()){
    for(i = 0; i < MAX_SRV_CLIENTS; i++){
      //查找空闲或者断开连接的客户端,并置为可用
      if (!serverClients[i] || !serverClients[i].connected()){
        if(serverClients[i]) serverClients[i].stop();
        serverClients[i] = server.available();
        continue;
      }
    }
    //若没有可用客户端,则停止连接
    WiFiClient serverClient = server.available();
    serverClient.stop();
  }
  //检查客户端的数据
  for(i = 0; i < MAX_SRV_CLIENTS; i++){
    if (serverClients[i] && serverClients[i].connected()){
      if(serverClients[i].available()){
        //从Telnet客户端获取数据,并推送到串口
        while(serverClients[i].available())
        {
         aa+= char(serverClients[i].read());//aa就是收到的数据,用来做对比执行操作
        
         delay(2);}
         if(aa == "a")  //接收到字符a打开继电器
         {
          //回复客户端,已经接收到指令
          serverClients[i].write("kai");
         
          if(fale1 == 0){
            fale1 = 1;
            fale2 = 0;
         //  int Length1 = sizeof(tmp1);
         //打开继电器
         for(int j = 0 ; j<=3 ;j++)
         {
          Serial.write(tmp1[j]);
         //  Serial.print(tmp1[j],HEX);
         //  Serial.println("");
          }
         }
         }
           if(aa == "b")
         {
          //关闭继电器
           serverClients[i].write("guan");
           if (fale2 == 0){
         //  int Length2 = sizeof(tmp2);
         fale1 = 0;
         fale2 = 1;
         for(int j = 0 ; j<=3 ;j++)
         {
          Serial.write(tmp2[j]);
         //  Serial.print(tmp1[j],HEX);
         //  Serial.println("");
          }
         }
         }
         if(aa == "c")
         {
          //心跳包
           serverClients[i].write("ok");
          }
         
     
      aa = "";

      }
    }
  }
}

然后就可以烧录程序了。

烧录

1、将esp8266下载器的驱动安装好,一般你购买的店家都会给你一个驱动
2、将esp8266插在烧录器上,使用ARDUINO烧录,完成以后
3、将烧录好的esp8266插回去继电器模块

改装排插

1、将排插拆开,把220V接在220V转5V的变压模块输入上,注意不要接反了
2、将变压模块输出口接在继电器模块的电源口上
3、之后将排插的火线截断,接在继电器的COM口和NC口上
最后整理一下,把排插盖上。
效果图:
在这里插入图片描述# 测试
使用TCP测试工具,测试信号是否导通
在这里插入图片描述用电脑打开TCp助手,按图上配置,按连接,然后发送字符a看排插是否通电了。

如果可以通电,再发送b,看是否关闭。如果都可以,那就是已经成功了!
这些都是我亲自测试过完全可行的,这里给出TCP测试助手的下载连接

复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1u6zlpbPA6CapmV9L4y_cuQ 提取码:95p2

部署到服务器

经过上面,就可以在局域网控制家中的家电了,现在只是局域网,如果你想在外面查看家中电器的打开或者关闭情况,则你需要部署到服务器,或者你也可以在家里做个内网穿透。我是想自己有空再写个安卓应用,由于这里还涉及到安卓开发,篇幅比较长,就留到下一篇教程。
你们可以参考这篇文章
https://blog.51cto.com/6273125/2343496

  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值