《《《《《正文》》》》》
《前言》
本文主要介绍开发一个基于单片机的wifi通信远程灯控制的方法,单片机只需支持UART通信即可,以实现最简单的远程控制开关、远程控制亮度,配网后,只需手机联网就可控制联网设备;
本文的wifi模块是基于涂鸦智能的wifi模块,主芯片使用STM32F103C8T6;wifi模块与主芯片使用最基本的UART串口实现通信;
《WIFI模块申请》
1、登入涂鸦智能loT平台;
平台网址:https://www.tuya.com/cn/
2、创建产品;
3、方案选择;
方案选择wifi,点击创建产品。这里有很多涂鸦自己定义的产品,我们先选这个;其他可根据自己的项目选择;
4、功能定义;
第3步之后会跳出功能选择;选择自己需要的功能;
我定义了开关状态值,bool类型表示开\关;以及亮度值,Value类型表示亮度,从0-1000;
5、选择手机app面板;
下载手机涂鸦智能App,这里我使用了涂鸦提供的界面,这个界面根据自己需求开发,或者有特殊要求也可以提交需求,涂鸦会帮你开发;
6、选择wifi模组,并下单购买;
下面是我的模块,你选择一个模块就行;
7、其他默认即可;等待模块快递寄到;
《硬件设计》
1、获取模组封装尺寸;
在硬件开发下,模组详情下获取封装尺寸;
2、下面这个是我的封装尺寸,涂鸦自家的模块封装尺寸都差不多;
3、画模块封装pcblib;
这里我自己画的,带3D;供参考;下载地址:
https://pan.baidu.com/s/1hqxgKS46EaokUoN7utyw7g
提取码:airX
4、原理图设计:
按键是长按5s进入配网;灯是指示wifi模块工作状态,常亮表示联网正常,长灭表示未配网;快闪表示正在配网状态;wifi模组与MCU使用usart串口连接;这里的按键口A_14和灯口A_19注意,会在下面代码配置里使用到;
5、布板
略。。。。就是拉拉线,没什么特殊要求;
我的部分pcb;
6、回来的板子;
焊接后:这里我把最初的原理图端口和封装端口左右镜像弄反了,所以只能这么焊;上面分享的封装资源是修改后ok的;
《软件设计》
当中涉及的PWM、UART等模块代码可参考以下文章。
基于C语言的机械按键模块化软件开发(模块化程度高,可高速移植)
STM32F103之脉冲宽度调制(PWM)模块开发(含呼吸灯实例源代码)
STM32F103调试串口(USART)模块开发(内含Printf重定向函数说明)
软件其实主要是模块与主芯片之间的UART通信;我这里使用涂鸦的提供的WIFI的SDK进行移植;
1、获取我上面文章的USART模块代码;
相关代码获取地址:
https://pan.baidu.com/s/1zyrOF18WxIq0H3_4qU7Evg
关注公众号,发送1234,获取提取码;
2、获取SDK:进入涂鸦平台,进入产品开发,在硬件开发的最下面下载MCU_SDK,这里有很多资料,都可以下载看看;
3、打开下载包,将里面的mcu_sdk复制到usart工程文件下,除了VERSION.md文件,其他都加入工程;
3、下面开始移植,涂鸦有移植教学文档;在网站的文档中心搜索移植就可以找到移植说明文档,这里你可以看他的文档详细些;下面是我的移植过程;
4、在文件路径中添加mcu_sdk文件路径;
把wifi.h头文件写到main.h
把main.h头文件写在wifi.h里
这个时候编译还有很多问题,不急;
5、我们模块的方式使用模块自处理模式,找到protocol.h下将这个功能宏定义打开;并根据硬件,指示灯GPIO是A_19,就是19,按键GPIO是A_14,就是14,如下代码:
6、在protocol.c添加字节发送函数;
7、在USART串口接收中断函数中添加uart_receive_input()函数;如下:
8、在protocol.c的all_data_update函数上传自己初始化数据的;这个是用来上电更新所有数据的,我就默认上电关闭led,亮度值为1%,即10;如下代码;
如果你本地改变了数据,就调用上面的各自的函数就能实现数据上传了;
mcu_dp_bool_update(DPID_SWITCH_LED,0); //BOOL型数据上报;
mcu_dp_value_update(DPID_BRIGHT_VALUE,100); //VALUE型数据上报;
9、在protocol.c里有数据下传的函数,只要在这个函数里添加自己的响应操作就就可以实现wifi控制了;我这个有2个功能,开关和亮度,就有下面2个函数,有多少数据下传就有多少个函数;
10、在主函数main.c初始化调用wifi_protocol_init();usart波特率为9600;在死循环里调用wifi_uart_service();必须放在while(1),不要加任何判断;
int main(void)
{
NvicConfig();
USART_init(9600);
wifi_protocol_init();
for(;;)
{
wifi_uart_service();
}
}
11、最后编译,把错误去掉,一般都是些中文。注释掉就可以了;
12、下载,长按按键5s,涂鸦wifi就会进入配网状态,灯会快闪;打开手机涂鸦智能app进行配网;
<iframe allowfullscreen="true" data-mediaembed="bilibili" id="qFSrxu9H-1621229966330" src="https://player.bilibili.com/player.html?aid=375741528"></iframe>这样整个联网就成功了;
《远程灯实例》
下面是我的涂鸦智能App控制LED亮灭、亮度的实例视频;也可使用4g,只要手机联网就可以远程控制;
<iframe allowfullscreen="true" data-mediaembed="bilibili" id="FBAD0jQS-1621229997483" src="https://player.bilibili.com/player.html?aid=930649944"></iframe>代码地址:
https://pan.baidu.com/s/1ptGuLFsNW9MM5Xqv2Dmx6w
提取码:airX
《《《《《END》》》》》