打印
[活动]

【21ic改装大赛】USB插座改装为Wifi插座(附ESP8266和安卓APP源码)

[复制链接]
7004|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 simonliu009 于 2017-3-18 11:45 编辑

看了本版王栋春的遥控器改造贴才发现论坛有这个活动,当下立刻想到把我自己改造WIFI插座的经验分享一下。于是又花了3天的时间,把源码重新整理测试了一下,app重新修正改进了一下。我相信用我的源码和app,你也一定能拥有自己的WIFI插座。

所需元件
一个插座(我使用了一个USB插座,自带两个USB充电口,一个2孔插座,一个5孔插座。选它的原因是内部空间比较大,挑选合适的USB插座其实不容易,因为内部要能放下所有的器件,我这里用的是牛人 NR-128,首富家价格25.3元)
一个220V转5V(500mA+)适配器/模块(我用了一个闲置已久的kindle适配器,750mA的,放在我这个插座里面完美适配。普通模块价格3-5元不等)
一个ESP8266模块 (现在推荐购买安信可的ESP-12F。我用的是很久以前买的一个合宙ESP8266模块,现在他们的网站都打不开了,但是模块还是好使的。价格12元左右)
一个5V转3.3V模块(可以用500mA以上的1117,但是我喜欢DC/DC,而且更倾向于电流有些余量,所以用了一个Mini-360航模可调电源降压模块,调整为3.3V输出,价格2元左右)
一个继电器(模块)(为了方便,我使用了一个可调高低电平有效的继电器模块,并设置为高电平有效,4元左右)
一个USB A型公头(此元件为可选,这是配合我的5V适配器方便引出电源用的,如果你直接使用一个模块,那么此元件可以省略,价格0.15元左右)
我的总成本大约43元左右(不含5V适配器)

ps 首富家也有卖Wifi插座diy套装的,但是只是一个三孔插座,继电器也不是模块,需要自己搭一下电路,大家也可以考虑。那个成本比我的更低。我这里就不放链接了,免得说是做广告。(其实我也没有放链接的权限
电路图
电路很简单,5V给继电器供电,3.3V给ESP8266供电,ESP8266的GPIO13作为继电器模块的控制信号引脚。所控制开关的火线入线接继电器模块COM口,出线接NO口(吸合时导通)。


元件全家福



首先拆开插座,可以看到里面USB充电口有一块电路板。


取出USB口的电路板,由于体积太大,不破坏PCB的情况下5V模块很难用,所以就拆下来算了。


闲置很久的一个kindle适配器,后来没想到放到里面非常完美。


配合一个USB A型公头,方便引出5V。


最开始尝试了一下拆卸适配器外壳,但是外壳非常结实。于是放弃拆卸,直接放进去。没想到适配器和USB头正好完美卡在那个位置,纹丝不动。长度宽度都刚刚好。


调好DCDC降压模块的输出电压,用万用表确定好以后,把可调电阻用热溶胶封住,以免装配时碰到。然后按照电路图装好电路。
我的设计是只控制USB孔下方的2孔插座,右侧5孔插座保持常通。
里面的铜线很硬,又容易散热,焊接和操作起来还是没那么容易。
各部件各就各位。


然后原样装好,完美。上手写ID。



注意,如果家里有小孩,请注意把USB口封死,否则小孩拿着手机充电线乱捅有触电危险。







相关帖子

沙发
simonliu009|  楼主 | 2017-3-18 11:50 | 只看该作者
本帖最后由 simonliu009 于 2017-3-18 12:24 编辑

ESP8266的固件,我使用了Arduino IDE来进行编程和烧写,在Arduino IDE安装ESP8266的库以后就能直接用Arduino IDE对ESP8266进行编程了,非常方便。
下面是ESP8266的源码,复制和传播请保留版权信息,谢谢。
/*21ic 第二届拆解+DIY大赛
作者:simonliu009@21ic
QQ:150739525
复制和传播请保留版权信息,谢谢。
*/

#include <FS.h>  

#include <ESP8266WiFi.h>         
#include <EthernetUdp.h>

#include <DNSServer.h>

#include <SPI.h>
// #include <Ethernet.h>

#define relay1 13

unsigned int localPort = 8267;
char packetBuffer[10];


const char *ssid     = "Asus";//这里改为你要连接的wifi ssid
const char *password = "esp20170317";//你要连接的wifi密码

WiFiUDP Udp;



void setup() {
  // put your setup code here, to run once:
    Serial1.begin(9600);
    Serial1.println();
    pinMode(relay1, OUTPUT);
    digitalWrite(relay1, LOW);  


    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);

  
    while (WiFi.status() != WL_CONNECTED)
                                         
    {
        delay(500);
        Serial1.print(".");
    }//如果没有连通向串口发送.....


    Serial1.println("Wifi Connected :)");
    Serial1.println("Local Ip Address");
    Serial1.println(WiFi.localIP());
  
    Udp.begin(localPort);  //开始UDP监听
    Serial1.print("UDP端口");   
    Serial1.print(localPort);      
    Serial1.println("监听开始......");
}

