基于ESp8266的智能插座

13 篇文章 7 订阅
4 篇文章 1 订阅
                                            基于ESp8266的智能插座

基于ESP8266+STM32F1的智慧生活套件

一、项目背景

   家里的电器用着真不方便。晚上休息的时候,总是要下床去关灯,尤其在冬天,好不容易焐热了被窝,根本没有下床的欲望,但不关又不行。客厅里的饮水机不光在白天开着,晚上也一直开着,即耗电又耗水。有时候晚上想去关掉它,但总是懒得走而无视它开着的存在。有时候下班回家发现家里的湿度比较高,此时开除湿机好像有点晚了。

二、项目分析

    我们不想下床去关灯,可以把家里的灯通过WIFI连接网络,通过手机来控制驱动继电器开关,客厅里的饮水机我们也可以连接网络,通过手机APP可以查看饮水机的开关状态,然后动动小手关闭它。可以在家里安装一个温湿度传感器,用来检测家里的湿度环境,通过网络上传到我们的手机,在下班的路上我们就可以看到家里的湿度情况了,然后判断需不需要打开除湿机,回到家后我们就能享受良好的环境了。

三、产品框架

3.1 控制器(哪种控制芯片,控制运行状态)

3.2 联网模块(能连接到互联网)

3.3 控制模块(控制家电的开关)

3.4 温湿度模块(能采集家里的温湿度)

3.5 指示模块(能显示模块的运行状态)

3.6 交互模块(用户能够和模块进行通信)

四、设计思路

4.1 硬件方面:

4.1.1 STM32单片机通过AT指令和esp8266模块通信,连接到阿里云生活物联网平台。

4.1.2 DHT11采集室内温度传输到生活物联网平台。

4.1.3 一路继电器控制家里的一个灯泡,用手机APP实现灯泡的开关。

4.1.4 一路继电器准备接到一个插座上,实现这个插座的开关,然后把家里的饮水机接入到这个插座上,通过手机APP控制。

4.1.5 OLED实时显示室内温湿度和开关的状态

4.1.6 4个按键:

1. 控制esp8266智能配网

2. 控制三元组的烧写

3. 控制灯的开关

4. 控制插座的开关

4.1.7 3个LED: B1 B10 B11

1. 智能配网: B10和B11同时0.2s闪烁。
2. 烧写三元组:B1和B10同时0.2s闪烁。
3. 设备没有联网状态:B1每隔0.5s闪烁
4. 设备连上网络状态:B1常量
5. 灯亮: B10亮 灯灭: B10灭
6. 插座开: B11亮 插座关: B11灭

4.1.8 W25Q64存储三元组的信息。

4.2 软件方面:

    利用keil5开发。通过mqtt协议和阿里云生活物联网平台通信,通过在物联网平台创建设备,并和实际的设备绑定,可通过手机APP绑定设备,继而控制设备。另创建了web界面,可以在网页查看设备的运行状态和上传的信息。

五、硬件规划

STM32F103C8T6:

    作为主控芯片,主频高,有很快的速度,实时性更好,有更大的RAM和ROM,片上外设也比较丰富,有多个串口且价格低廉。

ESP8266-01S:

    实现联网功能,登入阿里云平台。是比较常用的WIFI模块,线上资源丰富,便于开发,体积小,功能强大,通过简单的AT指令就可以连接互联网,通过一个串口可以很好的和STM32进行通信。

DHT11

    采集温湿度模块,通过编程可采集室内温湿度。超快响应、抗干扰能力强、性价比高,体积小功耗低,操作简单。

0.96寸OLED:

    显示温湿度和灯泡、插座的状态,观感更强。体积小,显示效果好,显示内容多,IIC通信,通信接口少,通信简单。

有源蜂鸣器:

    可作为配置模块信息的提示,有源蜂鸣器比无源蜂鸣器编程更简单。

