STM32 ES8266上阿里云IOT MQTT实践【第七章】:ESP8266+MQTT上阿里云物联网平台实践

本教程详细介绍STM32开发板结合ESP8266模块,使用MQTT协议接入阿里云物联网平台的过程。从硬件配置到软件编程,包括DHT11温湿度传感器数据读取、ESP8266 AT指令调试、MQTT驱动移植、阿里云平台对接等,最终实现传感器数据上传及云端控制。

课程大纲

【第一章】:物联网简介(什么是物联网)
【第二章】:物联网十大应用场景
【第三章】:什么是MCU?
【第四章】:MCU的应用范围
【第五章】:我们要怎么入门MCU开发?
【第六章】:如何使用STM32Cube MX进行STM32的快速开发
【第七章】:ESP8266+MQTT上阿里云物联网平台实践(附源码)

STM32CubeMX AT指令实现MQTT协议并接入阿里云IOT平台 源码解析
优快云源代码下载
Github源代码下载

7. 实践:STM32使用ESP8266+MQTT上阿里云物联网平台实践

7.1 项目整体介绍
7.1.1 硬件资源
  • STM32F429IGT6开发板:核心
  • ST-Link下载器:下载程序用
  • USB转232串口线:串口通信,调试用
  • USB供电线:给开发板供电
  • DHT11温湿度模块:采集环境温湿度
  • ATK-ESP8266:联网上传数据

image-20200504195716268

7.1.2 软件资源
  • 串口调试助手(调试用)

image-20200504200038516

7.1.3 其它资源
  • STM32F429IGT6开发板原理图
  • DHT11温湿度传感器编程手册
  • ATK-ESP8266编程手册
  • ESP8266样例程序
  • 阿里云MQTT样例程序
7.2 新建工程
  • 选择通过选择MCU创建工程

image-20200504200445596

  • 选择芯片

image-20200504200612470

  • 建立成功

image-20200504200759484

7.3 基础工程配置
7.3.1 时钟配置
  • 高速时钟:选择外部晶振

image-20200507105624694

  • 高速时钟选择Crystal/Ceramic Resonator

在用cube配置时钟时,有下面两个选项
BYPASS Clock Source(旁路时钟源)
Crystal/Ceramic Resonator(晶体/陶瓷晶振)
下面来解释一下:
所谓HSE旁路时钟源,是指无需使用外部晶体时所需的芯片内部时钟驱动组件,直接从外界导入时钟信号。犹如芯片内部的驱动组件被旁路了。
外部晶体/陶瓷谐振器(HSE晶体)模式该时钟源是由外部无源晶体与MCU内部时钟驱动电路共同配合形成,有一定的启动时间,精度较高。

image-20200507105818756

  • 配置时钟为180MHz

image-20200507110045846

7.3.2 下载接口设置,设置为串行下载

image-20200507110151989

7.3.3 LED灯配置
  • 查看原理图

    LED_R——PH10 红灯

    LED_G——PH11 绿灯

    LED_B——PH12 蓝灯

    低电平有效,IO口要设置为推挽输出,上拉

image-20200507110347395

  • 工程配置

    • 选择引脚设置为GPIO_Ooutput

    • 配置标签 LED_R LED_G LED_B,方便工程直接调用

    • image-20200507110609310

    • 设置上下拉

    • image-20200507110918931

7.3.4 按键输入中断设置
  • 查看原理图
  • image-20200507111139923
  • 工程设置
  • image-20200507111415830
  • image-20200507111426161
  • image-20200507111439585
  • 设置中断等级,不能太高
  • image-20200507111507573
  • image-20200507111541714
7.3.5 调试串口设置
  • 查看开发板原理图,找到RS232

image-20200504202324034

  • 修改跳帽方向

image-20200504202114680

  • 串口参数配置

image-20200504202531112

  • 修改PD5为USART2_TX

image-20200504202632483

  • 修改PD6为USART2_RX

image-20200504202705527

  • PA2 PA3自动取消定义

image-20200504202843344

image-20200507112042637

7.3.6 ES8266串口设置

image-20200507112200157

7.3.7 DHT11数据采集IO

image-20200507112422533

7.3.8 工程概览

image-20200507112914628

7.4 生成并验证工程
7.4.1 生成工程
  • 点击Project Manager并设置工程

image-20200507112544875

  • 勾选上单独生成.c.h文件

image-20200504203158452

  • 点击生成工程

image-20200504203313895

  • 查看工程
    • 平台已经自动生成USART1、USART2驱动和GPIO驱动
    • 用户只用专注于程序逻辑代码,实现快速开发

image-20200507121925003

7.4.2 编写USART2串口调试验证代码
  • 在文件usart.h中引入标准库stdio.h(里面包含printf)
#include "stdio.h"
  • 在文件usart.c中添加printf重定向函数
// 重定向printf函数
int fputc(int ch,FILE *f)
{
   
   
    uint8_t temp[1]={
   
   ch};
    HAL_UART_Transmit(&huart2,temp,1,2);
	return 0;
}
  • 为了方便调试,在main.c中加入以下宏定义
#define USER_MAIN_DEBUG

#ifdef USER_MAIN_DEBUG
#define user_main_printf(format, ...) printf( format "\r\n",##__VA_ARGS__)
#define user_main_info(format, ...) printf("【main】info:" format "\r\n",##__VA_ARGS__)
#define user_main_debug(format, ...) printf("【main】debug:" format "\r\n",##__VA_ARGS__)
#define user_main_error(format, ...) printf("【main】error:" format "\r\n",##__VA_ARGS__)
#else
#define user_main_printf(format, ...)
#define user_main_info(format, ...)
#define user_main_debug(format, ...)
#define user_main_error(format, ...)
#endif
  • 在主函数while(1)循环中添加以下测试代码
user_main_debug("我是USART2测试代码!\n");
HAL_Delay(1000);
  • 设置下载后自动运行,编译运行,连接串口调试助手,观察现象

image-20200507123750198

image-20200507123848921

  • 测试成功!!
7.4.3 编写三色灯测试代码
  • 在main.c 主循环添加以下测试代码
//红灯亮,其它灭
HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_G_GPIO_Port,LED_G_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_B_GPIO_Port,LED_B_Pin,GPIO_PIN_SET);
HAL_Delay(500);
//绿灯亮,其它灭
HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_G_GPIO_Port,LED_G_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_B_GPIO_Port,LED_B_Pin,GPIO_PIN_SET);
HAL_Delay(
评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级D洋葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值