【完整流程】实现STM32+ESP8266+MQTT+阿里云+APP——【第二节-编写STM32程序初步实现ESP8266上云发布订阅消息】


🌟博主领域:嵌入式领域&人工智能&软件开发

前言:本节实现,硬件连接STM32与ESP8266,编写STM32程序通过at命令方式实现STM32+ESP8266与阿里云物联网平台发布订阅消息,本节最终实现初步的发布订阅消息(能够发布消息给阿里云物联网平台但无外设数据,能够订阅阿里云物联网平台发送的消息来开关LED灯)。

硬件连接:硬件连接STM32与ESP8266接线参考我的博文:接线-CSDN博客

串口通信程序:参考我的博文:【程序】USART串口通信接收数据(标准库带printf)-CSDN博客

目录

1.编写STM32程序通过AT命令实现发布消息

2.编写STM32程序通过AT命令实现订阅消息


1.编写STM32程序通过AT命令实现发布消息

首先,通过第一节,你应该明白阿里云的MQTT连接参数也就是三元素,会使用很多次,本节也会继续使用。而且上一节你也明白AT命令的格式了,本节会使用与上一节不太一样的AT命令格式,本节的AT命令格式更加简单易懂。

1.获取MQTT连接参数(阿里云三元素)。

本节可直接通过如下方式获取三元素:进入阿里云物联网平台,再点击设备,再点击查看,再点击设备信息,再点击MQTT连接参数点击查看,复制参数信息(参数包括:用户名、密码、clientId、连接域名、port)。以上参数会在后续编写AT命令时使用到。

 2.编写STM32程序AT命令来实现上云。

将第一步获取的MQTT连接参数(用户名、密码、clientId、连接域名、port)填写到如下AT命令格式处。如下七步实现设备上云(连接阿里云物联网平台),如下代码在main(void)里写入即可,亲测无误,可实现上云,需要注意在书写AT命令时注意以下两点:1."前面要加转义字符 。2.\前面要加转义字符。

int main(void)
{
...//省略无关代码/*** @brief	发送at指令,让ESP8266连接到阿里云,让设备在线* @ntoe	注意:   1."前面要加转义字符    2.\前面要加转义字符*///第一步,复位,只用一次  AT+RSTprintf("AT+RST\r\n");	Delay_ms(2000);	//第二步,模式,只用一次  AT+CWMODE=1printf("AT+CWMODE=1\r\n");	Delay_ms(3000);					//第三步  AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"printf("AT+CIPSNTPCFG=1,8,\"ntp1.aliyun.com\"\r\n");	Delay_ms(3000);					//第四步,连接wifi  AT+CWJAP="WiFi名字","WiFi密码"printf("AT+CWJAP=\"WiFi名字\",\"WiFi密码\"\r\n");	Delay_ms(5000);	//第五步  AT+MQTTUSERCFG=0,1,"NULL","用户名","密码",0,0,""printf("AT+MQTTUSERCFG=0,1,\"NULL\",\"用户名\",\"密码\r\n");Delay_ms(5000);				/* 第六步  AT+MQTTCLIENTID=0,"ClienId"   注意:clientId第二个参数注意每个逗号前加分隔符\  */printf("AT+MQTTCLIENTID=0,"ClienId" \r\n");Delay_ms(3000);	//第七步  AT+MQTTCONN=0,"连接域名",1883,1printf("AT+MQTTCONN=0,"连接域名",1883,1\r\n");Delay_ms(3000);	...//省略无关代码
}

实现效果如下:在设备处,可看到当前设备由离线转为在线状态,即证明设备连接到阿里云物联网平台成功。

3.  编写STM32程序AT命令来实现发布指令。

继续main函数里的第七步后面写第八步和第九步,通过AT命令来实现订阅发布消息,亲测无误,需要注意三点:1."前面要加转义字符。2.\前面要加转义字符。3.标识符前后是三个\,如 \\\"标识符\\\"。

还需要注意,此处的两个指令, 订阅指令  AT+MQTTSUB=0,"topic",1  与发布指令AT+MQTTPUB=0,"topic","AJson格式内容",1,0    以上两个指令与第一节的书写格式一致,此处不再重复,忘记的童鞋请回到第一节获取你的订阅与发布指令。

需要注意,此处的订阅消息指令实际上并没有实现,但是先写上去便于后面使用并实现订阅消息。

