STM32使用ESP01S连接阿里云物联网平台

一、ESP01S烧录MQTT固件准备

首先准备好烧录工具,可以从官网上进行下载。

MQTT固件官网网址:AT固件汇总 | 安信可科技 (ai-thinker.com)

进去后如下图界面,向下翻找找到MQTT固件(1471)下载固件即可。

烧录工具光网地址:开发工具清单 | 安信可科技 (ai-thinker.com)

进去后如下图界面,找到烧录WIFI固件工具

二、ESP01S烧录MQTT固件操作

准备好usb转ttl硬件设备,记得把驱动下载上。

esp01s有8个引脚,分别为3.3v、RX、TX、EN、IO0、IO2、GND,我们在烧录固件是需要3.3v、RX、TX、IO0、GND这几个引脚,与usb转ttl接线方式如下图所示:

usb  to ttl

esp01s
RXTX
TXRX
3.33.3
GNDGND

另外根据esp01s手册下载固件时需要将IO0拉低电平,所以需要另外一根线将esp01s的IO0跟供电设备的GND连接,可以使用开发板的GND引脚。

连接好的实物图如下图所示,如果使用开发板的GND线,需给开发板通上电。

接下来通过usb连接到电脑上,打开烧写工具

直接点击ok

之后进入到如图界面

按照图进行操作

清楚成功后在按START进行下载。

到此为止烧录便成功了,我们打开串口工具进行测试是否烧录成功,连接上wifi

ATAT+RSTAT+CWMODE=1AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"AT+CWJAP="你的收集热点名","你的手机热点密码"AT+MQTTUSERCFG=0,1,"NULL","deviceName(设备名,经过阿里云生成工具生成后的)","生成后的密码",0,0,""AT+MQTTCLIENTID=0,"ClientId(生成后的)"  //注意这里有个坑,需要每个逗号前价格\AT+MQTTCONN=0,"连接域名(生成后的)",1883,1AT+MQTTSUB=0,"订阅",1

现在先使用前4条固定指令连接wifi,后面连接阿里云在具体讲解参数的来源

前四条指令执行完成后手机端可以看见esp01s是否连接成功。

三、生成阿里云物联网三元组参数

创建阿里云物联网平台产品设备,按照下图步骤设置

到此添加设备成功,接下来复制算元组创建连接参数

打开阿里云物理平台配置(没有的去网上搜搜下载即可)

将生成的连接域名、ClientId、Username、Password这四个参数复制下来,填到我上面写的指令里面即可。

此时还剩下订阅一个参数,按照下列步骤执行

此时按照上面步骤执行剩下的四个指令即可成功连接成功阿里云。

四、使用stm32进行连接

编写esp01s.c文件

#include "stm32f10x.h" 
#include "usart2.h"
#include <stdio.h>
#include <string.h>
#include "delay.h"
#include "esp01s.h"const char* WIFI ="你的wifi名";
const char* WIFIASSWORD="你的wifi密码";
const char* ClintID="ClientId(生成后的,注意每个逗号前加个\)";
const char* username="username(生成后的)";
const char* passwd="密码(生成后的)";
const char* Url="连接域名(生成后的)";
const char* pubtopic="发布";
const char* subtopic="订阅";int fputc(int ch,FILE *f) //printf重定向
{USART_SendData(USART2,(uint8_t)ch);while(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET);return ch;
}char esp_Init(void)
{memset(RECS,0,sizeof(RECS));printf("AT+RST\r\n");  //重启delay_ms(2000);printf("AT+CWMODE=1\r\n"); //Station模式delay_ms(1000);if(strcmp(RECS,"OK"))return 1;memset(RECS,0,sizeof(RECS));printf("AT+CIPSNTPCFG=1,8,\"ntp1.aliyun.com\"\r\n"); //阿里云云端时域和SNTP服务器delay_ms(20);if(strcmp(RECS,"OK"))return 2;memset(RECS,0,sizeof(RECS));printf("AT+CWJAP=\"%s\",\"%s\"\r\n",WIFI,WIFIASSWORD); //连接热点while(strcmp(RECS,"OK"));if(strcmp(RECS,"OK"))return 3;memset(RECS,0,sizeof(RECS));printf("AT+MQTTUSERCFG=0,1,\"NULL\",\"%s\",\"%s\",0,0,\"\"\r\n",username,passwd);//用户信息配置delay_ms(10000);if(strcmp(RECS,"OK"))return 4;memset(RECS,0,sizeof(RECS));printf("AT+MQTTCLIENTID=0,\"%s\"\r\n",ClintID);delay_ms(1000);if(strcmp(RECS,"OK"))return 5;memset(RECS,0,sizeof(RECS));printf("AT+MQTTCONN=0,\"%s\",1883,1\r\n",Url);delay_ms(1000);if(strcmp(RECS,"OK"))return 6;printf("AT+MQTTSUB=0,\"%s\",1\r\n",subtopic); //订阅消息delay_ms(500);if(strcmp(RECS,"OK"))return 7;memset(RECS,0,sizeof(RECS));return 0;
}

usart2.c文件

