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

news2024/11/27 6:14:41

一、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

AT

AT+RST

AT+CWMODE=1

AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"

AT+CWJAP="你的收集热点名","你的手机热点密码"

AT+MQTTUSERCFG=0,1,"NULL","deviceName(设备名,经过阿里云生成工具生成后的)","生成后的密码",0,0,""

AT+MQTTCLIENTID=0,"ClientId(生成后的)"  //注意这里有个坑,需要每个逗号前价格\

AT+MQTTCONN=0,"连接域名(生成后的)",1883,1

AT+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    TXD
    gpio_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    RXD
    gpio_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.coloradmin.cn/o/1671213.html

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

相关文章

信号和槽基本概念

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、概述 二、信号的本质 三、槽的本质 一、概述 在 Qt 中&#xff0c;用户和控件的每次交互过程称…

服务器端口怎么开,服务器端口的开放通常涉及的五个关键步骤

服务器端口的开放通常涉及五个关键步骤&#xff0c;包括修改防火墙规则、配置服务器软件以及验证端口是否开放。下面将详细介绍每个步骤。 一、您需要确定需要开放的端口。常见的服务器应用程序端口包括HTTP&#xff08;80端口&#xff09;、HTTPS&#xff08;443端口&#xff…

掌握这个Jenkins插件,离测试开发又近一步!

Jenkins Pipeline是一种可编程的、可扩展的持续交付管道&#xff0c;允许您使用脚本来定义整个软件交付过程。 以下是使用Jenkins Pipeline创建和配置流水线的基本步骤。 Part 01. 创建一个Pipeline Job 在Jenkins中创建一个新的"Pipeline"类型的Job。 以下是在J…

李开复引领的零一万物开源了Yi-1.5模型,推出了6B、9B、34B三个不同规模的版本

零一万物&#xff0c;由李开复博士引领的AI 2.0公司&#xff0c;近期开源了其备受瞩目的Yi-1.5模型&#xff0c;这一举措再次彰显了公司在人工智能领域的创新实力与开放精神。Yi-1.5模型作为零一万物的重要技术成果&#xff0c;不仅代表了公司在大模型技术研发上的新高度&#…

下载npm I就包错解决方案

npm i xxxx -S --legacy-peer-deps 如果包错就执行以上命令

聚类分析 | 基于GA遗传算法优化kmeans聚类(Matlab)

聚类分析 | 基于GA遗传算法优化kmeans聚类&#xff08;Matlab&#xff09; 目录 聚类分析 | 基于GA遗传算法优化kmeans聚类&#xff08;Matlab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GA-kmeans聚类算法&#xff0c;通过GA遗传算法优化kmeans聚类&…

权力集中,效率提升,中心化模式的优势与挑战

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#x1f525;&#xff1a;探索设计模式的魅力&#xff1a;权力集中…

电子杂志制作攻略,轻松打造高质量数字出版物

随着数字科技的飞速发展&#xff0c;电子杂志作为一种新型的数字出版物&#xff0c;已经越来越受到人们的青睐。它不仅具有丰富的内容、多样的形式&#xff0c;还具有便捷的传播和阅读方式。如今&#xff0c;电子杂志已经逐渐成为企业、媒体和个人展示自身品牌、传播信息的重要…

AI 图像生成-环境配置

一、python环境安装 Windows安装Python&#xff08;图解&#xff09; 二、CUDA安装 CUDA安装教程&#xff08;超详细&#xff09;-CSDN博客 三、Git安装 git安装教程&#xff08;详细版本&#xff09;-CSDN博客 四、启动器安装 这里安装的是秋叶aaaki的安装包 【AI绘画…

自媒体从0-1起号全流程落地指南。(含工具)

下面开始进入主题&#xff1a; 一、持续涨粉的技巧 持续账号的账号通常是具备以下的几种特征 ①利他性&#xff1a;利他性的核心在于你向用户提供了什么&#xff1f; 可以透过逆向思维来体现&#xff0c;首先要明确目标人群及其需求&#xff0c;然后根据这些需求提供必要的…

