极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 63416|回复: 15

ESP8266WIFI模块自制智能插座

[复制链接]
发表于 2015-10-21 03:42:35 | 显示全部楼层 |阅读模式
本帖最后由 Allenter 于 2015-10-21 10:45 编辑

     本人在今年年初就对Arduino和ESP6288(WIFI智能控制芯片)很感兴趣,当时就在淘宝购进了Arduino套件、ESP6288模块(EP-01和EP-12 )以及杂七杂八的一些小原件等等,平常比较忙,时间不算多,一边制作测试板然后做各种实验,一边学习相关编程技术,目前程序开发只是略懂皮毛,不过也算小有心得吧。
     前段时间看到许多朋友用ESP6288WIFI智能控制芯片模块制作了不少东西,我也磨拳檫手打算也尝试一下作出一个成品来,这段时间稍稍有点时间,于是马上动手,参考网上一些朋友的经验,利用手上现有的材料和原件,制作了两个WIFI控制的智能插座,有一个已经放在公司对某个设备进行控制,挺好用的。
ESP6288现在有不少成品模块以及集成模块,大都价格低廉。对于开发和测试方便的如NodeMcu Lua WIFI 物联网开发板,30元左右,接上继电器模块就行了,相当简便易行。不过本人手上现成模块有EP-01和EP-12模块 ,还有低电平触发的继电器模块,考虑不要浪费,所以干脆就动手多一点吧。
     对于EP-01模块(最便宜的模块,X宝现在8元都能买到了),网上已经有详细介绍,我这里就不累赘复述了,硬件上主要制作和改造几样东西,一个是供电电源,一个是继电器低电平改高电平触发,最后就是插座本身了。如果原件材料准备齐全的话,半天一天就可以完成的,但实际上工作之余的时间也是比较碎化,加上一些小原件和工具缺乏,影响了一些配套电路板制作和某些物件的调整加工,另外,程序开发上,虽然参考一些网上资料,也收集不少相关的开发说明和例程之类的,但发现不少的文章有各种缺陷,很多都说的不够透彻明白,导致调用物联网API进行控制程序开发调试花费很多时间精力才初步搞出个所以然,所以整个制作过程其实还是挺费时的。
     废话少说,现在看看我的制作过程吧。
一、硬件部分
1、  主要部件材料:
a)        普通多位插座;
b)        ESP6288 (EP-01)模块;
c)        5V、3.3V双输出的开关电源模块;
d)        高电平触发的继电器模块。
2、  制作过程
制作之前,其实一开始倒想的是要找个迷你一点的电源当电源模块,前家里面一大堆充电器,从古代变压器式一直到现在开关型的、各种输出接口的都有,结果发现要么就太大太变态,要么就觉得外观太帅或内在太强大舍不得破坏,最后拿个当年风靡全球motorola V3手机的原配随从,固死MiniUSB输出,外观漂亮完全无缝无螺丝,当然性能绝对稳定,于是闭目举锤侍候,清脆噼啪一声巨响,电源板破壳而出,壳体碎片缤纷四射,犹如开工仪式,于是正式宣告制作之旅开始。
a)        多位插座的改造
以前作为一个喜欢折腾各种电子电器的负9级业余爱好者,家里面当然备有各种各样的居家旅行、冒充达人必备的电源插座,这不,顺手拿了个桌面上默默奉献十载有余的双排共六插位的插座,钛合金眼目视里面空间可能足够,而且表面所帖3C认证仍然未变色,估计安全指数略有保障,就它了!
首先来自原照
IMG_20151012_171928.jpg
拆开的内部照
IMG_20151012_172015.jpg
相对伪而又劣的产品而言,它应是略伪微劣,我喜欢:)
插座为3组×2插位的插口安排,内部每组都可拆卸,考虑到插座不厚而且电源板以及继电器模块都比较占位置,于是拆去一组,剩下的2组插位刚好可以安装2路继电器进行控制,不够原来插口之间的连接电线的接法不大合适了,稍微改造一下才行。
改好插口后的内部照,安放电路模块的位置,用废会员卡剪好当作底板兼绝缘挡板。
IMG_20151014_211103.jpg
试着摆放电源板、继电器板、EP-01板的POSE和位置,最后选出合理摆法,紧跟着对插座里面原有的固定螺丝胶柱进行削平处理,使得几个板子都能平稳摆放,电源板和继电器板都有些大,认真观察电路板后,也必需对这两块板子施行手术,割纸型手术刀略略钝化,本人也略略粗暴,幸亏术后它们都正常。

