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


《前言》

本文主要介绍开发一个基于单片机的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》》》》》

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

  1. 手把手教你开发基于深度学习的人脸识别【考勤/签到】系统

    人脸识别介绍 平台环境需求 技术点 系统流程 细节设计 人脸检测 人脸关键点定位 人脸特征提取 模型的训练 模型的部署 MySQL数据库的使用 MFC工程的搭建 软件使用 人脸识别介绍 人脸识别技术是 ...

  2. 0基础手把手教你开发探探类社交软件(Tinder项目产品架构说明文档)

    目录介绍 1.关于项目App整体架构 1.1项目整体架构 1.1.1 目前项目使用架构 1.1.2 目前常见的架构 1.1.3 MVP架构优点及缺点 1.2.主要的技术要点 1.2.1 布局常用及技巧 ...

  3. 手把手教你学51单片机——函数进阶与按键

    目录 写在前面 一.单片机最小系统解析 1.1电源 1.2晶振 1.3复位电路 二.C语言--函数 2.1函数的调用 2.2函数的形参和实参 三.按键 3.1独立按键 3.2独立按键控制led数码管显 ...

  4. c语言52单片机液晶屏显示,[手把手教你学51单片机C语言教程]22 LCD12864液晶屏显示.pdf...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspC/C++资料 [手把手教你学51单片机C语言教程]22 LCD ...

  5. c语言怎么编程输出相框,手把手教你学PIC单片机C语言教程第1课.PDF

    手把手教你学PIC单片机C语言教程第1课 - PIC HL-K18 - PIC HL-K18 慧净电子--做人人都买得起的PPIICC单片机开发板真诚为你服务,基于HHLL--KK1188 开发板 手 ...

  6. java 注册探探账号_零基础手把手教你开发探探类社交软件Tinder

    原标题:零基础手把手教你开发探探类社交软件Tinder 目录介绍 1.关于项目App整体架构 1.1项目整体架构 1.1.1 目前项目使用架构 1.1.2 目前常见的架构 1.1.3 MVP架构优点及 ...

  7. 手把手教你:基于LSTM的股票预测系统

    系列文章 第七章.手把手教你:基于深度残差网络(ResNet)的水果分类识别系统 第六章.手把手教你:人脸识别的视频打码 第五章.手把手教你:基于深度学习的滚动轴承故障诊断 目录 系列文章 一.项目简 ...

  8. 手把手教你开发IOT设备

    手把手教你开发IOT设备 1.概述 IOT设备的开发是基于rt-thread rtos实现.rt-thread是一个国产RTOS,它是一个RTOS,但又不仅仅是RTOS,支持大量的芯片,驱动,还包含大 ...

  9. 物联网全栈教程--手把手教你开发一个智能浇花器

    下面来说一下课程的安排,本教程可以分为三大章节,30个小章节,在1-10章节,手把手讲解了如何实现一个定时/实时控制的浇花器,可以对浇花器电量进行显示,可以进行定时设置,以及实时控制,低功耗模式等等, ...

  10. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    转自即时通讯网:http://www.52im.net/ 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说" ...

最新文章

  1. Python培训教程分享:10款超好用的Python开发工具
  2. Openstack组件部署 — Networking service_Compute Node
  3. SpringBoot+Vue使用Get请求时提示:Error parsing HTTP request header
  4. java 中的event_Java中this与event有什么不同
  5. java中怎么把生成文件到项目根目录_[SpringBoot2.X] 02- 项目结构介绍
  6. BugkuCTF-Crypto题easy_crypto
  7. 在Windows Server 2008中安装Exchange Server 2007 SP1
  8. 如何解决arcmap中的反走样问题。
  9. 关于Cocos2d-x中图集中图片的调用
  10. Tensorflow2.0之Minist手写数字识别
  11. 《南风窗》长篇报道:仇恨引爆悲剧
  12. 一致性算法-Gossip协议详解
  13. python mp3转wav_python 录音,WAV转MP3
  14. SAS PROC FORMAT
  15. Gitee项目分享——学之思开源考试系统
  16. 上海伯俊软件科技有限公司面试题
  17. 深入浅出系列之——并查集详解【武侠版】【简单有趣】
  18. 如何换config.plist、换clover和添加引导的教程
  19. css实现立体长方柱
  20. Python期末复习

热门文章

  1. 秒赞机器人好友_qq空间秒赞机器人好友 qq空间说说秒赞神器
  2. 格式工厂视频格式转换器下载
  3. 什么是需求跟踪矩阵RTM
  4. 游戏十五大基本游戏类型介绍
  5. 应用程序无法正常启动0xc0150002 解决方案
  6. SIM900A GPRS无线通信
  7. deepin Linux虚拟输入法,输入法 - deepin Wiki
  8. java 文件读写 中文_java读写中文文件
  9. ZEMAX双胶合透镜设计——光学设计学习笔记1
  10. property java_java-必须为元素类型“ property”声明属性“...