当前位置: 首页 > news >正文

STM32使用Wifi连接阿里云

目录

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+RST2)设置模块为STA模式
AT+CWMODE=1
3)使模块连接上wifi
AT+CWJAP="WIFI名称","WIFI密码"
注意:若你的模块连接不上wifi,回复EEROR,首先先判断你的wifi是否是2.4G的频段,5G频道ESP8266不可用4)检查IP地址,看看是否正确连上wifi
AT+CIFSR5)设置时区为:中国早上八点
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中,需要在每个逗号前面加一个\符号,串口数据才能正确发送识别,否则会一直回复EEROR3)设置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,0Eg:
AT+RST    // 重置wifi模块
AT+CWMODE=1   // 
AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"   // 设置时区为:中国早上八点
AT+CWJAP="HONORL","12345Lz."   // 使模块连接上wifiAT+MQTTUSERCFG=0,1,"NULL","ESP8266010&a1cRrS9qC4K","c9c3585b4841be49f67dc4da6d9e894074dd7fc956c429515bcf247a4bee7541",0,0,""   // 设置MQTT的登陆用户名与密码AT+MQTTCLIENTID=0,"a1cRrS9qC4K.ESP8266010|securemode=2\,signmethod=hmacsha256\,timestamp=1720315990667|"   //  设置MQTT的ClientIDAT+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中,需要在每个逗号前面加一个\符号,串口数据才能正确发送识别,否则会一直回复EEROR3)设置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);               // 串口波特率115200GPIO_ResetBits(LED_PORT,LED_PIN);	 //LED=0 亮delay_ms(1000);				           	 // 延迟printf("AT\r\n");									 // 第一步		ATdelay_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);         //将接收区清0USART_RX_STA=0;}}
}

完整工程:

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

相关文章:

STM32使用Wifi连接阿里云

目录 1 实现功能 2 器件 3 AT指令 4 阿里云配置 4.1 打开阿里云 4.2 创建产品 4.3 添加设备 5 STM32配置 5.1 基础参数 5.2 功能定义 6 STM32代码 本文主要是记述一下,如何使用阿里云物联网平台,创建一个简单的远程控制小灯示例。 完整工程&a…...

2024.7.16日 最新版 docker cuda container tookit下载!

nvidia官方指导 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html 其实就是这几个命令,但是有墙: curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/shar…...

打印室预约小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,附近打印店管理,文件打印管理,当前预约管理,预约历史管理,打印记录管理 开发系统:Windows 架构模式:SSM JD…...

Android音视频—OpenGL 与OpenGL ES简述,渲染视频到界面基本流程

文章目录 OpenGL 简述特点和功能主要组件OpenGL ES当前状态 OpenGL ES 在 Android 上进行视频帧渲染总体流程 OpenGL 简述 OpenGL(Open Graphics Library)是一个跨平台的、语言无关的应用程序编程接口(API),用于开发生…...

Vscode中Github copilot插件无法使用(出现感叹号)解决方案

1、击扩展或ctrl shift x ​​​​​​​ 2、搜索查询或翻找到Github compilot 3、点击插件并再左侧点击登录github 点击Sign up for a ... 4、跳转至github登录页,输入令牌完成登陆后返回VScode 5、插件可以正常使用...

Spring-cloud-openfeign-@FeignClient中的configuration属性

FeignClient注解中的configuration属性就是设置相关配置,但是这个属性写的非常的不好,而且在它的注释中也没有写全,所以本文记录一下,当我们的代码如下时: FeignClient(name "xxx", configuration Abc.cl…...

实验七:图像的复原处理

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

前端面试题日常练-day94 【Less】

题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末 在Less中,以下哪个功能用于处理文本换行? a) wrap-text() b) word-wrap() c) text-wrap() d) line-break() Less中的Variables是用来做什么的? a) 控制元素位置 b)…...

c 语言 中 是否有 unsigned 安;这种写法?