日本站群服务器的优点以及适合该服务器的业务类型?

日本站群服务器的优点以及适合该服务器的业务类型? 日本站群服务器是指位于日本地区的多个网站共享同一台服务器的架构。这种服务器架构有着诸多优点&#xff0c;使其成为许多企业和网站管理员的首选。以下是日本站群服务器的优点以及适合该服务器的业务类型的分析&#xff1…

Day26 代码随想录打卡|栈与队列篇---有效的括号

题目&#xff08;leecode T20&#xff09;&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以…

Ubuntu系统搭建Tipask开源问答系统并发布公网分享好友远程访问

文章目录 1. 前言2.Tipask网站搭建2.1 Tipask网站下载和安装2.2 Tipask网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3 Cpolar稳定隧道&#xff08;本地设置&#xff09; 4. 公网访问测试5. 结语…

论文阅读记录--关于水文系统的传递函数

文章目录 J-schuite的文章,地下水系统的响应的功率谱分析--传递函数1. 什么是冲激响应函数与传递函数?2. 地下水流系统中传递函数的求解3. J-schuite文章中传递函数的复现J-schuite的文章,地下水系统的响应的功率谱分析–传递函数 1. 什么是冲激响应函数与传递函数? 在信号…

Java进阶10 IO流

Java进阶10 IO流 IO流就是数据传输。I为input的缩写&#xff0c;表示输入读取&#xff1b;O为out的缩写&#xff0c;表示输出写出。 一、IO流体系结构 ♥巧记区分tips&#xff1a;以Stream结尾的是字节流&#xff1b;以Reader、Writer结尾的都是字符流 二、字节输出流FileOu…

【Flutter】极光推送配置流程(VIVO/OPPO/荣耀厂商通道) 章三

前言 很高兴大家来看小编写的文章&#xff5e;&#xff5e; 继【Flutter】极光推送配置流程(极光通道/华为厂商/IOS) 章一 继【Flutter】极光推送配置流程(小米厂商通道) 章二 接下配置VIVO/OPPO/华为荣耀的厂商通道 所有截图来源于公司项目&#xff0c;所以会有大量马赛克&am…

【Linux 系统】多线程(生产者消费者模型、线程池、STL+智能指针与线程安全、读者写者问题)-- 详解

一、生产者消费者模型&#xff08;重点&#xff09; 如图&#xff0c;在生活中&#xff0c;学生就是消费者角色&#xff0c;工厂是真正的生产者角色&#xff0c;那么超市是什么呢&#xff1f;为什么需要超市&#xff1f;超市是交易场所。我们的家附近不一定有工厂&#xff0c;而…

子元素水平垂直都居中的实现

在网页布局中&#xff0c;如何实现子元素在水平方向和垂直方向居中&#xff0c;如图所示&#xff1a; 我知道的有这样的两种方式&#xff1a; 1.使用弹性布局实现 2.使用定位和平移实现 另外还有以下两种常用情况 3.窗口在整个屏幕水平垂直居中&#xff0c;还可以使用绝对定位…

COMSOL粗略估算计算时间

COMSOL粗略估算模型计算时间 针对反复修改调试的有限元模型&#xff0c;需要大致估算有限元模型的计算时间。经查阅&#xff0c;模型求解的自由度数和求解时间密切相关。 测试条件 测试模型为声-固耦合模型&#xff0c;电脑内存32G&#xff0c;CPU-i7-10700K&#xff0c;核显…

产品经理必备的API技术知识

很多小伙伴在刚成为产品经理的时候已经对自己手中的业务非常熟练了&#xff0c;但还是免不了听到开发的吐槽&#xff1a;“怎么排了这么多需求&#xff0c;这么多接口做都做不完&#xff01;”产品经理只能一脸懵的表示&#xff1a;接口&#xff1f;那是什么东西&#xff1f;我…