STM32使用Wifi连接阿里云

news2024/9/24 1:51:28

目录

1 实现功能

2 器件

3 AT指令

4 阿里云配置

4.1 打开阿里云

4.2 创建产品

4.3 添加设备

5 STM32配置

5.1 基础参数

5.2 功能定义

6 STM32代码

本文主要是记述一下,如何使用阿里云物联网平台,创建一个简单的远程控制小灯示例。

 完整工程:

https://download.csdn.net/download/qq_51458770/89550617

1 实现功能

STM32通过ESP8266模块,采用MQTT连接阿里云平台,之后可以和阿里云平台进行通信,可以向平台发布小灯的状态(开\关),也可以接收平台控制小灯的指令(开\关)。

2 器件

  • 单片机:STM32f103c8t6
  • Wif模块:ESP8266-01s
  • 外设: 小灯(STM32最小核心板自带PC13)

3 AT指令

这里只是简单看下wifi连接阿里云的AT指令,不需要过于纠结,可以往下继续看:

1 基础指令
1)重置wifi模块
AT+RST
    
2)设置模块为STA模式
AT+CWMODE=1
3)使模块连接上wifi
AT+CWJAP="WIFI名称","WIFI密码"
注意:若你的模块连接不上wifi,回复EEROR,首先先判断你的wifi是否是2.4G的频段,5G频道ESP8266不可用

4)检查IP地址,看看是否正确连上wifi
AT+CIFSR

5)设置时区为:中国早上八点
AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
到此,ESP8266的基本配置以及完成,下面就是MQTT协议连接上云平台的操作。
     
2 使用MQTT指令连接到云平台
需要先查看下阿里云的MQTT参数,在设备那里面有!!!
1) 设置MQTT的登陆用户名与密码
AT+MQTTUSERCFG=0,1,"NULL","username","passwd",0,0,""

2) 设置MQTT的ClientID
AT+MQTTCLIENTID=0,"clientId"
注意:在自己的clientId中,需要在每个逗号前面加一个\符号,串口数据才能正确发送识别,否则会一直回复EEROR

3)设置MQTT接入地址
AT+MQTTCONN=0,"mqttHostUrl",port,1
完成以上三步,设备就连接到了云平台(设备更新为在线)
3. 订阅平台消息(设备上传/接收,平台接收/下发)
订阅Topic是指在一个订阅服务中,用户可以选择关注或订阅感兴趣的话题或主题。
通过订阅Topic,用户可以更加精准地获取自己的内容,提高信息的质量和效率。

3 订阅Topic
1)订阅平台消息
AT+MQTTSUB=0,"subtopic",1
2)设备上报数据

AT+MQTTPUB=0,"pubtopic","data",0,0

Eg:
AT+RST    // 重置wifi模块
AT+CWMODE=1   // 
AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"   // 设置时区为:中国早上八点
AT+CWJAP="HONORL","12345Lz."   // 使模块连接上wifi

AT+MQTTUSERCFG=0,1,"NULL","ESP8266010&a1cRrS9qC4K","c9c3585b4841be49f67dc4da6d9e894074dd7fc956c429515bcf247a4bee7541",0,0,""   // 设置MQTT的登陆用户名与密码

AT+MQTTCLIENTID=0,"a1cRrS9qC4K.ESP8266010|securemode=2\,signmethod=hmacsha256\,timestamp=1720315990667|"   //  设置MQTT的ClientID

AT+MQTTCONN=0,"a1cRrS9qC4K.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1   //  设置MQTT接入地址

// AT+MQTTSUB=0,"topic",1
AT+MQTTSUB=0,"/sys/a1cRrS9qC4K/ESP8266010/thing/service/property/set",1   // 订阅平台消息

AT+MQTTPUB=0,"/sys/a1cRrS9qC4K/ESP8266010/thing/event/property/post","{params:{\"LightSwitch\":1}}",1,0   // 设备上报数据
// 注意发布部分写代码时容易出问题——格式问题

4 阿里云配置

4.1 打开阿里云

没有账号的话,注册登录下,之后搜索物联网平台,点击进去

4.2 创建产品

4.3 添加设备

也可以直接到设备列表创建设备

5 STM32配置

5.1 基础参数

