飞道的博客

手把手教你开发基于单片机的wifi通信的物联网项目(远程灯控制)

220人阅读  评论(0)


《《《《《正文》》》》》


 

《前言》

本文主要介绍开发一个基于单片机的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之时基中断(TIM)模块开发

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进行配网;

这样整个联网就成功了;


 

《远程灯实例》

下面是我的涂鸦智能App控制LED亮灭、亮度的实例视频;也可使用4g,只要手机联网就可以远程控制;

代码地址:

https://pan.baidu.com/s/1ptGuLFsNW9MM5Xqv2Dmx6w

提取码:airX

 


《《《《《END》》》》》


转载:https://blog.csdn.net/qq_22520215/article/details/116928523
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场