【训练营_进阶班】互联网智能插座 - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

标准版 【训练营_进阶班】互联网智能插座

简介:基于STM32F103C8T6+ESP8266构建的智能插座系统。语雀链接 https://www.yuque.com/wuyuchen-69cjr/zp1e0u/bbtl9p

开源协议: GPL 3.0

(未经作者授权,禁止转载)

创建时间: 2020-08-05 20:39:55
更新时间: 2021-10-05 09:24:54
描述
# 一、项目简介 本项目基于stm32和esp8266,实现了手机APP控制插座、手机APP查看数据(温湿度、插座通断),板载OLED查看数据等功能。 stm32使用HAL库,esp8266使用RTOS3.0 SDK,它们之间使用串口通信进行数据交互。本项目为更复杂的物联网应用提供设计原型,更深层次的开发只需在该解决方案上增加外设即可。 如果只是实现一个插座的功能,可以直接使用ESP8266来完成,但是当ESP8266的引脚数量不够多,需要使用stm32来扩展功能的时候,本项目可以提供一套解决方案,完成了STM32与ESP8266相互通讯的软硬件设计。 # 二、硬件原理图设计(详细见原理图) ## 1、MCU选型 选择STM32F103C8T6,作为设计原型,选择一颗具有代表性的芯片即可。如果该芯片功能不够无法满足后续开发,可以替换为STM32F103VC、STM32F407ZE等芯片。(PS:主要是因为便宜+简单+熟悉) ## 2、WIFI芯片选型 选择ESP8266芯片,使用安信可推出的ESP-12F模组。个人感觉这颗芯片的知名度较高,网上资源比较多,学习成本较低。而EMW3080,网络上资料较少。在B站上分别搜索这两颗芯片,一目了然,一个是满屏的教程,一个是3080显卡。在csdn上也差不多。 ## 3、STM32最小系统电路设计 1、BOOT电路:两个BOOT都下拉,程序从flash区域启动 2、下载电路:使用SWD下载程序,接口使用X9821WRS-04-9TSN,防呆,比用杜邦线插拔舒服,此处仅个人习惯,可改为2.54mm排针 3、晶振电路:8MHz,个人喜欢5032 两脚封装的晶振,比49S看起来舒服,就是贵一点 4、复位电路 5、电源指示灯 6、电源:使用SPX3819-3.3,LDO,用来给主控芯片供电较为合适 7、滤波:四个100nF的滤波电容 ## 4、LED指示灯 一个电源指示灯、三个自定义LED ## 5、按键 两个按键,用来恢复出厂设置、控制OLED显示等 ## 6、OLED 本次设计中没有给stm32加上USB电路,也没有预留串口引脚,无法串口输出信息,所以加上OLED可以方便调试,当然最主要的还是用户可以看到数据。 ## 7、DHT11 采集温湿度可以说是插座的一个扩展功能,DHT11可以说是非常常见而且便宜的温湿度传感器了,所以用它。 ## 8、ESP8266最小系统设计 1、ESP_EN、GPIO0、GPIO2上拉 2、GPIO15下拉 3、复位电路 4、CH340串口一键下载电路 ## 9、ESP8266与STM32通信电路设计 ESP8266只有一个半UART,其中UART1用来输出日志,UART0用来下载程序,但是要实现与STM32串口通信需要做一些更改。将ESP8266的UART0的TX和RX映射到U0RTS(MTDO/GPIO15)和U0CTS (MTCK/GPIO13)。交换引脚之后,我们依旧可以使用之前的TXD0和RXD0来下载程序,但是和stm32通信则使用GPIO13和GPIO15。这样可以保证在不改变硬件连接的情况下,同时下载程序以及与STM32通信。 # 三、硬件Layout设计 ## 1、USB走差分线 ![USB走差分.png](//image.lceda.cn/pullimage/rFG1aIGaH26eRi6u0XwhKq3Mvl9W2Hs44BVzfEdB.png) ## 2、**对晶振进行包地处理,内部不覆铜** ![晶振不覆铜.png](//image.lceda.cn/pullimage/Tr1TUgdxnb8zlIzSIbjPqW5Nyo4lY1o8cWbhAgPl.png) ## 3、220V区域不铺铜,采用2mm线宽 ![220V区域不铺铜.png](//image.lceda.cn/pullimage/9IucrJcdQ1cUw2NZs6PjIgfYKlZ6mmBHqTuFr1hW.png) # 四、STM32软件设计 1、开发环境 MDK ARM 5.28 STM32CubesMX 6.0.1 2、SDK版本 STM32Cube MCU Package for STM32F1 Series 1.8.0 Keil.STM32F1xx_DFP.2.3.0.pack 3、使用freeRTOS,创建“SWTask”和“UARTTask”进行任务调度 3、创建结构体,使用UART DMA同步STM32和ESP8266的数据,不定长接收,判断帧头sof1、sof2接收数据 ``` c typedef struct { uint8_t sof1; uint8_t sof2; uint16_t temperature; uint16_t humidity; _Bool relay; _Bool linkkit_started; _Bool factory_restore; } Model_Info_t; ``` 4、OLED驱动程序,使用软件模拟IIC通信,显示数据 5、“SWTask”实现按键扫描,检测SW1,SW2长按或短按,并执行相应操作。 6、“UARTTask”实现发送数据,接收数据由DMA回调完成 # 五、ESP8266软件设计 1、开发环境 Visual Studio Code 1.47.3 gcc version 5.2.0 (crosstool-NG crosstool-ng-1.22.0-92-g8facf4c0) 2、SDK版本 ESP8266\_RTOS\_SDK 3\.2 3、使用esp-aliyun框架 4、将日志输出和串口改为TX1 5、交换UART0的引脚,实现与STM32通信 6、采集DHT11数据 7、使用硬件定时器控制定时任务 # 六、机械设计 1、OLED支架。 我使用的OLED是0\.96寸 IIC OLED,尺寸为25mm\*26mm。考虑到OLED模块底部有元器件,所以特意在中间镂空1mm,使得元器件嵌入凹槽中。装配使用了M2\*5mm的自攻螺丝。 ![oled_支架.png](//image.lceda.cn/pullimage/oihnMHzigQmJfn95uxcmbXjRPlKq7I5ZVlz3EW2U.png) ![oled.png](//image.lceda.cn/pullimage/TBiePDxAI3rRe8mgB4YzvsoAC8e5imI3FnKelfSh.png) ![oled实物图.jpg](//image.lceda.cn/pullimage/q7RKys8ZkkGEwRmQWBl3xfRQjvtA5LJCLlM2hBTM.jpeg) 2、外壳,这个版本由于同时使用了stm32、esp8266、oled、dht11等器件,板子的整体面积较大,所以并不想设计外壳。后续会设计一版去除dht11、stm32,只留esp8266以及继电器部分,使体积尽可能小再设计外壳。 # 七、公有APP ![公有app界面.jpg](//image.lceda.cn/pullimage/VuCzpq48YbqhmCpNXXyCtAGlbDC5DYlEoUZ8Ypat.jpeg) # 八、功能实现 1、实现公有APP一键配网,查看温湿度数据,控制插座 2、天猫精灵语音控制插座,“打开插座”、“关闭插座” 3、长按SW1,重置ESP8266,进入配网模式,指示灯闪烁,配网后,指示灯常亮 4、OLED显示温湿度数据、网络连接数据等 # 九、设计问题及改进 ## V2.0 1、修改了上一版本中的问题 2、黑色阻焊 ## V1.0 1、ESP8266电路中使用了GPIO9来读取DHT11的温湿度数据,如下图所示,设计的初衷是该引脚距离DHT11的摆放位置比较近,但是实测却发现使用这个引脚,板子就会重启,后经查找资料发现,ESP8266的GPIO9和GPIO10用于读写FLASH,使用了会造成读取程序出错。所以下一版我将使用GPIO5来读取DHT11。这一版只能通过外接一个DHT11模块来实现功能,板载的已经不能用了。 ![失误1.png](//image.lceda.cn/pullimage/Z3qHiWtvnOFYleVamxS8oZuki4QFufssg2rGVXtl.png) 错误图1 2、OLED的封装出现问题,我购买的0.96寸 IIC OLED的实际尺寸为25mm*26mm,但是封装上的尺寸大于该设计,导致布局布线很紧凑。下一版将会更新封装。 ![失误2_2.jpg](//image.lceda.cn/pullimage/LSFPCd3XCgN6kgoQEvmqjh689xpvySnUwxzRsSBu.jpeg)
失误图2 3、设计继电器电路的时候,输入端信号布线设置了“CH1”网络,但是在单片机那端没有添加该网络。而DRC的时候,由于这个引脚已将连接了上拉电阻,所以并没有提示网络端口只有一个,以至于没有检查出错误。这提醒了我设计完成后应当从头到尾每个网络都检查一遍,出现这样的纰漏实属不该。这一版只能将LED4去掉,将它的引脚通过跳线连接到“CH1”网络上,来实现继电器的控制。

![失误3.png](//image.lceda.cn/pullimage/ANobaWNArZlsgaCLE2PhCADm1iCW81rTFdWgOEYF.png) 错误图3 4、ESP8266与STM32联调的时候,日志会重定向到TX1(GPIO2)输出,但是这一版设计没有将TX1引出。初衷是作为一个插座,不需要添加多余的组件,在实际使用中TX1引脚是不会使用到的。但是在联调的时候由于看不到ESP8266的日志,这对于调试程序极为不利。考虑到目前处于测试阶段,而且一个焊盘的位置在板子上也是绰绰有余的,所以在下一版将添加GPIO2焊盘用于调试程序。 ![改进图4.png](//image.lceda.cn/pullimage/9p7YYuh718tPSLOvoKcgMSPcpd816ecjsEpzzgC2.png) 改进图4 5、为了使得STM32与ESP8266响应够快,将STM32的串口发送周期设为100ms,发送数据导致ESP8266的串口接收任务堆栈溢出,导致出错,故将其重新设置为1s周期。





























设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
工程成员
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP