利用ESP8266

您所在的位置:网站首页 苹果手机控制esp8266 利用ESP8266

利用ESP8266

2023-10-18 10:23| 来源: 网络整理| 查看: 265

手头有一块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=1

OK,进入正题,先说下需要的材料: 1、ESP8266_01WIFI模块一个 2、单路继电器一个 3、1K电阻和和LED发光二极管各一枚。(用于指示通电或断电) 4、Arduino UNO R3单片机一块。 5、220v转5v真流电源模块一个(旧手机充电器就可以) 6、排插一个。 7、面包板一块,导线若干。 8、无线路由器一个(需要知道密码),还有就是一台能上网的电脑,呵呵。 制作过程分为三步,第一步在第三方平台申请远程控制的帐号、密码及APIKEY,第二步要把程序写到esp8266_01中,并进行测试;第三步进行组装并实现控制。

在开始之前,我们有必须先简单了解一下ESP8266的工作原理,或者说ESP8266在在手机控制电路通断过程中发挥什么作用,我们来看下面的这张图: 我们在手机上发出通电或断电指令后,相关指令会上传到第三方平台(一般是一个网站),第三方平台按指令修改存储的数据(一般是json格式的数据,如手机发发通电信号时,将变量a的值从0改为1,断电时从1改成0),ESP8266通过无线路由不停地查询网站上指定这个数据的状态,并按指定的格式将数据状态返回EPS8266,ESP8266将接收到的数据进行格式解析后,通知继电器执行通电或断电的操作。 当然,网上还有许多ESP8266其它的工作方式,如将ESP8266作为服务器,通过指令改变ESP8266的数据状态来控制设备。但需要在路由器上设置端口映射,还需要外网透传,对我来说难度有点大,呵呵。 好了,闲话说完,进入正题。我用的第三方平台是酱菜创客(网络还有许多类似的物联网平台,但我感觉这个最简单,适合初学)。首先需要在酱菜创客创建一个帐号。

1、在酱菜创客上注册、添加设备,安装APP。

登录www.jcckiot.com,注册一个新用户。 按要求填写用户名,邮箱,密码,提交后注册邮箱会收到一个激活邮件,激活后再次登录,进入用户中心,会有一个重要的信息需要保存:就是下图中的apikey,这个需要记下来,后面要用到。 返回主页后,就可以添加设备了。 随便添加一个,如灯光照明,然后点击添加新电灯开关,输入设备名称后点击添加设备,就能在设备列表中看到我们新添加的LED1了(当然也可以用其它名字,如台灯,电动车充电插座等等)。

点击LED1下面的文字链接(不是图标,是文字链接),就能看到LED1的sid和nid(我们的是3和0),记下来,这个是设备的编号,我们回头要用到。 酱菜创客还提供了一个APP,在首页最下面,下载下来安装到手机上。 APP运行的界面和网页一样,第一次运行需要点击右上角的头像登录,登录后回到主界面,打开灯光照明,就能看到我们在前面添加过的LED1了。当然现在还控制不了,还需要我们把程序写到ESP8266模块上并连接有关线路。

2 、把程序写到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次都失败。 接线面包板图如下: 连接好后,就可以写入程序烧录了。

将以下代码粘贴到Arduino IDE中,

/* * 通过酱菜创客控制继电器 */ #include 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状态,稍等发光二极管就灭了。

说明一下:我的手机要用来拍照,只能在电脑上用网站方式操作了,效果和用手机操作是一样一样的,呵呵。 3、线路连接和组装 剩下的事情就简单了,我们要将esp8266_01和继电器装到排插里,因为继电器和ESP8266都要用DC电源,我们还要一个220v交流转5v直流的变压器,就用一个拆掉外壳的手机充电头,上面的usb接口还可以用在插座上给手机充电,呵呵(其实ESP8266需要的是3.3v的电源,我没找到,就凑合一下吧!) 把上面的东东接下图接线。

(不会做电路图,只好用实物图代替了,大家将就看吧......) 如果大家能找到3.3v的电源,最好也用上,那么实物图应该是下面这样的:

我的排插比较小,占用了两个插孔位置后,还是非常紧促,安装的实际如下图(请原谅我蹩脚的焊工):

最后为了安全起见,我把前面两个被占用的孔用热熔胶给封上了,省得哪天喝大了直接把手机插在火线上,那就抖大发了……

我的电动自行车每天晚上都要在地下室充电,充的时间太短怕充不满,充的时间太长又怕过充不安全。有了这个东东,我就不用每天晚上大半夜从六楼跑下来给电动车断电了,从温暖的被窝里拿出手机,轻轻一按,一切搞定,嘻嘻…… ------------------------------全剧终-----------------------------



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3