你提到的结构体定义使用了unsigned这种没有完全限定类型的写法,在C语言中,这种语法通常会被解释为unsigned int。这是因为在C语言中,unsigned是unsigned int的缩写形式。 下面是你的结构体定义以及解释: struct exec {unsigned …...

Hive第三天

1. 后台启动HIVE的JDBC连接 0 表示标准输入 1 表示标准输出 2 表示标准错误输出 nohup 表示挂起 最后的 & 表示 后台启动 nohup hive -service hiveserver2 > /usr/local/soft/hive-3.1.2/log/hiveserver2.log 2>&1 & jps 查看 Runj…...

【C++】模版初阶以及STL的简介

个人主页~ 模版及STL 一、模版初阶1、泛型编程2、函数模版(1)概念(2)函数模版格式(3)函数模版的原理(4)函数模版的实例化①显式实例化②隐式实例化 (5)模版参…...

51单片机学习(4)

一、串口通信 1.串口通信介绍 写完串口函数时进行模块化编程,模块化编程之后要对其进行注释,以便之后使用模块化函数,对模块化.c文件中的每一个函数进行注释。 注意:一个函数不能既在主函数又在中断函数中 模式1最常用&#xf…...

3D问界—MAYA制作铁丝栅栏(透明贴图法)

当然,如果想通过建立模型法来实现铁丝栅栏的效果,也不是不行,可以找一下栅栏建模教程。本篇文章主要是记录一下如何使用透明贴图来实现创建铁丝栅栏,主要应用于场景建模,比如游戏场景、建筑场景等大环境,不…...

编译器对C++23的支持程度

详见这里...

k8s核心操作_存储抽象_K8S中使用Secret功能来存储密码_使用免密拉取镜像_k8s核心实战总结---分布式云原生部署架构搭建033

注意在看的时候一定要把 dxxxx中的xxxx换成--o----c----k----e----r 然后我们再来看一个k8s中的secret的功能,这个功能 用来存储密码的,configMap是用来存配置的 比如我们有个pod,他的镜像,如果是需要密码的,那么 我们现在是从公共仓库拉取的,如果我们从私有仓库拉取,有密码…...

21集 ESP32-IDF开发教程-《MCU嵌入式AI开发笔记》

21集 ESP32-IDF开发教程-《MCU嵌入式AI开发笔记》 之前我们用了windows系统搭建了ESP-IDF的开发环境, 我们还是参考这个官方文档https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.1/esp32s3/get-started/index.html 同时我们也参考之前讲到的&#…...

《大数据基础》相关知识点及考点,例题

1.6大数据计算模式 1、MapReduce可以并行执行大规模数据处理任务,用于大规模数据集(大于1TB)的并行运算。MapReduce 极大地方便了分布式编程工作,它将复杂的、运行于大规模集群上的并行计算过程高度地抽象为两个函数一一Map和Redu…...

网络通信介绍

一、 简介 网络通信,简而言之,就是通过各种物理链路和协议,实现不同地理位置的计算机或其他电子设备之间信息交换的过程。这些信息可以是文本、图像、音频、视频等多种格式,通过网络传输至目标设备,从而实现远程通信、…...

16、Python之容器:元组与列表、推导式与生成式,差之毫厘谬以千里

引言 从上一篇文章开始了对Python中容器的介绍,已经对列表的简单使用做了一些介绍,今天这篇文章,打算首先简单介绍一下元组,同时比较一下元组、列表的异同,然后就列表、元组的一些比较实用的用法,做一些补…...

HTTP协议——请求头和请求体详情

HTTP协议-请求头和请求体 请求头 请求头(Request Header)是在HTTP协议中用于描述一个HTTP请求的元数据。它是客户端发送给服务器的一部分请求信息,包含了客户端的相关配置和要求。 请求头通常包含以下几个部分: 1. 请求方法(Req…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...