b)        5V开关电源加装3.3V输出
充电器所拆出的开关电源板是这个样子的,输出电压5V,电流600mA。
IMG_20151012_172052.jpg
电源板是5V的输出,继电器的供电电源要求是5V不错,但ESP6288 模块的电源电压要求是3.3V,所以必需要加装3.3V的稳压电路,其实我这里本来有很小的现成的3.3V稳压模块,很适合,不过只剩一片并已经用在某个控制系统里,所以不得不考虑重新做一个,这项工程费了我不少时间,不断的思考和翻箱倒柜查找原件弄得我直接失眠。就为解决这3个问题:一是加装还是改装?二是要找到最好是贴片型的3.3V稳压芯片,三是加装的话得找一片或自己做一点足够小的电路板制作3.3V稳压板。主要问题是找到微型稳压芯片以及做个小小电路板的问题,本人属于急性子Pro版,那天晚上我下定决心在不打扰家人休息的情况下把这件事完成(所以不能动电钻锯子类),功夫不费有心人,在我心力交瘁失眠即将变失心疯的时候,找一片12V接口LED射灯恒流电路板以及废弃不用十多年的USB红外线接收板,恒流电路板一平方厘米都不到,里面电路布局经我深入浅出的研究,发现把里面的恒流芯片换成稳压芯片并稍稍改动一下,就很容易改成所需的稳压电路,而USB红外线接收板里面就有一片3.3V的贴片稳压芯片。
IMG_20151012_224240-1.jpg
只为拆3.3V稳压芯片用的USB红外线接收板
12VLED射灯驱动板.jpg
准备拿来改造成3.3V稳压电路的LED射灯恒流电路板

所以子时过去丑时来临之前弄出了体积够小胡3.3V稳压电路,不容易啊!

c)        继电器模块改装为高电平触发
计划采用2路控制的继电器模块,分别控制插座插位组1和插位组2的电源通/断。
以前淘来那堆嘎达里,有几个5V继电器模块,有8路、2路、1路控制的,有直接触控型也有光耦触控型,但都是低电平触发,而ESP8266模块的两个IO口是3.3V输出电平,它的高电平和继电器的所需高电平不一致,也许这破继电器模块在玩自我、玩特别,反正就是对输入的高电平不怎么感冒,触发不太正常,而且低电平触发和我的惯性思维不一致,再加上看到这个2路控制光耦型继电器模块的电路挺简单,电路板无论是布线还是空位还有一点空间,于是就兴冲冲的去改造继电器模块,把它弄成高电平触发型的。
下图就是这个2路的低电平触发的继电器模块,使用说明指出JD-Vcc和Vcc可以独立供电,一般默认共用同一电源,即通过跳线把JD-Vcc和Vcc联一起就行。
继电器-2路.jpg
2路的低电平触发的继电器模块
光偶继电器模块-00.jpg
改造前的继电器模块原理图(只画单路)

没什么特别的考虑,就运用常规性的思维弄个翻转电路而已,把继电器模块的触发接脚处的布线断开,补接一个npn型三极管Qn(用的是常见的9014管子)再加个输入电阻Rn就可以把电平进行翻转,原理简单功夫不欠,凌晨时刻头昏眼花地进行精细切割和精细焊接作业,继续做未眠人,仅此而已。