关于wifi连接阿里云的一些参数,这些信息可以在MQTT连接参数里面找到:

需要先查看下阿里云的MQTT参数,在设备那里面有!!!
1) 设置MQTT的登陆用户名与密码
AT+MQTTUSERCFG=0,1,"NULL","username","passwd",0,0,""

2) 设置MQTT的ClientID
AT+MQTTCLIENTID=0,"clientId"
注意:在自己的clientId中,需要在每个逗号前面加一个\符号,串口数据才能正确发送识别,否则会一直回复EEROR

3)设置MQTT接入地址
AT+MQTTCONN=0,"mqttHostUrl",port,1
完成以上三步,设备就连接到了云平台(设备更新为在线)

至于要订阅和发布的主题可以到产品里面去找:

以下以物模型通信topic为例说明。

5.2 功能定义

为了能够接收来自WiFi的数据(小灯状态),并显示小灯状态,需要创建一下功能定义:

为了更好的区分控制功能和显示功能,我们这里再创建一个控制的功能定义,用于下发控制信息:

注意要发布上线,之后去设备那里就可以看到了

以上完成后就可以编写代码连接云平台并实现数据的收发。

6 STM32代码

6.1 main.c


#include "string.h"
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"

#define PubTopic "/sys/a1cRrS9qC4K/ESP8266010/thing/event/property/post"   // 发布
#define SubTopic "/sys/a1cRrS9qC4K/ESP8266010/thing/service/property/set"  // 订阅

/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
int main()
{
	char buf[256];
	int buf_len;
	
	SysTick_Init(72);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
	LED_Init();
	USART1_Init(115200);               // 串口波特率115200
	GPIO_ResetBits(LED_PORT,LED_PIN);	 //LED=0 亮
	delay_ms(1000);				           	 // 延迟
	
	printf("AT\r\n");									 // 第一步		AT
	delay_ms(2000);										 // 延迟

	printf("AT+GMR\r\n");							 // 第一步		版本号
	delay_ms(2000);										 // 延迟
	
	printf("AT+CWJAP=\"%s\",\"%s\"\r\n", "HONORL", "12345Lz.");		// 第四步 wifi热点
	
	delay_ms(5000);					//延迟
	delay_ms(5000);					//延迟
	delay_ms(5000);					//延迟	
	delay_ms(5000);					//延迟

	GPIO_SetBits(LED_PORT,LED_PIN);		// LED=1	灭

	printf("AT+CIPSNTPCFG=1,8,\"ntp1.aliyun.com\"\r\n");		// 第三步
	delay_ms(3000);					//延迟

	printf("AT+MQTTUSERCFG=0,1,\"NULL\",\"ESP8266010&a1cRrS9qC4K\",\"c9c3585b4841be49f67dc4da6d9e894074dd7fc956c429515bcf247a4bee7541\",0,0,\"\"\r\n");		//第五步
	delay_ms(3000);					//延迟			

	printf("AT+MQTTCLIENTID=0,\"a1cRrS9qC4K.ESP8266010|securemode=2\\,signmethod=hmacsha256\\,timestamp=1720315990667|\"\r\n");		//第六步
	delay_ms(3000);					//延迟	
	
	printf("AT+MQTTCONN=0,\"a1cRrS9qC4K.iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883,1\r\n");		// 第七步
	delay_ms(3000);					//延迟
	GPIO_ResetBits(LED_PORT,LED_PIN);	//LED=0 亮
	//连接阿里云,让设备在线
	//---------------------------------------------------------
	//订阅发布指令
	// printf("AT+MQTTSUB=0,%s,1\r\n",SubTopic);		//订阅指令
	printf("AT+MQTTSUB=0,\"%s\",1\r\n", "/sys/a1cRrS9qC4K/ESP8266010/thing/service/property/set");		//订阅指令
	delay_ms(5000);			//延迟
	GPIO_SetBits(LED_PORT,LED_PIN);		//LED=1	灭
	// 发布命令——测试使用
	printf("AT+MQTTPUB=0,\"/sys/a1cRrS9qC4K/ESP8266010/thing/event/property/post\",\"{\\\"test\\\"}\",1,0\r\n");	
	
	delay_ms(3000);	
	printf("AT+MQTTPUB=0,\"%s\",\"%s\",1,0\r\n", "/sys/a1cRrS9qC4K/ESP8266010/thing/event/property/post", "{params:{LedState:1}}");		//发数据{"LED":1}

  // 发数据{"LED":0}
	delay_ms(5000);	
	printf("AT+MQTTPUB=0,\"%s\", {\"LedState\":0},1,0\r\n", PubTopic);
	
	GPIO_ResetBits(LED_PORT,LED_PIN);	//LED=0 亮
//---------------------------------------------------------	
	while(1)
	{
		if(USART_RX_STA&0x8000) // 判断接收到完整的字符串  完成
		{					   			
				
				if(strstr((const char*)USART_RX_BUF,"on"))//判断阿里云发下来的数据里是否有on
				{
						GPIO_ResetBits(LED_PORT,LED_PIN);	//LED=0 亮
				}
				if(strstr((const char*)USART_RX_BUF,"off"))//判断阿里云发下来的数据里是否有off
				{
						GPIO_SetBits(LED_PORT,LED_PIN);		//LED=1	灭
				}	

				memset(USART_RX_BUF,0,600);         //将接收区清0
				USART_RX_STA=0;
		}
	}
}