int main(void)
{
...//省略无关代码/*** @brief       订阅发布指令* @ntoe      AT+MQTTSUB=0,"topic",1					//订阅指令*			  AT+MQTTPUB=0,"topic","AJson格式内容",1,0	//发布指令*				注意:1."前面要加转义字符    2.\前面要加转义字符  3.标识符前后是三个\,如 \\\"标识符\\\"*///第八步,订阅指令printf("AT+MQTTSUB=0,"写成你自己的"\r\n");		Delay_ms(5000);			//延迟//第九步,发json数据   {"标识符":1}printf("AT+MQTTPUB=0,"写成你自己的"r\n");		Delay_ms(5000);			//延迟...//省略无关代码
}

实现效果如下:在监控运维处点击查看日志服务,可看到设备发布到阿里云物联网平台之间的消息,即实现了编写STM32程序AT命令来实现发布指令。

2.编写STM32程序通过AT命令实现订阅消息

在main函数中的while循环中写入如下代码,需要注意需要配置好串口通信程序(见我的博客【程序】USART串口通信接收数据(标准库带printf)-CSDN博客)。

...//省略无关代码
while(1){	
//---------------------------------------------------------
/*** @brief       订阅消息,判断阿里云发下来的json数据里是否有:0}与:1}* @ntoe      */		if(USART_RX_STA&0x8000)//判断接收到完整的字符串  完成{					   			if(strstr((const char*)USART_RX_BUF,":1}"))//判断阿里云发下来的json数据里是否有:1}{led1_on();	//LED=1 亮}if(strstr((const char*)USART_RX_BUF,":0}"))//判断阿里云发下来的json数据里是否有:0}{led1_off();	//LED=1	灭}	memset(USART_RX_BUF,0,600);         //将接收区清0USART_RX_STA=0;//标志位置0,退出if判断}	...//省略无关代码
}	

需要注意,判断阿里云发下来的json数据里是否有:0}与:1},此处的:0}与:1}是在第一节出现过的,在第一节MQTT.fx测试订阅消息时候,通过MQTT.fx得到订阅消息时的回传消息,中有{“LED”:0}与{“LED”:1},通过这来判断阿里云发下来的json数据里是否有:0}与:1}

最终实现的效果是,点击进入监控运维,点击在线调试,可以看到实时的日志,设备可发布消息到阿里云物联网平台,设备可订阅阿里云物联网平台消息来控制LED灯的开关。

🌟个人主页:阿齐Archie

 🌟个人vx公主呺:阿齐Archie

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

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

相关文章

uni-ui 版本升级提示做个记录

