STM32实战项目——WIFI远程开关灯

前言
其实WIFI开关灯在几个月前就想做了,但是对于没有云平台调试经验的我,一开始有些摸不着头脑,所以就搁置了。十一假期与老同学聊天时了解到他也在做一个远程开关灯的小项目,所以就重新开始了WIFI远程开关灯的小项目。

本文使用到的AT固件,固件烧录工具,烧录方法以及调试上位机,全部在文末公众号中,关注并私信“ESP8266资料”,可以免费获取!

本文设计的PCB工程文件可以关注文末公众号,私信“远程开关灯PCB”获取!

文章目录

  • 一、项目简介
  • 二、硬件选型
  • 三、连接腾讯云测试
    • 3.1 AT固件烧录
    • 3.2 云平台配置
      • 3.2.1 新建产品
      • 3.2.2 配置产品
    • 3.3 上位机调试
  • 四、所需AT指令
  • 五、程序编写
    • 5.1 ESP8266发送指令程序
    • 5.2 接收云平台信息
    • 5.3 舵机控制
  • 六、PCB设计
  • 七、优化方向

一、项目简介

本项目使用STM32F103C8T6作为主控芯片,搭配ESP8266,通过WIFI连接腾讯云来实现远程开关灯。腾讯云有自带的APP“腾讯连连”,但是目前苹果用户不能下载,不过他也有配套的小程序,十分友好。开关灯的功能由sg90舵机来实现。

目前只完成了第一版的软件开发,将功能分成了两种,一种是只需要关灯,也就是收到云平台的指令,就关灯,开灯需要手动。另一种就是既可以远程关灯,也可以远程开灯。之所以分成两种功能,是因为博主的需求只是能够睡前关灯,不再摸黑找床就够了!

二、硬件选型

  • 主控芯片:STM32F103C8T6
  • ESP8266:暂时使用的是正点原子的ESP8266,由于价格相对不太美丽,后续可能会更换。
  • 舵机:sg90

对于ESP8266和sg90不甚了解的小伙伴不要慌,可以移步博主的“STM32外设系列专栏”查看!

三、连接腾讯云测试

其实上云的方法,除了需要了解掌握云平台的配置方法,其他与STM32外设专栏中介绍的,利用WIFI模块访问API并无太大的差别。在上云之前,我们需要先做好前期准备。

3.1 AT固件烧录

安可信提供了可连接腾讯云的AT固件,下载链接在评论区贴出!有需要资料的小伙伴可以直接关注文末公众号,私信发送“ESP8266资料”,获取本文全部资料。

直连腾讯云AT固件
获取到固件后,下一步就是使用固件烧录工具将固件烧录到我们的ESP8266中。这里需要用的USB转TTL,固件烧录工具以及烧录方法全部打包在公众号资料中,这里暂时不在做介绍。

值得注意的是,我们在给正点原子的ESP8266模组烧录固件时,需要注意一下接线方式,这里说明一下

ESP8266			USB-TTLVCC		-----	5V
GND		-----	GND
TXD		-----	RXD
RXD		-----	TXD
IO_0	-----	GND

在烧录完固件后,再将IO_0置空,重新上电即可。

3.2 云平台配置

首先进入腾讯云平台,连接放在评论区。注册账号后进入到“实例管理”。

进入腾讯云

这里因为已经创建过,所以和最开始使用的小伙伴显示的有所不同,但是不影响介绍配置步骤。

3.2.1 新建产品

点击进入公共实例,点击“新建项目”,输入相关信息。

新建项目

新建完项目后,点击进入新建的项目,然后点击“新建产品”,按照下图选择并输入相关信息。

新建产品

3.2.2 配置产品

首先是“物模型”,我们是需要实现开关灯,这里我们只配置一个简单的属性。点击“新建自定义功能”,按照下图配置并输入相关信息。

新增自定义功能

添加完成后点击下一步,进入“设备开发”,选择“基于模组开发”。

设备开发

选择模组时选择下面的模组

选择模组

点击下一步之后,进入“交互开发”。除了下图的“配网引导”需要按照下图选择,其他的可自行配置。

配网引导