两路继电器:

    连接家用电器的接口,通过小电压设备控制大电压设备。选择5V的继电器,电压使用范围合适。

W25Q64:

    flash存储芯片,可存储设备三元组一些必要的数据,掉电不丢失。

三个可编程LED和一个电源指示灯:

    3个可编程LED可以作为调试程序的指示,也可作为esp8266的联网模式和烧写三元组的指示灯。

4个独立按键:

    独立按键可用于实现智能配网的按键,烧写三元组的按键,控制继电器开关的按键,也可用于调试程序使用。

LDO

    LDO使用ASM1117-3.3V的芯片,可在低压差稳定输出主控所需的3.3V的电压,即便宜又好用。

自带复位按键:

    单片机复位按键,在程序编写过程中使用非常方便。

串口下载+ST-LINK下载:

    提供两种下载模式,可自由选择,串口下载电路还可以用来传输三元组信息,ST-LINK下载更为方便。

USB接口:

    USB接口采用micro-usb,采用安卓数据线接口,是使用最广的接口之一,不用购买额外的数据线。

ULN2003:

    驱动继电器,一个芯片可以驱动好几路继电器,接线简单,而且非常的便宜。

六、PCB设计

设计的PCB:

image.png

网络部分 这款esp8266模块是由乐鑫生产的,便宜好用,引出两个IO引脚,可直接二次开发。我们采用的是用出厂固件的AT指令通过单片机进行通信,实现联网功能,在PCB设计过程中,我们把模块的底部挖空了,确保信号的稳定。

image.png

电源部分我们增加了5V转3.3V电路,可通过5V供电,可直接接在电脑的USB或者是5V的电源适配器上,简单方便。在电源方面加了一个自恢复保险丝,可保护电源电路不被烧毁。

image.png

继电器驱动部分我们采用的是ULN2003芯片驱动,这款芯片是高耐压、大电流复合的晶体管阵列,在5V的工作电压下能与TTL和CMOS电路直接相连,而且一个ULN2003可直接驱动7路继电器,大大节省了其它元件的消耗,并且在PCB中所占体积也比较小。

image.png

USB接口我们在micro-usb方便做了处理,在边框的部分进行了修改,使micro-usb直接接触边框,确保在使用的时候数据线可以插到micro-usb口上。

image.png

覆铜在继电器方面,我们没有对其进行覆铜,考虑到是强电的部分,十分危险,不进行覆铜操作,避免不必要的危险。晶振也没有进行覆铜操作,减少干扰。

image.png

OLEDOLED屏幕放在了芯片的上面,正好盖住主控电路,这使板子看起来更美观。

image.png

布局每个器件的摆放都是按照对应芯片引脚的位置摆放,避免了打孔过线。

image.png

丝印每个器件都有对应的丝印,方便后续焊接和调试。

image.png

七、绘制PCB需要注意的问题

7.1 WIFI天线底下需要净空区,开槽最好。

7.2 强电部分不覆铜,强电与强电、强电与弱电之间注意安全距离(尽量3mm,低于2mm的考虑挖槽)。

7.3 接线端子、micro-usb放在板子边缘,方便插线,太靠里,容易插不进去。

八、焊接

拿到的板子

image.png

焊接后的板子

image.png