appUpdate.js var _maskView, _contentView, _downloadTask, _loadingProgress, _screenHeight, _screenWidth, _config { forceUpgrade: false, titleText: "版本更新", content: "", contentAlign: "left",…

编程笔记 html5cssjs 027 HTML输入属性(1/2)

[TOC](编程笔记 html5&css&js 027 HTML输入属性(1/2)) <input>元素除了type属性表示输入类型&#xff0c;后面还跟上其他属性&#xff0c;叫输入属性。 value 属性 value 属性规定输入字段的初始值&#xff1a; <form action"">First name:<…

2024年AMC8竞赛真题模拟比赛做一做(25题40分钟,含答案)

这两天陆续有家长朋友问我是否有2024年AMC8比赛的模拟题&#xff0c;有一些家长是想通过做模拟题来检查孩子的学习和备考情况&#xff0c;另外一些家长式准备“谋定而后动”&#xff0c;想让孩子先做一做&#xff0c;看看难不难&#xff0c;如果还可以再报名2024年的AMC8竞赛。…

芯课堂 | LVG免费开源GUI图形库

概述 本文介绍目前LVGL的应用小知识&#xff0c;希望对采用MCU设计UI界面的用户有所启发&#xff0c;开发出界面更友好的消费品或者工业产品&#xff0c;造福大众。 01.LVGL系统架构 LVGL系统框架 应用程序创建GUI并处理特定任务的应用程序。 LVGL本身是一个图形库。我们的…

Python Selenium如何下载网页中的图片到本地?(Base64编码的图片下载)

前言&#xff1a; 在网页上&#xff0c;图片有时会以Base64编码的形式嵌入在HTML中&#xff0c;而不是作为单独的文件提供。这种方式的优点是可以减少HTTP请求的数量&#xff0c;因为图片数据直接包含在HTML中&#xff0c;不需要额外的请求来获取图片文件。这对于小图片…

【TC3xx芯片】TC3xx芯片的GTM模块详解

目录 前言 正文 1.GTM模块功能概述 1.1 GTM具体功能 1.2 GTM架构 2. GTM模块输入时钟 2.1.fGTM的值怎么计算 3. CMU 3.1 CMU功能 3.2 CMU时钟的计算 3..2.1 CLS0_CLK怎么计算 3.2.1 GTM Global Clock时钟计算 3.2.2 分频时钟的计算 4. CCM 4.1 CCM功能 4.2 CCM…

SpringMVC-视图

SpringMVC中的视图实现了View接口&#xff0c;作用是渲染数据&#xff0c;将Model中的数据展示给用户。render是渲染方法&#xff0c;可以看到渲染的视图是一个View类型的对象。 SpringMVC视图的种类有很多&#xff0c;默认有转发视图和重定向视图。 如果配置了Thymeleaf视图解…

使用Docker方式安装Artifactory

1、安装前环境准备 首先要关闭防火墙&#xff0c;关闭Selinux&#xff0c;准备好安装好的docker。以下安装版本&#xff1a;7.19.10 ##关闭防火墙&#xff0c;并设置开机自关闭 systemctl stop firewalld.service systemctl disable firewalld.service ##查看防火墙状态 sy…

Zookeeper相关问题及答案(2024)

1、ZooKeeper是什么&#xff1f;它的主要用途是什么&#xff1f; ZooKeeper 是一个由 Apache 预先开发和维护的开源服务器&#xff0c;用于协调分布式应用程序。它是一个集中式服务&#xff0c;为分布式应用提供一致性保障&#xff0c;配置管理&#xff0c;命名&#xff0c;同…

SpringCloud Alibaba之Nacos配置中心配置详解

目录 Nacos配置中心数据模型Nacos配置文件加载Nacos配置 Nacos配置中心数据模型 Nacos 数据模型 Key 由三元组唯一确定&#xff0c;三元组分别是Namespace、Group、DataId&#xff0c;Namespace默认是公共命名空间&#xff08;public&#xff09;&#xff0c;分组默认是 DEFAUL…

『年度总结』逐梦编程之始:我的2023学习回顾与展望

目录 前言 我与Python 我与C语言 第一篇正式博客&#xff1a; 第二篇正式博客&#xff08;扫雷&#xff09;&#xff1a; 指针学习笔记: C语言学习笔记&#xff1a; 我与数据结构&#xff1a; yuan 这篇博客&#xff0c;我将回顾2023年编程之旅的起点&#xff0c;同时展…

SpringCloud Alibaba

服务治理Spring Cloud落地技术Spring Cloud Alibaba落地技术服务注册与发现Eureka、ZookeeperNacos服务调用Feign、OpenFeignDubbo&#xff08;HSF&#xff09;负载均衡RibbonRibbon网关SpringCloud ZuulGetway服务容错HystrixSentinel分布式调度--&#xff08;替代方案&#x…

Flowable中6种部署方式

1. addClasspathResource src/main/resources/processes/LeaveProcess.bpmn20.xml Deployment deploy repositoryService.createDeployment().name("请假审批").addClasspathResource("processes/LeaveProcess.bpmn20.xml").deploy();2. addInputStream…

pandas.DataFrame() 数据自动写入Excel

DataFrame 表格数据格式 &#xff1b; to_excel 写入Excel数据&#xff1b; read_excel 阅读 Excel数据函数 import pandas as pd#df2 pd.DataFrame({neme: [zhangsan, lisi, 3]}) df1 pd.DataFrame({One: [1, 2, 3],name: [zhangsan, lisi, 3]})#One是列明&#xff0c;123是…

vue3.0与vue2.0-prop

在Vue 3.0中&#xff0c;与Vue 2.0相比&#xff0c;有一些改变和新的特性涉及到props。 Composition API: Vue 3.0引入了Composition API&#xff0c;它提供了一种新的方式来组织和重用组件的逻辑。在Composition API中&#xff0c;props可以通过使用setup函数中的props参数来…

分类预测 | Matlab实现RP-CNN-LSTM-Attention递归图优化卷积长短期记忆神经网络注意力机制的数据分类预测【24年新算法】

分类预测 | Matlab实现RP-CNN-LSTM-Attention递归图优化卷积长短期记忆神经网络注意力机制的数据分类预测【24年新算法】 目录 分类预测 | Matlab实现RP-CNN-LSTM-Attention递归图优化卷积长短期记忆神经网络注意力机制的数据分类预测【24年新算法】分类效果基本描述模型描述程…

计算机基础面试题 |09.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

面试算法89:房屋偷盗

题目 输入一个数组表示某条街道上的一排房屋内财产的数量。如果这条街道上相邻的两幢房屋被盗就会自动触发报警系统。请计算小偷在这条街道上最多能偷取到多少财产。例如&#xff0c;街道上5幢房屋内的财产用数组[2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;3]表示…

http 503 错误

503错误是一种HTTP状态码&#xff0c;表示你请求的网站或服务暂时不可用&#xff0c;通常是因为服务器过载或维护&#xff0c;你可能会看到类似这样的提示&#xff1a;503 Service Unavailable、503 Service Temporarily Unavailable、HTTP Server Error 503、HTTP Error 503 I…