光偶继电器模块-01.jpg
改造后的继电器模块原理图(只画单路)
IMG_20151014_215904.jpg
改造后的继电器模块(为了放下插座,基板切去两个角)

补充改后心得:这个继电器模块的改造,也费了不少时间,仓促间没认真画全它的电路图,没有思考成熟就通过加装三极管翻转电平方式改造,那么小的空间加装和焊接,以后可能会造成隐患的。到写这篇文章的时候,已经彻底弄清里面的电路原理和布线布局,其实这板子低改高的触发真的不必那么麻烦,不需加任何原件,只需把几根布线割断重新改其连接就可以的了。更加简单的是,本继电器是光耦型的控制电路,光耦隔离前后两部分电路的电源正极是可以分开接入的,分别是Vjd和Vcc接脚。光耦后级的控制电路部分,可以在Vjd插脚插上5V电源进行供电,而光耦前级的触发电路可在Vcc插脚插上3.3V电源,就解决原来的高电平异常现象,所以不需任何改造就可以把ESP6288模块的IO脚接进来进行正常控制的。之前真是鲁莽行事白费气力不说,还吃力不讨好啊,切忌教训!!!
光偶继电器模块-03.jpg
其实继电器模块这样接就可以变高电平触发了

d)        ESP6288 (EP-01)模块的固件烧写以及控制程序载入
ESP6288模块须事先进行固件烧写以及控制程序载入,详见后面的软件部分的介绍。


3、  硬件完成和测试
快天亮了,电路模块一切都改装,在接入ESP8266模块之前先接好稳压电路的电线,通上电测量电压,5V和3.3V输出都没有问题,然后接上ESP8266模块和继电器模块,对所有联接线认真检查了一遍,确实没有什么隐患,再通电测试,这时通过之前做好的物联网操控界面进行操作,结果一切OK!
IMG_20151017_125125.jpg

固定各个好模块,继电器模块和主电源板用螺丝固定在自制底板上,3.3V稳压小板和ESP8266模块嵌入在电路板和底座之间的缝隙,都在弱电这一侧,位置和空间恰恰好安全又有保障,剩下就是理好走线,某些必要的地方用万能胶固定一下。
IMG_20151017_125216.jpg

盖上盖子,翻回正面,可以看到右边的那组插位已经被贵宾卡占据,稍稍突出的两枚螺丝是固定继电器模块的,最后的工序就是把这些暴露的孔位全部处理好。
IMG_20151017_134230.jpg

剪、剪、剪,割、割、割,马马虎虎用层叠的硬纸片做成盖板,上胶水固定,看起来还不赖,色调吻合饱含本土科技味,就是千万别按上面所印刷的网址乱访问,否则误入某些吸金机构就不好了,OK,搞搞清洁卫生,最后收工!
IMG_20151017_141036.jpg
这就是高大上的成品插座

