手头有一块ESP8266_01WIFI模块,是前段时间在网上买arduino套件时送的,套件中还有一个单路继电器,反正这些东西折腾完了之后也没什么用,就将网上的资料汇总了一下,作了一个远程控制的智能排插,功能很是简单,就是经过手机远程控制排插通电或断电。
先看下完成后的使用演示视频
http://v.youku.com/v_show/id_XNDAxNTg5NzYwNA==.html?spm=a2ha1.12325017.uerCenter.5!3~5~5!2~5~DL~DD~A&firsttime=1html
OK,进入正题,先说下须要的材料:
一、ESP8266_01WIFI模块一个
二、单路继电器一个
三、1K电阻和和LED发光二极管各一枚。(用于指示通电或断电)
四、Arduino UNO R3单片机一块。
五、220v转5v真流电源模块一个(旧手机充电器就能够)
六、排插一个。
七、面包板一块,导线若干。
八、无线路由器一个(须要知道密码),还有就是一台能上网的电脑,呵呵。
制做过程分为三步,第一步在第三方平台申请远程控制的账号、密码及APIKEY,第二步要把程序写到esp8266_01中,并进行测试;第三步进行组装并实现控制。git
在开始以前,咱们有必须先简单了解一下ESP8266的工做原理,或者说ESP8266在在手机控制电路通断过程当中发挥什么做用,咱们来看下面的这张图:
咱们在手机上发出通电或断电指令后,相关指令会上传到第三方平台(通常是一个网站),第三方平台按指令修改存储的数据(通常是json格式的数据,如手机发发通电信号时,将变量a的值从0改成1,断电时从1改为0),ESP8266经过无线路由不停地查询网站上指定这个数据的状态,并按指定的格式将数据状态返回EPS8266,ESP8266将接收到的数据进行格式解析后,通知继电器执行通电或断电的操做。
固然,网上还有许多ESP8266其它的工做方式,如将ESP8266做为服务器,经过指令改变ESP8266的数据状态来控制设备。但须要在路由器上设置端口映射,还须要外网透传,对我来讲难度有点大,呵呵。
好了,闲话说完,进入正题。我用的第三方平台是酱菜创客(网络还有许多相似的物联网平台,但我感受这个最简单,适合初学)。首先须要在酱菜创客建立一个账号。json
登陆www.jcckiot.com,注册一个新用户。
按要求填写用户名,邮箱,密码,提交后注册邮箱会收到一个激活邮件,激活后再次登陆,进入用户中心,会有一个重要的信息须要保存:就是下图中的apikey,这个须要记下来,后面要用到。
返回主页后,就能够添加设备了。
随便添加一个,如灯光照明,而后点击添加新电灯开关,输入设备名称后点击添加设备,就能在设备列表中看到咱们新添加的LED1了(固然也能够用其它名字,如台灯,电动车充电插座等等)。api
点击LED1下面的文字连接(不是图标,是文字连接),就能看到LED1的sid和nid(咱们的是3和0),记下来,这个是设备的编号,咱们回头要用到。
酱菜创客还提供了一个APP,在首页最下面,下载下来安装到手机上。
APP运行的界面和网页同样,第一次运行须要点击右上角的头像登陆,登陆后回到主界面,打开灯光照明,就能看到咱们在前面添加过的LED1了。固然如今还控制不了,还须要咱们把程序写到ESP8266模块上并链接有关线路。安全
网上对ESP8266程序写入的教程大体有三种,1是下载别人作好的bin文件包,使用专用软件烧录到ESP8266,我查了下,资料比较多,貌似难度很大,俺就知难而退了;2是使用USB转TTL工具进行写入,俺手头没有这种高级货;3是用Arduino UNO R3,利用Arduino IDE进行写入,咱们就用这种方法。
打开Arduino IDE,默认的Arduino IDE是没有ESP8266库的,须要咱们本身添加上。
点击Arduino IDE的文件-首选项,在附加开发板管理器网址中填入:http://arduino.esp8266.com/stable/package_esp8266com_index.json,而后肯定。
而后点击工具-开发板XXXXXXXX-开发板管理器,在搜索框中输入esp8266,而后回车,稍等一下子,就能在搜索结果中看到esp866 for esp8266 community的项目,点击安装。
安装须要一些时间,完成后重启Arduino IDE,再看开发板管理器,就能看到esp866 for esp8266 community的状态是安装过的(installed)。
这时候再打开工具-开发板XXXX,在开发板管理器下面,就能找到咱们的ESP8266 Module了,点击选中它。
这时咱们打开工具,开发板XXXX就变成了Generic ESP8266 Module了,说明当前的开发板是ESP8266了。服务器
在Generic ESP8266 Module下面还有许多选项,是配置参数的,由于ESP8266有许多配本,烧录时的参数设置也不同,我用的是ESP8266_01,我用的参数是:Flash Mode:DIO/Upload Speed:115200/Flash Size:4M(1MSPIFFS),其它参数没变。
OK,开发环境配置好了,咱们能够链接上ESP8266进行上传和烧录了。
先看ESP8266_01接口说明:网络
将ESP8266_01接到Arduino UNO R3上。
须要说明的几点:
I、VVC和CH_PD接3.3V,不能接5V。
II、RX接Arduino的RX,TX接Arduino的TX,有些资料说要反过来接,经证实不行。
III、GND接Arduino的GND,GPIO0在烧录时接GND,但在运行时须要断开。
IV、有的资料说烧录时须要将Arduino的ATmega芯片(也就是最大最长的那块)给拆下,俺试了下,不拆下也行。
V、最后一点,也是让我折腾了好半天的一点:必定要用一个1K电阻将GPIO_2和3.3V链接上,这点是从其它资料中找到的,不接的话,烧录了N次都失败。
接线面包板图以下:
链接好后,就能够写入程序烧录了。ide
将如下代码粘贴到Arduino IDE中,工具
/* * 经过酱菜创客控制继电器 */ #include <ESP8266WiFi.h> WiFiClient client; #define relay1 2 //运行时继电器链接在8266的GPIO2上 const char *ssid = "TP-LINK_123";//这里是个人wifi,你使用时修改成你要链接无线路由的ssid const char *password = "a1234567";//你的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的工做模式为输出 Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED)//若是链接不能wifi,在0.5秒后再试 { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected");//在串口监示器中显示wifi链接成功 Serial.println("IP address: "); Serial.println(WiFi.localIP()); //显示服务器的地址 while (!client.connect(host, httpPort))//若是链接不上服务器,就提示链接失败,0.5秒后再试 { Serial.println("connection failed"); //return; delay(500); } Serial.print("connecting to "); Serial.println(host); client.write("mode=bind&apikey=XXXXXX&data={ck001000bind}\r\n");//绑定apikey,把XXXXXX修改为你在酱菜创客上的apikey delay(10); } //int value = 0; void loop() { while(client.available()) { String line = client.readStringUntil('\r'); Serial.println(line); //valueread=line[47]; //Serial.println(valueread); if(line[5]=='3' & line[8]=='0' & line[9]=='1')//3是你要控制的设备的 sid,0是nid,1表明是通电 //意思是若是指定的设备的状态是1,就让realy1设置为高电平,即让继电器通电 { digitalWrite(relay1,HIGH); Serial.println("Relay on"); } if(line[5]=='3' & line[8]=='0' & line[9]=='0') //3是你要控制的设备的 sid,0是nid,0表明是断电 //意思是若是指定的设备的状态是0,就让realy1设置为低电平,即让继电器断电 { digitalWrite(relay1,LOW); Serial.println("Relay off"); } } String line =""; m++; if(m%40==0) { client.write("mode=up&apikey=XXXXXX&data={ck003000life}\r\n");/把XXXXXX修改为你本身的apikey m=0; } delay(500); }
程序很简单,须要说明的地方我已经放到注释里了。我相信不须要再进行解释了。
把Arduino接上电脑的USB口,这时ESP8266红灯会亮。
点击工具栏最左的验证按钮开始编译,如无问题会提示编译完成。
而后点击工具栏的上传按钮,开始编译并上传,上传完成后会自动开始烧录,烧录时Arduino IDE的状态栏会有红色的点及烧录进度的百分率。达到100%后,烧录就完成了。
这时拔掉GPIO_0(面包板图中的橙色的线),打开Arduino的串口监视器,就能够看到EPS8266的运行状况了。如出现“WiFi connected”和路由器给ESP8266的IP地址,就说明链接成功了,不然会出现“connection failed”,这时就须要再检查下你代码中路由器设置是否正确。
到这里,对ESP8266的烧录已经完成了,若是你火烧眉毛的想试一下,能够先接一个发光二极管,再加一个3.3V的电源(我用的是一节18650电池,检测电压是3.9V,也能正常运行)按以下方式接线:
在手机打开酱菜创客的APP,进入灯光照明,找开咱们的LED1点击一下,让LED1处于ON的状态,稍等一会,面包板上的发光二极管是否是就亮了?而后再点,让LED1处于OFF状态,稍等发光二极管就灭了。oop
说明一下:个人手机要用来拍照,只能在电脑上用网站方式操做了,效果和用手机操做是同样同样的,呵呵。
三、线路链接和组装
剩下的事情就简单了,咱们要将esp8266_01和继电器装到排插里,由于继电器和ESP8266都要用DC电源,咱们还要一个220v交流转5v直流的变压器,就用一个拆掉外壳的手机充电头,上面的usb接口还能够用在插座上给手机充电,呵呵(其实ESP8266须要的是3.3v的电源,我没找到,就凑合一下吧!)
把上面的东东接下图接线。
(不会作电路图,只好用实物图代替了,你们将就看吧......)
若是你们能找到3.3v的电源,最好也用上,那么实物图应该是下面这样的:
个人排插比较小,占用了两个插孔位置后,仍是很是紧促,安装的实际以下图(请原谅我蹩脚的焊工):
最后为了安全起见,我把前面两个被占用的孔用热熔胶给封上了,免得哪天喝大了直接把手机插在火线上,那就抖大发了……
个人电动自行车天天晚上都要在地下室充电,充的时间过短怕充不满,充的时间太长又怕过充不安全。有了这个东东,我就不用天天晚上大半夜从六楼跑下来给电动车断电了,从温暖的被窝里拿出手机,轻轻一按,一切搞定,嘻嘻……------------------------------全剧终-----------------------------