接好模块的板子

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vf1Ye8ng-1599055253782)(//image.lceda.cn/pullimage/jZFYoIyEUqpRjBrFYAxpIsuMKxgVYB6XspBIAMtz.png)]

运行后的板子

image.png

焊接过程遇到的问题:

      我一共焊了两块板子,首先在第一块板子焊接的过程中,什么都焊好了,也测试好了,程序也烧录进去了,一切都是那么的完美,但是在一次上电插线的过程中把micro-usb拔掉了。原因是在焊接的过程中没有固定,后面的孔的锡没有和前面的孔连接。我再次焊上去,却怎么也不通电,板子没有电,就很懵,忙活了好久之后,又把micro-usb拆掉才发现问题,原来我在这个口的电源部分打了一个孔,现在这个孔的线和电源部分断开了,没办法,我尝试飞线,但发现好丑,最后无奈把能拆的都拆了又重新焊了一个,就是多费了些功夫。

image.png

    在第二个继电器的部分有一点问题,我在下载程序调试的时候,发现第二个继电器总是不能够控制,第一个和第二个继电器用料,接法一模一样,但第一个可以正常工作。我首先测继电器输出的ULN2003的引脚,发现第二个继电器的ULN2003的控制引脚电压总是低于第一个继电器的ULN2003的控制引脚。我把第一个继电器的控制引脚和第二个继电器的控制引脚短接,发现第二个继电器可以正常工作了。我就想是不是单片机的这个引脚没有焊接好,我又重新涂了一遍锡,发现还是不行,我又在想是不是程序有问题,导致整个引脚没有输出,因为都是继电器,我就在程序里把引脚换了,发现还是不行。好苦恼。最后还是没有找到原因。没得办法,继电器还得工作,因为ULN2003有7路输出,而我只用了三路,我在设计的时候还多引出了一路,正好这个有用了,我就把这个引脚和第二个继电器的引脚连接到了一块,上电,正常了。但是更纳闷为什么另一个引脚不行,可能是我虚焊了吧。

九、智能配网方法(两种配置模式)

9.1 AP模式:

步骤:

1.esp8266初始化并进入AP模式,使得手机可以搜索到esp8266模块的热点信息。

2.手机扫描WIFI列表,连接模块热点发送路由器ssid和password(通过UDP)。

3.esp8266解析字符串提取ssid和password,连接路由器。

9.2 SmartConfig模式(我们采用的模式)

这种配网模式需要使用指定的APP软件。

因为我们使用的是乐鑫生产的esp8266-01s,所以我们采用乐鑫自主研发的ESP TOUCH实现智能配网模式。ESP TOUCH 协议采⽤的是 Smart Config(智能配置)技术,帮助⽤户将采⽤ ESP8266EX 和 ESP32 的设备(以下简称“设备”)连接⾄ Wi-Fi ⽹络。⽤户只需在⼿机上进⾏简单操作即可实现智能配置。

1.手机连接家里的路由器,打开ESP TOUCH软件,输入路由器的密码。

image.png

2.esp8266开启混杂模式监听所有的网络数据包(按下设备复位键的同时按下智能配网按键,松开复位键不要松开配网按键,等待LED2和LED5同时闪烁时再松开配网按键)

3.手机通过广播发送ssid和password(点击软件中底下的确认)

image.png

4.此时手机APP出现这个界面,说明正在进行配网,需要我们等待一下。

image.png

5.出现这个界面说明我们配网成功,esp8266已成功连接路由器。

6.并且一次配网终生有效。

十、生活物联网平台设备创建

创建阿里云设备:

1.登录阿里云生活物联网平台。

2.点击创建新项目

image.png

3.输入设备名称,类型选择自有品牌项目。

4.新创建的项目

image.png

5.点击创建新产品

image.png

image.png

按上图格式填写,(注意联网方式采用蜂窝,因为阿里云不支持esp8266)

6.默认功能:

image.png

7.给我们的插座添加功能(两路开关,一路温湿度)

点击添加功能按钮,在其他类型里搜开关(我把左开关和右开关作为两路继电器的开关,可自由选择)温度和湿度的添加方式也都一样。不需要的功能可以删除。
添加后的界面:

image.png

8.在人机交互界面我们选择使用公版APP(有另外的APP的可自主选择)

image.png

点击左边的产品展示,可更换产品的图标,产品的名称、品牌。
在设备面板我们可以设置我们产品的手机APP的界面,包括布局等。

image.png

创建后之后保存退出。

9.在设备调试界面选择合宙的2G模块。

image.png

在测试设备里添加一个新的设备。

10.发布产品,开发完成。

image.png

十一、设备绑定和三元组烧写

11.1 设备绑定:

将实际的产品和云设备进行绑定。
代码中我设计了三元组的接口,不是直接把三元组写入程序中,而是可以通过串口传输要绑定设备的三元组。

操作流程:

1. 在阿里云创建完设备后,显示设备未激活,在设备调试界面

image.png

2. 在功能定义界面

image.png

3. 我们把需要的三元组和标识符的信息复制一下,中间以逗号隔开(英文逗号),一定注意:
按产品号,设备名,设备密匙,灯,插座,温度,湿度格式填写
a1MFq7NDKJv,Switch,342a55cad323807a1f93bc288ca6d2d5,leftPowerstate,rightPowerstate,temperature,humidity

4. 打开串口调试助手,

image.png

5. 把三元组和标识符信息填入发送框里,然后打开串口。

我们复位线下设备,复位的同时按住key1键不松开,此时串口第一行打印W25Q64的ID,后面一直打印接收到的数据,并且此时LED3和LED5同时闪烁,如图所示:

image.png

6. 此时点击串口上的发送按键,把三元组等信息传输给设备,之后串口会打印出三元组等的信息

image.png

7. 单片机接收到数据后会进行处理,我们不用管,至此设备绑定完成。
发送一次数据后,数据保存在flash里,下次上电时会自动读取。
刷新生活物联网平台,可以看到设备已经在线。

image.png

8. 点击运行状态,发现设备已经工作(数据已经上传)。

image.png

11.2 手机APP绑定:

1. 在物联网平台人机交互界面,点击配网+APP下载二维码

image.png

2. 填入要绑定的设备名,我的是Switch
点击生成二维码。
打开手机云智能APP:点击右上角的+号,开始扫描二维码,

image.png

3. 设备绑定成功。在主页点开

image.png

正是我们创建的界面。

11.3 web界面创建

1. 进入阿里云官网,点击控制台,选择物联网平台,点击loT Studio。

image.png

2. 新建应用,新建项目。

image.png

3. 关联产品和设备,然后就可以对web界面进行编辑了。编辑好界面,发布就可以了。

image.png

十二、功能测试

功能测试部分都将以视频的形式放在下面的附件里。

十三、项目进度

1、 8月7号到8月8号完成硬件的选型、PCB的绘制。

2、 8月10号更改了电路图继电器部分的连线,PCB线宽都加宽了,下面也没有覆铜。

3、 8月11号下单,等待运送。开始用开发板搭电路写代码。

4、 8月12号成功连接阿里云,实现了基本代码的移植。

5、 8月13号完成了温度和湿度的采集和上传。

6、 8月14号,增加了串口烧写三元组程序。完成了LED灯的烧写三元组的闪烁和智能配网的闪烁和网络连接闪烁。还完善了部分的功能描述。

7、8月15号下午板子到了,开始焊接。

8、 8月16号、完成板子的焊接和调试,以及部分视频的拍摄和工程描述。

9、8月16号晚上9点完成所有视频的拍摄上传,项目完结。

十四、方案改进

1.蜂鸣器在整个板子上没有用处,LED完全代替了提示的功能,如果再加一个声音,完全是多余的,而且蜂鸣器的体积太大。

2.板子设计的相对较大,把按键换成小按键,可以节省不小的空间。

3.可以双面放置元器件,把W25Q64、ULN2003放到背面,进一步节省空间。

4.LED换成EGB的,也可以节省空间。

5.st_link下载接口完全可以不要,采用串口下载的方式,如果做成产品,串口也可以不要,直接引出两个过孔用于下载程序。

6.把dht1、esp8266、oled全部集成在板子上,而不是使用模块。

7.加上外壳。

十五、心得体会

1.画板子要弄懂每一个器件的功能和原理,用自己熟悉的器件,不然到时候调试的时候非常头疼。

2.强电部分不覆铜,强电和强电、强大和弱电之间要注意安全距离。

3.焊接的时候要注意不要虚焊,micro-usb要固定,micro-usb下面能不打孔就不打孔。

4.买元器件一定不能只图便宜,有的商家卖的都是次品,到手后,浪费的不仅仅是金钱,更是精力,调试的时候最为致命,推荐立创商城,用着放心。

5.通过这次活动,跟着宋工学了不少,了解了一个产品从设计到制作的每一个步骤,这其中学到的不仅仅是知识,更是一种能力。在这里感谢宋工的讲解,感谢莫工、周工和群里小伙伴们的答疑解惑,感谢立创EDA的支持。

立创EDA工程链接:智能插座
B站视频:智能插座

  • 10
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是一个简单的ESP8266智能插座程序示例,使用了Arduino IDE进行编写。该程序允许您通过手机应用程序或Web界面远程控制插座。 首先,您需要安装ESP8266板支持库和WiFiManager库。然后,将以下代码复制到Arduino IDE中,将您的WiFi SSID和密码添加到程序中,并上传到ESP8266开发板。 ```C++ #include <ESP8266WiFi.h> #include <WiFiManager.h> WiFiServer server(80); // 端口80用于Web服务器 String webPage = ""; // 存储Web页面的字符串 void setup() { // 初始化串行通信 Serial.begin(9600); // 连接到WiFi WiFiManager wifiManager; wifiManager.autoConnect("SmartSocket"); Serial.println("Connected to WiFi!"); // 启动Web服务器 server.begin(); Serial.println("Web server started!"); } void loop() { WiFiClient client = server.available(); if (client) { Serial.println("New client connected!"); while (client.connected()) { if (client.available()) { // 读取客户端请求 String request = client.readStringUntil('\r'); Serial.println(request); // 处理GET请求 if (request.indexOf("GET /") != -1) { // 生成Web页面 webPage = "<html><head><title>Smart Socket</title></head><body>"; webPage += "<h1>Smart Socket Control</h1>"; webPage += "<form method=\"get\" action=\"socket\"><button name=\"state\" value=\"on\">On</button><button name=\"state\" value=\"off\">Off</button></form>"; webPage += "</body></html>"; // 发送Web页面 client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); client.println(webPage); // 处理插座状态更改请求 } else if (request.indexOf("GET /socket") != -1) { // 读取状态更改请求 int stateStart = request.indexOf("state=") + 6; int stateEnd = request.indexOf("HTTP/") - 1; String state = request.substring(stateStart, stateEnd); // 更改插座状态 if (state == "on") { digitalWrite(5, LOW); // 打开插座 } else if (state == "off") { digitalWrite(5, HIGH); // 关闭插座 } // 生成确认页面 webPage = "<html><head><title>Smart Socket</title></head><body>"; webPage += "<h1>Smart Socket Control</h1>"; webPage += "<p>Socket turned " + state + "!</p>"; webPage += "</body></html>"; // 发送确认页面 client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); client.println(webPage); } } } // 断开客户端连接 client.stop(); Serial.println("Client disconnected!"); } } ``` 这个程序使用GPIO 5来控制插座的开关状态。在ESP8266上,GPIO 5对应于D1引脚。因此,您需要将插座的开关线连接到D1引脚和GND引脚。 上传完成后,打开串行监视器并重置ESP8266。它将连接到您的WiFi网络并显示其IP地址。将该IP地址输入到Web浏览器中,您将看到一个简单的Web页面,可用于控制插座的开关状态。 此外,您可以使用任何HTTP客户端(如Postman)来发送GET请求以更改插座状态。只需将以下URL添加到HTTP请求中:http://[ESP8266 IP地址]/socket?state=[on或off]。例如,要打开插座,可以使用以下URL:http://[ESP8266 IP地址]/socket?state=on。 希望这可以帮助您开始构建您自己的智能插座

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值