一,前言
其实自己动手制作一个智能排插很容易,看见网上的教程有点乱,所以我决定自己写一篇,只需要你懂一点编程知识,就可以制作自己专属的智能排插。有兴趣的小伙伴可以往下看,下面我会给出代码和需要购买的硬件,和淘宝购买链接,你们也可以买同款的就行。
个人觉得自己制作一个智能排插还是很酷的,这是智能家居的第一步,而且这个教程对于初学者来说也很简单。只需要懂一点点的编程知识和基本的电路知识!
准备的硬件材料,材料在淘宝都可以买到,而且便宜。你们可以自己淘宝购买1、一个ESP8266继电器模块;2、220v转5v直流电源模块一个;3、esp8266下载器一个;4、普通排插一个。
其实最后就是将这些模块集成在排插里面,让排插变成一个我们可以控制的器件,实物如下图:
注意事项:1、将变压模块输入端连接到220V输出端连接到esp8266模块的电源输入端;2、将排插的火线截断,两根分别连接到继电器的com端和nc端
二,编程准备
对ESP8266程序写入的教程大致有两种,1是下载别人做好的bin文件包,使用专用软件烧录到ESP8266,我查了下,资料比较多,貌似难度很大;2是使用USB转TTL工具进行写入,先利用Arduino IDE进行写入,我们就用这种方法。
打开Arduino IDE,默认的Arduino IDE是没有ESP8266库的,需要我们自己添加上。
点击Arduino IDE的文件-首选项,在附加开发板管理器网址中填入:
这些工作都准备好以后我们就可以编程
// 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,看是否关闭。如果都可以,那就是已经成功了!经过上面,就可以在局域网控制家中的家电了,现在只是局域网,如果你想在外面查看家中电器的打开或者关闭情况,则你需要部署到服务器,或者你也可以在家里做个内网穿透。
==========
往期回顾:
==========
原文:点击阅读原文
作者:放羊的码字猿
平台:CSDN