#include "stm32f10x.h"
#include "usart2.h"
#include "delay.h"
#include "esp01s.h"
#include <string.h>
#include <stdio.h>
#include "lcd.h"char RECS[250];
unsigned char i;
extern uint8_t keyAlliyun;/*
************************************************************
*    函数名称:    Usart2_Init
*
*    函数功能:    串口2初始化
*
*    入口参数:    baud:设定的波特率
*
*    返回参数:    无
*
*    说明:        TX-PA2        RX-PA3
************************************************************
*/
void Usart2_Init(unsigned int baud)
{GPIO_InitTypeDef gpio_initstruct;USART_InitTypeDef usart_initstruct;NVIC_InitTypeDef nvic_initstruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//PA2    TXDgpio_initstruct.GPIO_Mode = GPIO_Mode_AF_PP;gpio_initstruct.GPIO_Pin = GPIO_Pin_2;gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &gpio_initstruct);//PA3    RXDgpio_initstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;gpio_initstruct.GPIO_Pin = GPIO_Pin_3;gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &gpio_initstruct);usart_initstruct.USART_BaudRate = baud;usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;        //无硬件流控usart_initstruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                        //接收和发送usart_initstruct.USART_Parity = USART_Parity_No;                                    //无校验usart_initstruct.USART_StopBits = USART_StopBits_1;                                    //1位停止位usart_initstruct.USART_WordLength = USART_WordLength_8b;                            //8位数据位USART_Init(USART2, &usart_initstruct);  USART_Cmd(USART2, ENABLE);                                                            //使能串口USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);                                        //使能接收中断nvic_initstruct.NVIC_IRQChannel = USART2_IRQn;nvic_initstruct.NVIC_IRQChannelCmd = ENABLE;nvic_initstruct.NVIC_IRQChannelPreemptionPriority = 0;nvic_initstruct.NVIC_IRQChannelSubPriority = 0;NVIC_Init(&nvic_initstruct);}char *USART2_GetString(void)
{return RECS;
}void USART2_SendString(char *str)
{uint8_t stri = 0;while(str[stri] != '\0')USART_SendData(USART2,str[stri++]);
}void USART2_IRQHandler(void)
{   if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET) //接收中断{RECS[i++] = USART_ReceiveData(USART2);if((RECS[i-2] == '\r') | (RECS[i-1] == '\n')){RECS[i-2] = '\0';i = 0;CommandAnalyse();}}        
}

主函数里面初始化usart2,调用esp初始化函数便可连接wifi和阿里云平台。

感谢大家的观看,因为本人在学习过程中走了不少弯路,所以出一期文章供大家参考,之后抽时间做一期上传阿里云平台数据的攻略。

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

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

相关文章

Python自动化测试 | 如何使用Robot Framework进行自动化测试?

你还在手动测试&#xff1f;不妨了解一下更高效、准确且简单的测试方法——使用Python的Robot Framework进行自动化测试。 什么是Robot Framework&#xff1f; Robot Framework是一款开源的Python自动化测试框架&#xff0c;它基于关键字驱动的思想&#xff0c;具有易读、易扩…

我是如何免费抵御一个多月的 DDos/CC 攻击的?

今天明月给大家详细分享一下我的博客是如何免费抵御了长达一个多月的 DDos/CC 攻击的&#xff0c;在【现在 DDos/CC 攻击门槛低的可怕&#xff01;】一文里明月就说过现在 DDos/CC 攻击几乎是没有门槛的&#xff0c;任何一个老鼠屎在群里看到你的博客都可以轻松便捷的发动一次 …

鸿蒙开发接口Ability框架:【AbilityMonitor】

AbilityMonitor AbilityMonitor模块提供匹配满足指定条件的受监视能力对象的方法的能力&#xff0c;最近匹配的能力对象将保存在AbilityMonitor对象中。 说明&#xff1a; 本模块首批接口从API version 9 开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起…

【算法练级js+java】重复给定字符n次

题目 Repeats the given string n times.&#xff08;复制指定的字符串n次&#xff09; 期望结果 /** * Repeats the given string n times. * * repeat(‘, 3) * // > **’ * * repeat(‘abc’, 2) * // > ‘abcabc’ * * repeat(‘abc’, 0) * // > “” **/ 代码…

【superset】基于MySQL的BI数据分析可视化实战案例(已更新)

1.熟悉、梳理、总结下superset可视化分析实战案例知识体系,一直想探索有效可用的可视化分析方案,大多收费或不好用,这里,借此机会总结、更新下。 2.复杂度高,遇到并解决的问题较多,尝试了很多次。 3.欢迎批评指正,跪谢一键三连! 基于MySQL的BI数据分析可视化实战案例文…

picoCTF-Web Exploitation-Trickster

Description I found a web app that can help process images: PNG images only! 这应该是个上传漏洞了&#xff0c;十几年没用过了&#xff0c;不知道思路是不是一样的&#xff0c;以前的思路是通过上传漏洞想办法上传一个木马&#xff0c;拿到webshell&#xff0c;今天试试看…

[C++核心编程-09]----C++类和对象之继承

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

迅睿CMS中实现关键词搜索高亮