配置完成后,来到“设备调试”,新建完设备后,云平台部分就配置完成。新建完设备后点击产品,进入后可以看到设备信息。设备信息中的“设备名称”、“产品ID”、“设备密钥”在后续会使用到。

设备信息

3.3 上位机调试

上位机使用公众号资料中提供的上位机。用USB转TTL连接上ESP8266,打开上位机,`打开对应串口。输入上面的设备信息。

上位机

点击“直接连接WIFI”,输入要连接的WIFI名称和WIFI密码。等待连接上WIFI后,点击连接腾讯云。此时可以去云平台的设备调试中看一下设备是否处于在线状态。设备在线后,需要订阅主题,订阅主题时需要输入

$thing/down/property/产品ID/设备名称

订阅完成后就可以在云平台进行控制。点击云平台上在线调试中的“发送”,串口就可以收到服务器发送的消息。
上位机

四、所需AT指令

上面介绍了如何利用上位机来实现上云,并且收到云平台发送的指令。我们可以看到,实际上位机也是使用发送AT指令的方式实现的,所以我们在利用单片机+ESP8266上云时,模仿上位机去发送这些AT指令,一样可以上云。这里按发送顺序列举一下需要用到的几条AT指令。

AT+CWJAP="WIFINAME","WIFIPASSWORD"   // 连接指定WIFIAT+TCDEVINFOSET=1,"PRODUCTID","DEVICENAME","DEVICEKEY"   // 发送设备信息AT+TCMQTTCONN=1,5000,240,1,0   // 配置MQTT参数AT+TCMQTTSUB="$thing/down/property/PRODUCTID/DEVICENAME",0   // 订阅主题

需要注意的是,每条AT指令后面都需要加换行和回车!

五、程序编写

5.1 ESP8266发送指令程序

发送指令程序如下

/**==============================================================================*函数名称:Med_Esp8266_CheckLink*函数功能:检查ESP8266连接状态*输入参数:str:要发送的指令;*返回值:无*备  注:调用前先将需要发送的内容利用sprintf()函数转换成字符串串口1发送指令,串口2返回信息*==============================================================================*/
void Med_Esp8266_SendCmd (u8 *str)
{while (!gSetSuccessFlag){// 发送AT指令USART_Send(UART1,str);// 这里延时4s,防止出现虚假上云现象delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);gSendCunt = gSendCunt + 1;   // 发送次数加1// 检测接收内容Med_Esp8266_Uartrece_Pares();if (gSendCunt > 10){// 发送失败}}gSendCunt = 0;   // 清零发送次数gSetSuccessFlag = 0;   // 清零配置成功变量
}

其实实质是利用串口1,将需要发送的字符串发送出去。关于串口发送程序,可以到“STM32速成笔记”专栏查看,这里就不再做详细介绍了。

发送AT指令的完整程序如下

/**==============================================================================*函数名称:App_Esp8266_Init*函数功能:ESP8266初始化*输入参数:无*返回值:无*备  注:检测ESP8266连接状态,并连接指定WIFI*==============================================================================*/
void App_Esp8266_Init (void)
{// 连接指定WIFIsprintf((char*)gString,"AT+CWJAP=\"%s\",\"%s\"\r\n",WIFINAME,WIFIPASSWORD);Med_Esp8266_SendCmd(gString);
}
/**==============================================================================*函数名称:App_Esp8266_Connect_Tencentcloud*函数功能:连接腾讯云*输入参数:无*返回值:无*备  注:无*==============================================================================*/
void App_Esp8266_Connect_Tencentcloud (void)
{// 设置平台设备信息sprintf((char*)gString,"AT+TCDEVINFOSET=1,\"%s\",\"%s\",\"%s\"\r\n",PRODUCTID,DEVICENAME,DEVICEKEY);Med_Esp8266_SendCmd(gString);// 配置MQTT连接参数sprintf((char*)gString,"AT+TCMQTTCONN=1,5000,240,1,0\r\n");Med_Esp8266_SendCmd(gString);// 订阅MQTT主题信息sprintf((char*)gString,"AT+TCMQTTSUB=\"$thing/down/property/%s/%s\",0\r\n",PRODUCTID,DEVICENAME);Med_Esp8266_SendCmd(gString);
}

5.2 接收云平台信息

其实针对云平台信息的接收很简单,是否收到云平台消息的标准是,接收到的字符串中是否有关键词“led”。接收判断程序如下

/**==============================================================================*函数名称:Med_SG90_Uartrece_Pares*函数功能:解析串口接收内容*输入参数:无*返回值:无*备  注:无*==============================================================================*/
void Med_SG90_Uartrece_Pares (void)   // 串口接收内容解析函数
{u16 tempVar = 0;   // 临时循环变量if (gReceEndFlag  == 1)   // 如果接收完成{// 解析接收内容for (tempVar = 0;tempVar < gReceCount;tempVar ++){	// 腾讯云下发消息解析if (gReceFifo[tempVar] == 'l' && gReceFifo[tempVar + 1] == 'e' && gReceFifo[tempVar + 2] == 'd'){// 解析开关灯指令gRecCloudOrder = 1;break;}}// 清空接收数组for (gClearCount = 0;gClearCount < gReceCount;gClearCount ++){gReceFifo[gClearCount] = ' ';}gReceEndFlag = 0;   // 清除接收完成标志位gReceCount = 0;   // 清零接收计数变量}
}

关于如何解析接收字符串,如果看上面的程序还是不理解,可以到“STM32外设系列”专栏中WIFI篇查看。或者到“STM32实战项目”专栏中密码锁篇查看。

5.3 舵机控制

舵机使用TIM2的PWM通道2来控制,关于sg90的详细控制资料,可以到“STM32外设系列”专栏查看,程序工程可关注文末公众号私信获取。

这里定义了一个函数,可以控制舵机旋转到指定角度。

/**==============================================================================*函数名称:Med_Sg90_Spin*函数功能:SG90旋转到指定角度*输入参数:angle:旋转到的指定角度*返回值:无*备  注:无*==============================================================================*/
void Med_Sg90_Spin (u16 angle)
{TIM_SetCompare2(TIM2,195 - angle / 9);   // 旋转到指定角度delay_ms(500);
}

上面介绍了,项目有两种不同的功能,可以利用宏定义开关。舵机根据宏定义开关的不同,可以实现不同的功能。舵机开关灯程序如下

// 以下变量在其头文件中进行了全局声明
u8 gRecCloudOrder = 0;   // 收到云平台指令标志位/**==============================================================================*函数名称:App_Sg90_LedCtrl*函数功能:SG90开关灯*输入参数:无*返回值:无*备  注:根据需求选择宏定义开关*==============================================================================*/
#if CLOSE_AND_OPEN
u8 gOpenCloseCtrlFlag = 0;   // 开关控制标志位
#endifvoid App_Sg90_LedCtrl (void)
{Med_SG90_Uartrece_Pares();   // 接收串口内容并解析#if ONLY_CLOSEif (gRecCloudOrder == 1){Med_Sg90_Spin(CLOSEANGLE);   // 舵机旋转关灯delay_ms(500);Med_Sg90_Spin(99);   // 舵机归零delay_ms(500);gRecCloudOrder = 0;}#elif CLOSE_AND_OPENif (gRecCloudOrder == 1){gOpenCloseCtrlFlag = gOpenCloseCtrlFlag + 1;// 范围限制if (gOpenCloseCtrlFlag >= 3){gOpenCloseCtrlFlag = 1;}}if (gRecCloudOrder == 1 && gOpenCloseCtrlFlag == 1){Med_Sg90_Spin(CLOSEANGLE);   // 舵机旋转关灯delay_ms(500);Med_Sg90_Spin(99);   // 舵机归零delay_ms(500);gRecCloudOrder = 0;}else if (gRecCloudOrder == 1 && gOpenCloseCtrlFlag == 2){Med_Sg90_Spin(OPENANGLE);   // 舵机旋转开灯delay_ms(500);Med_Sg90_Spin(99);   // 舵机归零delay_ms(500);gRecCloudOrder = 0;}#endif
}

六、PCB设计

本项目的第一版PCB已经设计完成,如有需要,可关注文末公众号,私信“远程开关灯PCB”获取,这里贴一下PCB的3D预览图。

PCB的3D预览图

七、优化方向

  • 未加入ESP8266连接异常检测程序。
  • 如果需要修改连接的WIFI,需要重新烧写程序。可以尝试使用HC-05来输入要连接的WIFI信息,如果小伙伴有其他好的办法,欢迎私信讨论或者评论区讨论。
  • PCB没有加入电源部分电路,后续考虑使用电池供电。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/98754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QA-LORA: QUANTIZATION-AWARE LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

本文是LLM系列文章&#xff0c;针对《QA-LORA: QUANTIZATION-AWARE LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》的翻译。 Qa-lora:大型语言模型的量化感知低秩自适应 摘要1 引言2 相关工作3 提出的方法4 实验5 结论 摘要 近年来&#xff0c;大型语言模型(llm)得到了迅速…

设置Mysql数据库开启远程连接

1、在服务器端开启远程访问 进入mysql数据库&#xff0c;然后输入下面两个命令&#xff1a; grant all privileges on *.* to root% identified by password; flush privileges;第一个*是数据库&#xff0c;可以改成允许访问的数据库名称 第二个* 是数据库的表名称&#xff…

react框架与vue框架的区别

React和Vue都是前端开发中常用的框架&#xff0c;它们有一些不同的特性和优点。下面是它们的主要区别&#xff1a; 数据流和数据绑定&#xff1a;React是一种单向数据流的框架&#xff0c;而Vue则是双向数据绑定的框架。这意味着在React中&#xff0c;数据从组件的state属性流…

光引擎、光模块、光器件之间的关系和区别

最近小编有收到一些用户问“光引擎、光模块、光器件之间的关系和区别&#xff1f;”&#xff0c;众所周知光通信技术一直在不断演进&#xff0c;为满足不断增长的数据传输需求提供了强大的解决方案。而光通信系统中&#xff0c;光引擎、光模块和光器件是关键的组成部分&#xf…

selenium-webdriver-Chrome新驱动地址(Chrome115及以上版本)

Chrome115、Chrome116、Chrome117&#xff0c;在旧的链接并没有 新地址&#xff1a;https://googlechromelabs.github.io/chrome-for-testing/ 参考学习链接&#xff08;我也是根据这个老师的链接学到的&#xff09;&#xff1a;https://www.cnblogs.com/wuxianfeng023/p/1765…

现代化战机之路:美国空军U-2侦察机基于Jenkins和k8s的CI/CD架构演进

▲ 点击上方"DevOps和k8s全栈技术"关注公众 华为北京研究所Q27大楼 随着技术的不断进步&#xff0c;军事领域也在积极采纳现代化工具来提高战备水平和效率。美国空军的U-2侦察机项目是一个鲜明的例子&#xff0c;它成功地借助Jenkins和Kubernetes&#xff08;k8s&…

蓝牙技术|Matter或能改变中国智能家居市场,蓝牙技术将得到进一步应用

近年来&#xff0c;智能家居开放协议标准Matter&#xff08;目前版本 1.1&#xff09;由连接标准联盟发布&#xff0c;该联盟是一个由数百家公司组成的全球性机构&#xff0c;旨在提供与物联网 (IoT) 相关的标准。例如&#xff0c;Matter 用于允许 Amazon Alexa、Apple Home、G…

Maven 仓库

目录 本地仓库 中央仓库 远程仓库 Maven 依赖搜索顺序 Maven 阿里云(Aliyun)仓库 gradle 配置指南 在 Maven 的术语中&#xff0c;仓库是一个位置&#xff08;place&#xff09;。 Maven 仓库是项目中依赖的第三方库&#xff0c;这个库所在的位置叫做仓库。 在 Maven 中…

ARM_汇编流水灯

ARM_汇编流水灯 .text .global _start _start: 设置GPIOE寄存器的时钟使能ldr r0,0x50000A28ldr r1,[r0] 从r0为起始地址的4字节数据取出存入r1orr r1,r1,#(0x01<<4) 第4位设置为1 表示开启时钟使能orr r1,r1,#(0x01<<5) 第5位设置为1 表示开启时钟使能str r1…

产品安全—CC标准 ISO/IEC 15408:2022

文章目录 1. 变化2. Part1 简介和一般模型3. Part2 安全功能组件4. Part3 安全保障组件5. Part4 评估方法和活动规范框架6. Part5 预定义的安全要求包7. 总结 1. 变化 增加了两个部分&#xff1a;评估方法和活动规范框架 & 预定义的安全要求包 术语已经过审查和更新&#…

关于 打开虚拟机出现“...由VMware产品创建,但该产品与此版VMwareWorkstateion不兼容,因此无法使用” 的解决方法

文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/133678951 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

Ubuntu 配置repo环境

一. 前言 下载Android源码的时候&#xff0c;自己的Ubuntu电脑需要初始化repo环境&#xff0c;这样子你就可以使用 repo init -u ssh: repo sync 等命令下载代码&#xff0c; 在工作中&#xff0c;一般公司的代码仓 git-repo 是固定的&#xff0c;首次就需要把repo的初…

校招时间紧很迷茫?校招机会怎么把握?没有项目简历怎么写?

校招分为秋招和春招&#xff0c;可以说校招是应届生零工作经验进入大厂的唯一机会。 现在十月份也是招聘的重要时间&#xff0c;很多公司的校招从十月份开始&#xff0c;现在秋招如果你没有好的offer&#xff0c;可以好好准备来年的春招&#xff0c;我们为学员准备了丰富的面试…

【1++的Linux】之文件(一)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的Linux】 文章目录 一&#xff0c;初识文件二&#xff0c;文件接口 一&#xff0c;初识文件 文件就是文件内容属性。因此对文件的操作无非就是对文件内容的操作和对文件属性的操作。 我们访问…

数据结构--》解锁数据结构中树与二叉树的奥秘(一)

数据结构中的树与二叉树&#xff0c;是在建立非线性数据结构方面极为重要的两个概念。它们不仅能够模拟出生活中各种实际问题的复杂关系&#xff0c;还常被用于实现搜索、排序、查找等算法&#xff0c;甚至成为一些大型软件和系统中的基础设施。 无论你是初学者还是进阶者&…

遥感数据与作物模型同化:遥感数据、PROSAIL模型、DSSAT模型、参数敏感性分析、数据同化算法、模型耦合

查看原文>>>遥感数据与作物模型同化实践技术应用 基于过程的作物生长模拟模型DSSAT是现代农业系统研究的有力工具&#xff0c;可以定量描述作物生长发育和产量形成过程及其与气候因子、土壤环境、品种类型和技术措施之间的关系&#xff0c;为不同条件下作物生长发育及…

【目标检测】大图包括标签切分,并转换成txt格式

前言 遥感图像比较大&#xff0c;通常需要切分成小块再进行训练&#xff0c;之前写过一篇关于大图裁切和拼接的文章【目标检测】图像裁剪/标签可视化/图像拼接处理脚本&#xff0c;不过当时的工作流是先将大图切分成小图&#xff0c;再在小图上进行标注&#xff0c;于是就不考…

CentOS 7 使用Docker

参考资料 Docker命令大全 黑马程序员docker实操教程 &#xff08;黑马讲的真的不错 容器与虚拟机 安装 yum install -y docker Docker服务命令 启动服务 systemctl start docker停止服务 systemctl stop docker重启服务 systemctl restart docker查看docker服务状态 syste…

kafka的请求处理机制

目录 前言&#xff1a; kafak是如何处理请求的&#xff1f; 控制请求与数据类请求 参考资料 前言&#xff1a; 无论是 Kafka 客户端还是 Broker 端&#xff0c;它们之间的交互都是通过“请求 / 响应”的方式完成的。比如&#xff0c;客户端会通过网络发送消息生产请求给 B…

GBU808-ASEMI小功率开关电源GBU808

编辑&#xff1a;ll GBU808-ASEMI小功率开关电源GBU808 型号&#xff1a;GBU808 品牌&#xff1a;ASEMI 芯片个数&#xff1a;4 封装&#xff1a;GBU-4 恢复时间&#xff1a;&#xff1e;50ns 工作温度&#xff1a;-55C~150C 浪涌电流&#xff1a;200A 正向电流&#…