雷竞技注册
项目

如何通过Wi-Fi构建具有可调工作时间的控制电路

2016年6月15日经过Yahya Tawil.

了解如何使用移动应用程序构建可以打开和关闭DC负载的系统。您还将学习如何通过立即操作或通过提前设置的定时器执行此任务。

在本文中,您将学习如何构建一个可以使用移动应用程序打开和关闭直流负载的系统。您还将学习如何通过立即行动或通过预先设置的定时器来切换负载和关闭执行这个任务。

项目概况

您可以在需要为特定时间设置DC负载的环境中实现此系统。这将允许您使用我们的Android应用程序而无需硬件接口,键盘和LCD屏幕。

整个项目的概述
整个项目概述。

零件清单

部分 QTY.
Arduino uno或任何兼容的董事会 1
ESP8266无线模块 1
USB TTL转换器电缆(可选) 1
继电器SPDT 12V. 2
BC337 NPN BJT. 2
BS170 MOSFET N通道 1
1K欧姆电阻 2
10K欧姆电阻 2
1 n4007二极管 2
螺丝终端 2
LM317可调电压调节器 1
0.1UF电容器 2
标题,女性和男性 -
空白PCB板 2

设置您的ESP8266突破板

ESP8266是一种带有嵌入式微控制器和全TCP / IP协议栈的低成本SOC芯片,这意味着它可以直接访问您的Wi-Fi网络。

由于此芯片有自己的MCU,因此可以将您的应用程序代码放在其中,或者您可以像Wi-Fi收发器一样使用该模块 - 就像我们在这个项目中要做的那样。使用与收发器和控制器相同的模块更有效,但仅用于学习目的,我们将使用Arduino与模块通信。

ESP8266芯片采用不同的模块。我们将使用ESP-01模块。当然,你可以使用任何其他模块

首先你必须知道模块工作在3.3V, Arduino的逻辑高电压应该是一样的,以免对我们的模块造成损坏。这需要Arduino(工作在5V)和模块之间的电压水平转换器。好消息是只有Arduino的传输管脚需要这个转换器,因为接收管脚通常会识别来自ESP8266的3.3V逻辑信号

这样一个转换的最简单方法之一是使用SparkFun的设计:您可以订购现成的模块

5V至3.3V电平转换器
5V到3.3V电平转换器

下图显示了我们的ESP8266引脚:

图像来源:ESP8266 WiFi模块快速入门指南

别针 函数
UTXD UART发送数据
URXD. UART接收数据:输入应为3.3V兼容
CH_PD 掉电:低输入为芯片向下电,高输入电量;绑定正常操作,或模块将无法运行。
GPIO0. 在启动:必须是高进入flash或正常启动;Low进入特殊的启动模式。
GPIO2. 在启动时:低导致引导加载程序进入Flash上​​传模式;高导致正常启动。
RST. 重启;活跃低
GND. 地面
vcc. POWER / 3.3V.

我使用了LM317,这是一个可调输出电压线性稳压器,输出电流可达1.5A,为模块提供合适的3.3V电源。

笔记:不要使用来自Arduino的3.3V引脚,而Arduino中使用的3.3V电压稳压器无法为模块提供所请求的电流,特别是在传输时进行峰值功耗。

ESP8266突破板图
ESP8266断接板图

我使用BS170(而不是BSS138)为逻辑电平转换器;两者都很好。

ESP8266突破板
ESP8266突破董事会

现在,您可以使用USB-TTL转换器电缆将模块连接并尝试该模块。有关详细信息,我建议读取一些初学者指南ESP8266 WiFi模块快速入门指南

USB TTL转换器电缆
USB-TTL转换器电缆

设置中继突破板

继电器突破板图

继电器突破板图

我使用了BC337 NPN BJT来控制带有1K欧姆基底电阻的继电器的线圈。我还使用了1N4007二极管作为线圈的反向电压保护。

我选择与地面的常闭(NC)连接。虽然关闭是我的正常状态,但如果您愿意,您可以反转连接。

继电器突破板(顶视图)
继电器突破板(顶视图)

继电器断接板(下视图)
继电器突破板(底部视图)

Arduino Code.

现在我们面临问题。ESP8266使用UART作为用于命令的接口,arduino uno(使用Atmega328)只有一个UART端口。一个端口已经连接到我们的USB-TTL桥,也有引脚0和引脚1。