二、软件部分
制作本智能插座之前,玩了几个月ESP8266模块,逛了不少技术窑子,哦!不,是坛子。前后经历一番后,后期基本都用NodeMCU固件版的,即将NodeMCU的固件刷进ESP8266模块,目前版本是Ver 0.9.6,官方网站(http://www.nodemcu.com/)介绍说:“NodeMCU提供硬件的高级接口,可以将应用开发者从繁复的硬件配置、寄存器操作中解放出来。用交互式Lua脚本,像arduino一样编写硬件代码!”,所谓用交互式Lua脚本即支持LUA语言,确实是简便易学,可以迅捷地进行编程,而且网上可以找到很多相关资源,确实挺适合普通水平的爱好者。
ESP8266模块有很多版本,我现在这里是用最简陋和最便宜的EP-01(有些标注ESP-01,然后用万能板自制了一个用于EP-01模块的开发板,插电脑USB口即可使用,当然你也可以直接购买NodeMcu的开发板,更加便于开发。
整个系统的软件建设的步骤主要是:第一,下载并刷写NodeMcu固件;第二,设置物联网平台的相应控制接口;第三是编写控制程序和接口程序;第四是模块载入程序以及调试;最后是联网测试。

1、  下载NodeMcu固件并刷进ESP8266模块
通过开发板把NodeMCU固件烧写进ESP8266模块,版本0.9.6的NodeMCU固件在此下载:https://github.com/nodemcu/nodemcu-firmware/releases/tag/0.9.6-dev_20150704,ESP8266模块的刷写网上很多文章都有介绍,这里也不复赘了,下载和刷固件教程可参考:http://bbs.nodemcu.com/t/nodemcu/22。

2、  设置物联网平台的相应控制接口
由于主要应用是智能控制设备,综合比较后,物联网平台选用国内挺出名的“乐联网”IOT平台(http://www.lewei50.com/),此平台免费注册使用,在上面可以通过简单的网关设备,让您轻松玩转物联网。除了不少智能传感器和控制设备,也支持工业仪器仪表测量数据快速便捷发布上网无缝接入,可以完成海量数据的快速接入和存储,并提供丰富的数据分析应用,让您更精确的掌控您的数据。同时可公开您的测量设备和数据,尽情展示您的创意和产品。此外通过移动客户端即乐联网移动版App或者微信平台,都可让您随时随地登录乐联网,便利操控物联网的智能应用。
乐联网整个系统采取用户-设备-传感器 三层概念,每一层都提供对应的API来让用户方便获取或更新数据,满足不同种类的物联网应用。
具体设置步骤:
1)、首先注册账户
登录http://www.lewei50.com即可在首页注册账户,用户注册成功后会分配一个Userkey,在调用需要授权的API时都需要用到;

2)、添加设备
进入“进入用户中心”的操作界面,界面上边一行菜单默认是“我的物联”,这时在左边的菜单列表下选“我的设备”,然后添加新设备,这里我添加了一个标识为“02”、名称为“ALA-IAS”的设备;
Lewei50_000.gif
设备添加(标识:02,名称:ALA-IAS)

3)、添加传感器(此处的应用,也可以不添加)
在用户中心操作界面左边的菜单列表下点击“传感器与控制器”,然后在界面右边点“新建”进行传感器添加,这里我添加了一个标识为“SC-CH”、名称为“SH状态”的传感器,用作显示开关的状态;
Lewei50_001.gif
传感器设置(标识:SC-SH,名称:SH状态)

4)、添加控制器
也是在用户中心操作界面左边的菜单列表下点击“传感器与控制器”,然后在界面右栏框标签栏选“控制器列表”,再在右边点“新建”添加新控制器,这里我添加了标识为“HS01”、名称为“IAS-开关-HS01”以及“HS02”、名称为“IAS-开关-HS02”的两个控制器,分别用作插座插位组1和插位组2的开关控制;
Lewei50_002.gif
控制器设置(HS01以及HS02)

好了,最简单的智能插座物联网控制器设置完成了,可以在该网站利用API在线测试工具先测试一下。

5)、API在线测试
在首页点击“开发者指南”进入相应界面后,在左栏选“API Ref”,可以看到右栏显示相应的API说明,拉至接近内容的尽头,会看到“API在线测试工具”的蓝色字眼,点击进入测试界面,按要求填好“UserKey”和“API地址”以及“Post数据”即可提交测试。
具体API说明和其它更多更复杂的应用设置可以在该网站的开发者指南上取得指导。

3、  编写LUA语言的ESP8266模块的控制程序和物联网API接口程序。
NodeMcu教程可参考《NodeMcu三小时入门》:http://bbs.nodemcu.com/t/nodemcu/104
在本处的应用,主要编制“初始程序”、“接口调用程序”和“乐联网API接口模块” 这几组程序,其中:

1)、“乐联网API接口模块”程序
包含LeweiHttpClient.lua和LeweiTcpClient.lua,是直接从https://github.com/lewei50 取得;

2)、“接口调用程序”HS_demo.lua
就是初始8266模块的输入输出控制脚,然后调用“乐联网API接口模块”操控,其源码如下(注意:里面的"xxxxxxxxxxxxxxxxxxxxxxxx"要换成实际的UserKey):
-----------------------------------------
local tt=false
gpio.mode(3,gpio.OUTPUT)      --设置8266模块的GPIO01脚用作HS01的控制
gpio.mode(4,gpio.OUTPUT)      --设置8266模块的GPIO02脚用作HS02的控制

require("LeweiTcpClient")
LeweiTcpClient.init("02","xxxxxxxxxxxxxxxxxxxxxxxx")     ---两个参数,分别是设备标识和UserKey
function test01(pl)
if pl=="1" then
   gpio.write(3,gpio.HIGH)
else
   gpio.write(3,gpio.LOW)
end
local vl=gpio.read(3)
print("test function!GPIO01: "..vl)
end
function test02(pl)
if pl=="1" then
   gpio.write(4,gpio.HIGH)
else
   gpio.write(4,gpio.LOW)
end
local vl=gpio.read(4)
print("test function!GPIO02: "..vl)
end
LeweiTcpClient.addUserSwitch(test01,"HS01",tostring(gpio.read(3)))
LeweiTcpClient.addUserSwitch(test02,"HS02",tostring(gpio.read(4)))

require("LeweiHttpClient")
LeweiHttpClient.init("02","xxxxxxxxxxxxxxxxxxxxxxxx")

tmr.alarm(0, 15000, 1, function()
local vB ="{"..tostring(gpio.read(3))..","..tostring(gpio.read(4)).."}"
print(">>>>>>>>Set Sensor to: "..vB)
--添加数据,等待上传
LeweiHttpClient.appendSensorValue("SC-SH",vB)
--实际发送数据
LeweiHttpClient.sendSensorValue("SC-SH",vB)
end)
-----------------------------------------

3)、系统初始化程序Init.lua
用在8266模块通电启动时的自动执行的系统初始化,这里主要是设置WIFI检测和连接,然后调用“接口调用程序”去执行主操控。Init.lua源码如下:
-----------------------------------------
wifi.setmode(wifi.STATION)
local theAP="YOUR-AP"               -- 填写你的无线路由的AP名称
local ThePW="YOUR-AP-PASSWORD"    -- 填写你的无线路由的AP密码

function listap(t)
for k,v in pairs(t) do
           theAP=k
           print(k.." :"..v)
           if k== theAP then
                    break
           else
                    thePW="*"
           end
end

if thePW~="*" then
           wifi.sta.config(theAP,thePW)
           print(wifi.sta.getip())
           dofile("HS_demo.lua")
else
           print("Can notfound My AP!")
end
end

wifi.sta.getap(listap)
-----------------------------------------

4、  载入LUA控制程序到ESP8266模块和进行程序调试
程序开发、载入和测试工具使用NodeMcuStudio,目前版本是2015_beta0.3,下载地址是http://bbs.nodemcu.com/uploads/default/69/72abaac2d0b65816.rar
这里需要注意的是,最好把lua程序载入模块后进行编译,编译后生成lc后缀的同名程序,然后把原来lua程序删掉,这样可以节约存储空间。

5、  联网测试
手机安装Lewei App,我的是安卓手机,到乐联网下载相应的APP软件,然后用注册的账户登录进去,就可开始操控。

LeWei_App.jpg
      此外,乐联网还提供微信方式进行操控,界面和APP类似,非常方便。方法是打开微信,在“添加朋友”中,选择“搜号码”来搜索lewei50或者在“查找微信公共帐号”来搜索“乐联网”。或者在网站首页右上方点击“微信”,进入相应说明,其中包括微信二维码,可直接扫描来添加。

(完)

IMG_20151017_143856.jpg
回复

使用道具 举报

发表于 2016-5-31 16:13:54 | 显示全部楼层
您好,你帖子上的链接确实打不开,有一些问题想咨询下您。如方便,沟通下。964920941。或者 我来加您。
回复 支持 0 反对 1