void loop()
{
    // if there's data available, read a packet
    int packetSize = Udp.parsePacket();
  
        if (packetSize)
        {

          for (int i = 0; i<=9; i++){
            packetBuffer[i] = 'Z';
            }

          Udp.read(packetBuffer, 10); // 将UDP包读入缓冲区


              if(packetBuffer[0]=='L'&&packetBuffer[1]=='A'&&packetBuffer[2]=='M'&&packetBuffer[3]=='P'&&packetBuffer[4]=='O'&&packetBuffer[5]=='N')
              {
//               delay(parseInt(packetBuffer[]) * 1000);
                 digitalWrite(relay1, HIGH);
              }
              
              if(packetBuffer[0]=='L'&&packetBuffer[1]=='A'&&packetBuffer[2]=='M'&&packetBuffer[3]=='P'&&packetBuffer[4]=='O'&&packetBuffer[5]=='F'&&packetBuffer[6]=='F')
              {
                  digitalWrite(relay1, LOW);
              }
           
        }

}




使用特权

评论回复
板凳
simonliu009|  楼主 | 2017-3-18 11:54 | 只看该作者
本帖最后由 simonliu009 于 2017-3-18 12:15 编辑

第一个安卓的客户端用“易安卓”写的,这里也分享源码和apk,如果不改端口和命令,直接能和我的ESP8266固件配合使用。
  

基本原理是在LAN内发送UDP命令,考虑到UDP的不可靠性,所以一个命令按键连续发送3次。点击“开灯”,打开WIFI开关,点击“关灯”关闭WIFI开关。也可以使用滑动开关来进行控制。

另外除了简单的开关功能,还有延时关灯的功能。选择延时时间后,点击“延时关灯”,就会在指定时间后关闭开关。注意,在关闭前请保证手机不处于休眠状态。
这个功能例如在上床睡觉的时候,可以延时30秒关灯(灯连到WIFI插座上),就不用摸黑上床了。
程序并不完美,比如滑动开关状态不会根据按键控制来改变等等,不过用起来已经响应比较快了。

源码和apk奉上,更改和分发请保留版权信息,谢谢。





WIFI开关 V1.9.apk.zip

185.31 KB

APK已测试通过,请保留版权信息

lamp_21ic_competition_by_simonliu009.zip

48.23 KB

请保留版权信息

使用特权

评论回复
地板
dirtwillfly| | 2017-3-18 13:51 | 只看该作者

使用特权

评论回复
5
21ic大掌柜| | 2017-3-20 08:17 | 只看该作者
,非常详尽的改装教程。

使用特权

评论回复
6
liuyudong_a| | 2017-3-20 10:30 | 只看该作者
显得很高大上。

使用特权

评论回复
7
simonliu009|  楼主 | 2017-3-20 11:14 | 只看该作者
21ic大掌柜 发表于 2017-3-20 08:17
,非常详尽的改装教程。

谢谢大掌柜支持

使用特权

评论回复
8
simonliu009|  楼主 | 2017-3-20 11:18 | 只看该作者

谢谢支持

使用特权

评论回复
9
胡斯哲| | 2017-3-20 13:57 | 只看该作者
厉害

使用特权

评论回复
10
steelfly| | 2017-3-20 23:40 | 只看该作者
感觉还行哈

使用特权

评论回复
11
simonliu009|  楼主 | 2017-3-21 15:35 | 只看该作者

使用特权

评论回复
12
simonliu009|  楼主 | 2017-3-21 15:55 | 只看该作者

谢谢支持

使用特权

评论回复
13
second_chan| | 2017-3-23 11:11 | 只看该作者
谢谢楼主分享。。。

使用特权

评论回复
14
simonliu009|  楼主 | 2017-3-23 12:52 | 只看该作者
second_chan 发表于 2017-3-23 11:11
谢谢楼主分享。。。

谢谢支持

使用特权

评论回复
15
逍遥李| | 2017-3-27 09:57 | 只看该作者
感谢分享啊,这个是UDP通信?只能局域网控制?

使用特权

评论回复
16
simonliu009|  楼主 | 2017-3-27 16:09 | 只看该作者
逍遥李 发表于 2017-3-27 09:57
感谢分享啊,这个是UDP通信?只能局域网控制?

是的 ,只能UDP
当然接入物联网也可以做
只不过还没做过

使用特权

评论回复
17
gfdoudou| | 2017-4-6 16:57 | 只看该作者
楼主这个考虑过远程控制么,有没有想法啊???

使用特权

评论回复
18
simonliu009|  楼主 | 2017-4-6 17:55 | 只看该作者
本帖最后由 simonliu009 于 2017-4-6 21:18 编辑
gfdoudou 发表于 2017-4-6 16:57
楼主这个考虑过远程控制么,有没有想法啊???

远程控制有几种方法:
1. 手机***连到wifi所在的网络,就可以当作LAN内的控制效果。此法简单粗暴,限制明显。
2. 连接到IoT服务器,通过IoT端以及相应的app控制。
当然还有很多坑要填,比如一个网络内的多个插座识别和单独控制问题,WIFI密码手动配置问题。当然这些都可以做的,WIFI密码手动配置这个坑已经填了。
目前我还在忙别的项目,WIFI插座已经遍地开花了,我在这上面花的精力不多。

使用特权

评论回复
19
qhdyang| | 2017-5-19 15:28 | 只看该作者
写的非常好学习了

使用特权

评论回复
20
junpeng324| | 2017-7-29 11:07 | 只看该作者
厉害了,学习了,我之前也写过esp8266的云服务,这个能远程吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

638

帖子

4

粉丝