完整工程:

https://download.csdn.net/download/qq_51458770/89550617

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

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

相关文章

BurpSuit的intruder模块结果进行筛选和导出

文章目录 一、搭建的测试网站第一步 先抓去数据包,查看数据包第二步 可以控制返回信息一条一条的显示第三步 使用intrude模块进行遍历,每次只显示一条用户信息第四步 配置过滤规则第五步 查看结果显示第六步 进行数据导出第七步 查看导出的表格二、实际项目中使用免责声明一、…

PCIe驱动开发(3)— 驱动设备文件的创建与操作

PCIe驱动开发(3)— 驱动设备文件的创建与操作 一、前言 在 Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为“/dev/xxx” (xxx 是具体的驱动文件名字)的文件进行相应的操作即…

Azure Repos 仓库管理

从远端仓库克隆到本地 前提:本地要安装git,并且登录了账户 1.在要放这个远程仓库的路径下,打git 然后 git clone https://.. 如果要登录验证,那就验证下,点 generate git credentials,复制password 克隆完后,cd 到克隆的路径, 可以用 git branch -a //查看分…

Spring Cloud环境搭建

🎥 个人主页:Dikz12🔥个人专栏:Spring学习之路📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 1. 开发环境安装 1.1 安装JDK ​1.2 安装MySQL 2. 案列介绍 2.1 …

Linux 命令 —— top命令(查看进程资源占用)

文章目录 top 命令显示信息介绍top 命令使用 top 命令显示信息介绍 top 命令是 Linux/Unix 系统中常用的进程监控工具,可以实时动态显示系统中各个进程的资源占用情况,包括CPU、内存等。 进入 linux 系统,直接输入 top,回车&…

全网超详细Redis主从部署(附出现bug原因)

主从部署 整体架构图 需要再建两个CentOs7,过程重复单机部署 http://t.csdnimg.cn/zkpBE http://t.csdnimg.cn/lUU5gLinux环境下配置redis 查看自己ip地址命令 ifconfig 192.168.187.137 进入redis所在目录 cd /opt/software/redis cd redis-stable 进入配置文件 vim redi…

书生大模型第三关-Git基础

1.任务1: 破冰活动:自我介绍 目标: 每位参与者提交一份自我介绍。 提交地址:https://github.com/InternLM/Tutorial 的 camp3 分支~ 行动: 首先Fork项目到自己Repo中,然后git clone在本地上 然后创建一个…

liunx面试题目

如何看当前Linux系统有几颗物理CPU和每颗CPU的核数? 查看物理cup: cat /proc/cpuinfo|grep -c ‘physical id’ 查看每颗cup核数 cat /proc/cpuinfo|grep -c ‘processor’ 若希望自动实现软件包的更新,可以使用yum-cron并启动该服务 yum -y …

【java计算机毕设】农产品仓库管理系统系统MySQL ssm JSP maven项目代码+文档 前后端一体 暑假作业