在迅睿CMS系统中实现关键词搜索高亮是提升用户体验和搜索效果的重要手段。当用户搜索某个关键词时&#xff0c;将搜索结果中的关键词高亮显示&#xff0c;可以帮助用户更快速地定位到所需信息。 关键词高亮的实现 在迅睿CMS中&#xff0c;你可以使用内置的dr_keyword_highlig…

使用npm script运行webpack

npm&#xff08;Node Package Manager&#xff09;是 Node.js 的包管理工具&#xff0c;用于安装、发布和管理 Node.js 包。 在安装node的时候&#xff0c;就默认安装了npm。 Npm Script 则是 Npm 内置的一个功能&#xff0c;允许在 package.json 文件里面使用 scripts 字段定…

C#之partial关键字

在C#中&#xff0c;partial关键字用于声明一个类、结构体、接口或方法的分部定义。这意味着可以将一个类或其他类型的定义分成多个部分&#xff0c;这些部分可以在同一个命名空间或程序集中的多个源文件中进行定义。当编译器编译这些部分时&#xff0c;会将它们合并成一个单独的…

机器学习面试篇

如何理解机器学习数据集的概念 数据集是机器学习的基础&#xff0c;它包括了用于训练和测试模型所需的数据。数据集通常以矩阵的形式存在&#xff0c;其中每一行代表一个样本&#xff08;或实例&#xff09;&#xff0c;每一列代表一个特征&#xff08;或属性&#xff09;。…

宝塔Linux面板5.9版本升级新版失败解决方法

下载地址&#xff1a;宝塔Linux面板5.9升级教程 宝塔5.9版本升级最新版宝塔失败&#xff0c;可以参考这份详细教程&#xff08;不断更新中&#xff09; 安装要求&#xff1a; Python版本&#xff1a; 2.6/2.7&#xff08;安装宝塔时会自动安装&#xff09; 内存&#xff1a;1…

k8s 使用Docker和Containerd对比分析

目录 k8s 使用Docker和Containerd对比分析 互动1&#xff1a;docker build构建的镜像和containerd镜像通用吗&#xff1f; 互动2&#xff1a;k8s1.24之前版本和1.24及1.24之后版本区别&#xff1f; k8s 使用Docker和Containerd对比分析 如果你使用Docker作为K8S容器运行时的…

Spring框架核心:揭秘Java厨房的智能烹饪艺术

前情回顾&#xff1a;Spring框架深度解析&#xff1a;打造你的Java应用梦工厂 六. 实现控制反转 6.1 描述如何在Spring中实现IoC 在Spring Town的厨房里&#xff0c;实现控制反转就像是将食材的采购和准备过程外包给了一个智能系统。这个系统知道每种食材的特性&#xff0c;也…

RabbitMQ(四种使用模式)

文章目录 1.Fanout&#xff08;广播模式&#xff09;1.基本介绍2.需求分析3.具体实现1.编写配置类 RabbitMQConfig.java2.编写生产者&#xff0c;发送消息到交换机 MQSender.java3.编写消费者&#xff0c;接受消息 MQReceiver.java4.控制层调用方法&#xff0c;发送信息到交换机…

Python中进程类Process的方法与属性的使用示例

一、示例代码&#xff1a; from multiprocessing import Process import time import osdef child_1(interval):print(子进程&#xff08;%s&#xff09;开始执行&#xff0c;父进程为&#xff08;%s&#xff09; % (os.getpid(), os.getppid()))t_start time.time()time.sle…

2025考研 | 北京师范大学计算机考研考情分析

北京师范大学&#xff08;Beijing Normal University&#xff09;简称“北师大”&#xff0c;由中华人民共和国教育部直属&#xff0c;中央直管副部级建制&#xff0c;位列“211工程”、“985工程”&#xff0c;入选国家“双一流”、“珠峰计划”、“2011计划”、“111计划”、…

BFS Ekoparty 2022 -- Linux Kernel Exploitation Challenge

前言 昨天一个师傅给了我一道 linux kernel pwn 题目&#xff0c;然后我看了感觉非常有意思&#xff0c;题目也不算难&#xff08;在看了作者的提示下&#xff09;&#xff0c;所以就花时间做了做&#xff0c;在这里简单记录一下。这个题是 BFS Lab 2022 年的一道招聘题&#…

泰迪智能科技携手新乡学院开展“泰迪智能双创工作室”共建交流会

为深化校企合作&#xff0c;实现应用型人才培养目标。5月8日&#xff0c;广东泰迪智能科技股份有限公司河南分公司市场总监张京瑞到访新乡学院数学与统计学院参观交流&#xff0c;数学与统计学院院长赵国喜、副院长皮磊、张秦&#xff0c;教研室主任许寿方、姚广出席本次交流会…

如何防止WordPress网站内容被抓取

最近在检查网站服务器的访问日志的时候&#xff0c;发现了大量来自同一个IP地址的的请求&#xff0c;用站长工具分析确认了我的网站内容确实是被他人的网站抓取了&#xff0c;我第一时间联系了对方网站的服务器提供商投诉了该网站&#xff0c;要求对方停止侵权行为&#xff0c;…