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

[复制链接]
7949|27
 楼主| simonliu009 发表于 2017-3-18 11:45 | 显示全部楼层 |阅读模式
本帖最后由 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的源码,复制和传播请保留版权信息,谢谢。
  1. /*21ic 第二届拆解+DIY大赛
  2. 作者:simonliu009@21ic
  3. QQ:150739525
  4. 复制和传播请保留版权信息,谢谢。
  5. */

  6. #include <FS.h>  

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

  9. #include <DNSServer.h>

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

  12. #define relay1 13

  13. unsigned int localPort = 8267;
  14. char packetBuffer[10];


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

  17. WiFiUDP Udp;



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


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

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


  33.     Serial1.println("Wifi Connected :)");
  34.     Serial1.println("Local Ip Address");
  35.     Serial1.println(WiFi.localIP());
  36.   
  37.     Udp.begin(localPort);  //开始UDP监听
  38.     Serial1.print("UDP端口");   
  39.     Serial1.print(localPort);      
  40.     Serial1.println("监听开始......");
  41. }

  42. void loop()
  43. {
  44.     // if there's data available, read a packet
  45.     int packetSize = Udp.parsePacket();
  46.   
  47.         if (packetSize)
  48.         {

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

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


  53.               if(packetBuffer[0]=='L'&&packetBuffer[1]=='A'&&packetBuffer[2]=='M'&&packetBuffer[3]=='P'&&packetBuffer[4]=='O'&&packetBuffer[5]=='N')
  54.               {
  55. //               delay(parseInt(packetBuffer[]) * 1000);
  56.                  digitalWrite(relay1, HIGH);
  57.               }
  58.               
  59.               if(packetBuffer[0]=='L'&&packetBuffer[1]=='A'&&packetBuffer[2]=='M'&&packetBuffer[3]=='P'&&packetBuffer[4]=='O'&&packetBuffer[5]=='F'&&packetBuffer[6]=='F')
  60.               {
  61.                   digitalWrite(relay1, LOW);
  62.               }
  63.            
  64.         }

  65. }




 楼主| simonliu009 发表于 2017-3-18 11:54 | 显示全部楼层
本帖最后由 simonliu009 于 2017-3-18 12:15 编辑

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

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

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

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





本帖子中包含更多资源

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

×
dirtwillfly 发表于 2017-3-18 13:51 | 显示全部楼层
21ic大掌柜 发表于 2017-3-20 08:17 | 显示全部楼层
,非常详尽的改装教程。
liuyudong_a 发表于 2017-3-20 10:30 | 显示全部楼层
显得很高大上。
 楼主| simonliu009 发表于 2017-3-20 11:14 | 显示全部楼层
21ic大掌柜 发表于 2017-3-20 08:17
,非常详尽的改装教程。

谢谢大掌柜支持
 楼主| simonliu009 发表于 2017-3-20 11:18 | 显示全部楼层

谢谢支持
胡斯哲 发表于 2017-3-20 13:57 来自手机 | 显示全部楼层
steelfly 发表于 2017-3-20 23:40 | 显示全部楼层
感觉还行哈
 楼主| simonliu009 发表于 2017-3-21 15:35 | 显示全部楼层
 楼主| simonliu009 发表于 2017-3-21 15:55 | 显示全部楼层
second_chan 发表于 2017-3-23 11:11 | 显示全部楼层
谢谢楼主分享。。。
 楼主| simonliu009 发表于 2017-3-23 12:52 | 显示全部楼层
second_chan 发表于 2017-3-23 11:11
谢谢楼主分享。。。

谢谢支持
逍遥李 发表于 2017-3-27 09:57 | 显示全部楼层
感谢分享啊,这个是UDP通信?只能局域网控制?
 楼主| simonliu009 发表于 2017-3-27 16:09 | 显示全部楼层
逍遥李 发表于 2017-3-27 09:57
感谢分享啊,这个是UDP通信?只能局域网控制?

是的 ,只能UDP
当然接入物联网也可以做
只不过还没做过
gfdoudou 发表于 2017-4-6 16:57 | 显示全部楼层
楼主这个考虑过远程控制么,有没有想法啊???
 楼主| 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插座已经遍地开花了,我在这上面花的精力不多。
qhdyang 发表于 2017-5-19 15:28 | 显示全部楼层
写的非常好学习了
junpeng324 发表于 2017-7-29 11:07 | 显示全部楼层
厉害了,学习了,我之前也写过esp8266的云服务,这个能远程吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

639

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部