使用道具 举报

发表于 2015-10-21 09:51:00 | 显示全部楼层
应该是ESP8266吧,前面写成6288了。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-21 10:32:15 | 显示全部楼层
氦氪空间 发表于 2015-10-21 09:51
应该是ESP8266吧,前面写成6288了。。

改了,谢谢!
回复 支持 反对

使用道具 举报

发表于 2015-10-21 10:48:14 | 显示全部楼层
不错,很详细了。
回复 支持 反对

使用道具 举报

发表于 2015-11-19 13:00:08 | 显示全部楼层
非常不错,先收藏准备好材料再试试。

点评

VERY GOOD  发表于 2015-11-26 10:33
回复 支持 反对

使用道具 举报

发表于 2015-12-7 21:05:59 | 显示全部楼层
请问你怎么解决  继电器粘连问题的?
回复 支持 反对

使用道具 举报

发表于 2016-1-11 20:31:29 | 显示全部楼层
你好,楼主,我跟你用了一块同样的ESP-01板子,程序也照你的类似写法,结果运行时报
error loading module 'leweitcpclient' from file 'leweitcpclient.lua': not enough memory
请问你当时有这种错误吗?
回复 支持 反对

使用道具 举报

发表于 2016-1-16 21:46:50 | 显示全部楼层
楼上的,出现内存不足的解决办法是在 init.lua 里先把要执行的lua 程序 compile.然后在删除,就可以解决内存不足的情况,给你参考例子:

local luaFile = {"TEST.lua"}
for i, f in ipairs(luaFile) do
        if file.open(f) then
      file.close()
      print("Compile File:"..f)
      node.compile(f)
          print("Remove File:"..f)
      file.remove(f)
        end
end

dofile("TEST.lc");

最后我想问问楼主,你自己的程序是经过你自己测试过的么?

thePW="*"
           end
end

if thePW~="*" then

程序的这个地方提示错误,*有问题,我的NODEMCU 提示错误、



把错误都改好后无法更新开关状态。

你的这个地方 :
LeweiHttpClient.appendSensorValue("SC-SH",vB)
--实际发送数据
LeweiHttpClient.sendSensorValue("SC-SH",vB)
end)

是错误的,你这个是把IO的状态值传到传感器 SC-SH,而不是开关控制器:IAI-IAS;

你这样的程序能把开关的状态变绿,我个人表示不确定!!????

我测试了多遍 仍然无法正确连接上 乐为的服务器,开关状态一直是灰色的、还望指点、、
回复 支持 反对

使用道具 举报

发表于 2016-2-2 17:23:22 | 显示全部楼层
wony365 发表于 2016-1-16 21:46
楼上的,出现内存不足的解决办法是在 init.lua 里先把要执行的lua 程序 compile.然后在删除,就可以解决内存 ...

你弄好了吗?
回复 支持 反对

使用道具 举报

发表于 2016-2-17 17:30:31 | 显示全部楼层
很详细的帖子,谢谢分享,学习啦!先收藏,回学校了折腾下!
回复 支持 反对

使用道具 举报

发表于 2016-2-18 15:34:52 | 显示全部楼层
通电后GIPO才能接  有什么办法解决吗?
回复 支持 反对

使用道具 举报

发表于 2016-4-19 22:49:10 | 显示全部楼层
你好,我的毕业设计就是做一个智能插座,但是没学过这个语言,有很多不明白,还有你给的有些网址打不开,可否QQ或者微信指教?qq549040639,谢谢。
回复 支持 反对

使用道具 举报

发表于 2016-10-15 19:11:54 | 显示全部楼层
学习了,现在乐联改版了,不知道还能用吗?
回复 支持 反对

使用道具 举报

发表于 2016-11-15 15:50:17 | 显示全部楼层
太厉害了  只是链接都打不开
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-3-23 23:29 , Processed in 0.058107 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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