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

编辑器版本 ×
标准版 Standard

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

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

3、支持简单的电路仿真

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

专业版 professional

1、全新的交互和界面

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

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

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

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

简介:使用STM32F103作为主控,通过物联网模块发送控制指令控制继电器开关,同时获取温湿度传感器值在OLED及APP上显示。

开源协议: GPL 3.0

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

创建时间: 2020-08-08 22:50:33
更新时间: 2021-06-11 09:53:44
描述
使用STM32F103C8T6作为主控,价格相对便宜,网上相关资料较多,之前使用过正点原子的战舰开发板,对STM32f1系列编程较熟悉。 通过物联网模块EM3080发送控制指令控制继电器开关,同时获取温湿度传感器值在app显示。 板载OLED显示屏,同步显示温湿度数据及操作过程中的相关提示信息。 温湿度传感器型号:DHT11,一个模块即可获取温度和湿度数据,减少元件使用量和CPU资源使用 其他部分和立创的源方案基本相同 调试过程: \*\*1\.\*\***焊接部分** 首先焊接单片机最小系统,及板子的电源部分,以便测试程序是否可以正常下载。 **遇到问题**: (1)焊接完这部分后测量发现3.3V_MCU和GND之间短路,排查单片机电源和地相关的引脚并无短路现象,最终发现是使用的晶振问题,该晶振为5*7mm贴片封装32.768Mhz有源晶振如下图所示,在焊接时用锡较多导致3.3V引脚和GND引脚同时与晶振顶盖的金属部分相连接,出去多余的锡后再次测量,无短路现象 ![晶振.jpg](//image.lceda.cn/pullimage/K8tI1CdgwkJk2HPk0xUeYhKCBoHAivqZKvdTi2MA.jpeg)
(2)确认无短路后上电测试,点源指示灯不亮,触摸单片机无发热现象,但32.768Mhz晶振严重发烫。已确认晶振的VCC和GND未短路,反复检查发现之前焊锡沿顶盖边缘进入晶振内部,可能造成晶振内部短路,晶振亡。拆除。由于STM32F1时钟来源可以是内部RC振荡电路或外部晶振。因此板子单独使用8Mhz晶振,32.768Mhz暂时未焊接。 (3)下载闪烁LED测试程序,由于最开始只焊接了一个LED,而且巧的是这颗LED接的是PB4引脚。程序下载后没反应,以为是板子问题,折腾半天。在百度时偶然看到,PB3,PB4,PA13,PA14,PA15是特殊的IO口,用作JTAG/SWD仿真器的调试接口。其中PA13,PA14分别作为SWD调试的SWIO和SWCLK;PB3,PB4,PA13,PA14,PA15共同用于JTAG。这五个IO引脚非常特殊,正常情况下作为SWJ仿真器的调试引脚,如果要作为普通IO口使用需要特别的配置。不同I/O使用需求配置也不同,如下:GPIO\_Remap\_SWJ\_JTAGDisable: /*!< JTAG-DP Disabled and SW-DP Enabled */  即能用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试GPIO\_Remap\_SWJ\_Disable:  /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */  5个引脚全为普通引脚,但不能再用JTAG&SWD仿真器调试,只能用st-link调试 GPIO\_Remap\_SWJ\_NoJTRST: /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */PB4可为普通IO口,JTAG&SWD正常使用,但JTAG没有复位 如果你用到所有的五个引脚当做普通IO口,那么上述步骤二中的重映射配置应写为GPIO\_PinRemapConfig\(GPIO\_Remap\_SWJ\_Disable\, ENABLE\); 如果你用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试,则重映射配置应写为GPIO\_PinRemapConfig\(GPIO\_Remap\_SWJ\_JTAGDisable\, ENABLE\); 同理可配置只用PB4可为普通IO口的情况。 工程中使用PA13&14用于SWD调试\,其他作为普通I/O因此使用GPIO\_PinRemapConfig\(GPIO\_Remap\_SWJ\_JTAGDisable\, ENABLE); 闪烁LED程序测试成功后将剩余元件全部焊接完成。 \*\*2\.\*\*软件部分 (1)移植宋工的程序到STM32,测试程序时应分模块分别测试,否则无法判断是那部分程序有问题。 首先测试DHT11,将温湿度显示在OLED上。这部分按照上述重映射操作后正常显示。 测试串口2收发时发现,串口2发送和接收均无反应,一开始以为是字符串发送函数的问题,按照网上的方法进行更改 方法1: const u8 TEXT_Buffer[]={"AT"}; for(i=0;iDR =TEXT_Buffer[i]; delay_ms(10); } 方法2: void Send_Str1(char *s) { while(*s) { USART_SendData(USART1,*s++);//串口1发送数据函数,库函数已提供} while(*s) { while(!USART_GetITStatus(USART1, USART\_FLAG\_TXE\)\); //判断是否可以发送 USART_SendData(USART1,*s); while(USART_GetITStatus(USART1, USART\_IT\_TC\)\); //判断是否发送完成,此句必须有,否则会造//成只发送最后一个字符(覆盖) s++; } } 更改之后测试仍然无反应,仔细查看程序分析发现USART2是挂载在APB1总线下的,程序时钟使能部分写错。 (2)3080模块测试,使用USB转串口模块直接连接3080模块,使用格西烽火串口助手测试AT指令,测试结果如下: ![串口测试AT指令.jpg](//image.lceda.cn/pullimage/U9uzOuwNze5xVgiAWO0j5v6oGutN5pEJ2UiCi2lG.jpeg)
进入路由器配网模式成功后,使用云智能APP扫描配网二维码,但配网失败。后面更改阿里云设备配网方式为一键配网,再次调试正常,成功配网。 (3)云端命令下发与设备数据上报问题,注意:数据上报命令格式:AT+ILOPSENDJSON=property,{“temputure:”,28}\r.在使用串口2给3080模块发命令时采用操作DR寄存器的方式,提前将要发送的数据缓存在数组中,通过一个循环逐位发送数据,这里要注意缓存数据是否全部发送,可以先用串口助手调试,确认发送数据无误后再修改程序发送给3080模块。 云端命令下发控制继电器,这里偷个懒,直接对接收到的字符串进行判断,看其是否包含powerstate:0子串,是则打开继电器。这个地方后面待优化。
设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
工程成员
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

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

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

服务时间

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

support
  • 开源平台公众号

MP