作为解决方案,您可以使用Arduino上另一个数字引脚上的UART端口使用仿真器AltSoftSerial软件系列图书馆。这将允许您仍然有硬件UART端口进行控制台上的调试和打印邮件,而软件端口将用于与模块通信。

arduino董事会

很多人(包括我)报告了软件序列失败,因为我们将与ESP8266,115200波特一起使用的高波特率序列。我可以说,如果您使用软件串行和几乎100%从Arduino到模块,将从模块中获得50%的收到数据。在RX和TX线上嗅探后,我得到了这些结果。

作为解决方案,我在代码中添加了一些“定义”语句,以使您在软件或硬件端口之间进行选择更容易。请注意,您无法使用相同的端口进行调试和与模块通信,因此您需要在它们之间进行选择。

//取消注释序列。***如果要使用HW串行端口(引脚0,1)// uncomment esp8266。***如果要使用SW串行端口(PIN 2,3)#define esp8266_available()串行.available()//esp8266.available()#define esp8266_find(arp)serial.find(arg)//esp8266.find (arg)#define esp8266_read()serial.read()//esp8266.read()#defineESP8266_WRITE(arg1,arg2)序列版(arg1,arg2)//esp8266.write(arg1 ,arg2)#define esp8266_print(arg)serial.print(arg)//esp8266.print(arp)

在代码中,您将找到设置模块以连接到路由器的部分。

sendCommand(“在+ RST \ r \ n”,2000年,调试);//重置模块sendCommand("AT+CWMODE=1\r\n", 1000, DEBUG);//配置为接入点sendCommand("AT+CWJAP=\"tur\",\"341983#tur "\r\n", 3000, DEBUG);//****根据您的网络更改SSID和密码******// delay(10000);sendCommand(“在+ CIFSR \ r \ n”,1000年,调试);//获取ip地址sendCommand("AT+CIPMUX=1\r\n", 1000, DEBUG);//配置多个连接sendCommand("AT+CIPSERVER=1,1337\r\n", 1000, DEBUG);//打开1337端口的服务器

Sketch循环等待通过Wi-Fi连接发送的命令。当前支持的命令有:

  • “符合”以应对产出,低或高的扭曲。
  • ' on= '打开相应的引脚。
  • 'Of ='关闭相应的销。
  • “TM = N / FS”设置为相应引脚的(n)/ OFF(f)计时器。

所有以前的命令都具有确认响应。

笔记

  • 该草图的某些部分基于一个Allaboutee.教程。
  • 如果使用旧SDK的模块,可能会像我一样遇到bug。在这种情况下,唯一的解决方案是将固件升级到最新版本。检查这个AAC文章出于更新固件的帮助。我从版本1.3到1.5.4升级我的固件。

arduino_with_esp8266_controller.zip.

Android应用程序

要控制所有上述硬件组件,我们将使用简单的Android应用程序。此应用程序将允许我们直接或在特定时间段内打开或关闭输出。

Arduino_with_esp8266_controller_app.zip.zip.

笔记此应用程序需要Android 4.0 (IceCreamSandwich)和以上。

  • 首先,您必须知道模块的IP地址。如果使用软件串行端口,IP将在控制台上打印IP,如果使用硬件端口,则必须使用串行电缆在RX,TX线路上嗅探并查看IP地址。当您将其放入草图时,您还需要知道端口号。之后,按“连接”以获取所有三个输入的状态。您需要确保您的Wi-Fi打开,您已连接到本地网络。
  • 现在按下您想要打开/关闭的任何开关。无论何时,您都可以单击“刷新”以刷新所有输出的状态。
  • 在“定时器”选项卡中,您可以在特定时间段(0到24小时之间)后,设置这三个输出中的任何一个。
  • 在任何流程之后,您将收到一条确认消息,告诉您流程是否已成功完成,也会出现错误。

感谢我的朋友,Jihad al-Bathish谁开发了这个项目的Android应用程序。

自己试试这个项目吧!得到bom。

7点评论
  • 电脑工程师 2016年7月1日

    好的项目

    喜欢。 回复
  • sfiduesi sfiduesi. 2016年11月03日

    如果我使用raspberry pi而不是arduino,它会工作吗?

    喜欢。 回复
    • Yahya Tawil. 2016年12月14日
      只有龙Rasoberry pi你可以:)。http://raspberrypi.stackexchange.com/questions/40285/use-arduino-code-on-raspberry-pi.
      喜欢。 回复