目录 1项目功能 2项目介绍 3项目地址 1项目功能 【java计算机毕设】农产品仓库管理系统系统MySQL ssm vue maven项目代码文档 前后端一体 暑假作业 2项目介绍 系统功能: 农产品仓库管理包括管理员、用户俩种角色。 管理员功能包括个人中心模块用于修改个人信息和…

60K起?“软件安全岗”比“网络安全岗”薪资高在哪里?

在网络世界的江湖中,“软件安全”与“网络安全”这两大“武林高手”都肩负着守护数字领域和平的重任。不过,眼尖的小伙伴们可能发现了,软件安全岗位的薪资待遇往往比网络安全岗位要丰厚那么一些,这到底是为啥呢?今天&a…

【AI绘画教程】Stable Diffusion 1.5 vs 2

在本文中,我们将总结稳定扩散 1 与稳定扩散 2 辩论中的所有要点。我们将在第一部分中查看这些差异存在的实际原因,但如果您想直接了解实际差异,您可以跳下否定提示部分。让我们开始吧! Stable Diffusion 2.1 发布与1.5相比,2.1旨在解决2.0的许多相对缺点。本文的内容与理解…

数字化转型“破局”:低代码开发平台如何缩短开发交付周期,提升效率

日新月异的数字时代,各行业正经历着前所未有的变革与转型。随着大数据、云计算、人工智能等技术的不断成熟与融合,数字化转型的步伐愈发坚定而迅速,成为企业转型升级、实现可持续发展的必由之路。然而,传统的软件开发模式受限于高…

35.UART(通用异步收发传输器)-RS232(2)

(1)RS232接收模块visio框图: (2)接收模块Verilog代码编写: /* 常见波特率: 4800、9600、14400、115200 在系统时钟为50MHz时,对应计数为: (1/4800) * 10^9 /20 -1 10416 …

如何防止漏洞攻击

随着信息技术的日新月异,企业在日常运营中对网络和数字化系统的依赖日益加深。然而,这种高度依赖也伴随着网络安全威胁的急剧增长,对企业的核心资产与数据构成了严峻挑战。为了有效捍卫企业利益,确保运营无忧,积极构建…

Monaco 使用 DocumentHighlightProvider

Monaco 中有一个文字高亮的功能,就是选中一个单词,会高亮文字文档中所有出现该单词的位置,效果如下: Monaco 默认就有这个功能,可以根据具体需求进行定制。通过 registerDocumentHighlightProvider 进行注册 实现 pro…

无人机之图传距离的决定因素

一、发射功率:图传设备的发射功率越大,信号能够传播的距离就越远 二、工作频段:不同频段具有不同的传播特性,一些频段在相同条件下可能具有更远的传输距离。 三、天线性能:优质的天线可以增强信号的发送和接收能力&a…

9.11和9.9哪个数更大?所有模型测试

目录 通义千问2.5 通义千问2_0.5b kimi 智谱清言 ​编辑讯飞星火 秘塔搜索 文言一心 豆包 腾讯元宝 海螺AI ChatGPT 3.5 Gemini 1.0 通义千问72B Claude-3 天工AI 参赛选手:讯飞星火、文言一心、腾讯元宝、海螺AI、通义千问72B、天工AI、 通义千问2…

实验七:图像的复原处理

一、实验目的 熟悉常见的噪声及其概率密度函数。熟悉在实际应用中比较重要的图像复原技术,会对退化图像进行复原处理。二、实验原理 1. 图像复原技术,说简单点,同图像增强那样,是为了以某种预定义的方式来改进图像。在具体操作过程中用流程图表示,其过程就如下面所示: 2…

git查看历史记录方法

0 Preface/Foreword 1 git reflog git reflog显示所有的操作,不仅仅是commit,也包括git pull,checout等动作。 1.1 查看本地和远程仓库的区别 远程仓库:中间的提交是直接在web端编辑 远程仓库:最新的提交是在本地编…

在golang中Sprintf和Printf 的区别

最近一直在学习golang这个编程语言,我们这里做一个笔记就是 Sprintf和Printf 的区别 fmt.Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。 fmt.Printf 根据格式化参数生成格式化的字符串并写入标准输出。由上面就可以知道,fmt.Sprintf返回的…