前言:
现在小学信息技术的教材中已经出现了物联网的内容,比如泰山版小学信息技术教材第六册第二单元第一课就是用手机控制智能插座。就起了自己动手制作一个的心思,通过到网上浏览制作智能插座的文章后,有了基本思路,通过网购配件、编程上传、动手焊接组装等环节,制作了一个很粗糙但够实用开放的智能插座,本文主要就是从申请帐号、编写程序,上传到控制板,动手焊接组装三个方面介绍一下整个过程。
一、所需配件。注:
二、申请帐号,编写arduino程序。
要远程控制esp01模块驱动继电器工作,有很多物联网平台都能做到。如机智云、ONENET、酱菜物联等等。考虑到智能插座所需功能比较单一,为方便操作,所以作者选用了酱菜物联做为智能插座的平台。
1、申请帐号:打开网址http://www.jcckiot.com/,注册一个帐号,记下自己的apikey。(用的时候到用户中心里找也可以)
创建应用:在首页选择插座,输入插座的名字,记下sid和nid。(待会程序中要用)
2、编写arduino程序,并上传到控制器。
(1)安装所需库文件。
打开arduino ide程序,依次点击文件-首选项,找到下图中标记的文件夹位置,如本机的地址是C:\Users\Administrator\AppData\Local\Arduino15。这时需要下载
arduino的esp8266的支持库文件,如果直接联网下载的话,速度极慢(估计10个小时以上)。但网络上有达人们共享了下载好的文件,我转存到我的百度网盘里,有需要的可以到链接:https://pan.baidu.com/s/1X6fMyYREjRTpt-88sZbu7A 提取码:mhwn 中下载。下载后解压到刚才标记的位置,覆盖原有文件。
这时在arduion的IDE中,打开工具-开发板XXXX,在开发板管理器下面,就能找到我们的ESP8266 Module了,点击选中它。这时我们打开工具,开发板XXXX就变成了Generic ESP8266 Module了,说明当前的开发板是ESP8266了。根据下图进行适当的设置。
(2)连接esp8266模块和USB-TTl.
连接方法:(1)ESP8266模块的5(VCC)、7(CH—PD)两根针同TTL的3v3相连。(2)模块的1(GND)、3(GPIO0)号针同TTL的GND相连。(3)模块的4号针(RXD)同TTL的TXD相连,8号针(TXD)同TTL的RXD相连。 注意:因为有两根针接一根针的情况,可以考虑加一块面包板,或直接将模块的5、7号针短接,1、3号针短接后再连TTL,建议使用面包板。
(3)打开arduinoIDE,输入下列程序:
/* * 通过酱菜创客控ESP32操作继电器。 */ #includeWiFiClient client; #define relay1 0 //运行时继电器连接在8266的GPIO0上,这里要注意,网上大部分文章,这里都设置的是2号。 const char *ssid = "hx";//这里是我手机开的热点,你使用时修改为你要连接无线路由的ssid const char *password = "12345678";//你的wifi密码 const char *host = "www.jcckiot.com";//酱菜创客服务器IP,不能改 const int httpPort =8266;//端口号,不要改 String line =""; int m=0; void setup() { Serial.begin(115200); delay(10); pinMode(relay1,OUTPUT); //设置relay1的工作模式为输出 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED)//如果连接不能wifi,在0.5秒后再试 { delay(500); } while (!client.connect(host, httpPort))//如果连接不上服务器,就提示连接失败,0.5秒后再试 { delay(500); } client.write("mode=bind&apikey=XXXXXX&data={ck001000bind}\r\n");//绑定apikey,把XXXXXX修改成你在酱菜创客上的apikey delay(10); } void loop() { while(client.available()) { String line = client.readStringUntil('\r'); if(line[5]=='3' & line[8]=='0' & line[9]=='1')//3是你要控制的设备的 sid,0是nid,1代表是通电 //意思是如果指定的设备的状态是1,就让realy1设置为低电平,即让继电器通电 { digitalWrite(relay1,LOW); } if(line[5]=='3' & line[8]=='0' & line[9]=='0') //3是你要控制的设备的 sid,0是nid,0代表是断电,意思是如果指定的设备的状态是0,就让realy1设置为高电平,即让继电器断电 { digitalWrite(relay1,HIGH); } } String line =""; m++; if(m%40==0) { client.write("mode=up&apikey=XXXXXX&data={ck003000life}\r\n");//把XXXXXX修改成你自己的apikey m=0; } delay(500); }
代码中要注意两点:一是用哪个口来控制继电器,因为网上大部分程序中都写的是用GPIO2来控制,我也没考虑,也是这么写的,但最后不成功,无法控制继电器,最后仔细看说明书,才发现人家写得很清楚。
这种类型的搭配,是需要使用GPIO0来进行控制的。另一个,网上教程中大都写高电平触发继电器,但通过看说明书发现,这个继电器是需要用GPIO0口用低电平来触发的。(汗一个,想当然是不行的,不要怕费事,一定要仔细看说明书)
(4)上传程序到ESP01模块。
将USB-TTL和ESP01模块连接完成后,将USB-TTL插到计算机上,这时,会自动识别出一个串口,如COM3、COM7等,记住这个串口号,在工具中选择相应的端口号。
然后点击工具栏的上传按钮,开始编译并上传,上传完成后会自动开始烧录,大约1分钟后,就会提示上传成功了。
三、组装硬件
1、将esp01模块,插到继电器上。
2、改造插座。
将插座前边的开关、指示类全部去除,整平,可以考虑用一张旧会员卡用固态胶粘到插座前边,做底盘。
3、焊接、连线。
不太会画线路图,直接上实物图吧。
连接步骤:
(1)开关稳压模块:将220V的市电焊接到模块的IN端上,同时在输出端上各焊一段电线(3CM左右),接到继电器的VCC、GND端。。
(2)继电器:将NO端接到插座的火线上。把COM端接到220V市电的火线上。(直接焊到开关稳压模块的输入端就可以)。
(3)插座,把零线直接接到220V市电的零线上。(直接焊到开关稳压模块的输入端就可以)。
四、几点需注意的问题:
1、这种方案实际上是将ESP01当做MCU来用,不是SOC方案。
2、方案中的继电器是与ESP01配套使用的,好处是通过继电器给模块供电,线路比较简单,缺点是增加了造价。还有一个问题,因为是将ESP01模块直接插到了继电器上,所以浪费了模块的一个GPIO口。
3、关于直流5V电源的事,这个不一定买,可以拆一个旧充电器。
4、本文中的例程仅能用于酱菜物联,其它的物联平台,需要刷写固件。
5、USB-TTL转接口不是必须的,如果手里有arduion UNO或NANO的板子,也可以用。具体连接方法可以百度。
6、利用ESP01制作智能插座的方法很多,本文也仅是一种个人观点,不一定是最合适的。
7、在制作过程中,参考了网上多位大神的作品,在此表示感谢。