ESP8266+STM32+阿里云保姆级教程(AT指令+MQTT)
在物联网开发中,ESP8266 是一款流行的 Wi-Fi 模块,它可以通过 AT 指令与 STM32 微控制器进行通信,并通过 MQTT 协议将数据上传到阿里云 IoT 平台。本篇文章将手把手带你完成 ESP8266 和 STM32 的集成开发,并详细介绍如何使用 AT 指令控制 ESP8266,建立与阿里云的 MQTT 连接。
1. 前期准备
1.1 硬件准备
1.2 软件准备
2. ESP8266 基础配置
2.1 ESP8266 与 STM32 硬件连接
ESP8266 使用 UART 接口与 STM32 通信。连接方式如下:
ESP8266 引脚 | STM32 引脚 |
---|---|
VCC | 3.3V |
GND | GND |
TX | PA10(RX) |
RX | PA9(TX) |
EN | 3.3V |
请确保 ESP8266 的电源稳定,建议使用 3.3V 稳压电源供电。
2.2 ESP8266 AT 指令测试
在将 ESP8266 与 STM32 集成之前,先使用串口调试工具测试 AT 指令是否正常工作。
-
使用 USB 转串口模块连接 ESP8266,并打开串口调试工具。
-
设置波特率为
115200
,发送AT
指令,ESP8266 应返回OK
。AT OK
-
连接 Wi-Fi 路由器,使用以下指令:
AT+CWMODE=1 // 设置为客户端模式 OK AT+CWJAP="SSID","PASSWORD" // 连接到Wi-Fi网络 OK
-
检查是否成功连接 Wi-Fi:
AT+CIFSR +CIFSR:STAIP,"192.168.1.xxx"
这表明 ESP8266 成功连接了 Wi-Fi,下一步可以与 STM32 进行集成开发。
3. STM32 配置
3.1 STM32CubeMX 配置
-
创建新项目,选择 STM32F103C8T6 芯片。
-
配置 UART 接口,用于与 ESP8266 通信。
- 设置 USART1 的波特率为
115200
,模式为 异步模式,引脚配置为 PA9(TX)和 PA10(RX)。 -
生成代码 并导入 Keil5 进行开发。
3.2 UART 数据接收与发送代码
在 STM32 中,使用 UART 进行 AT 指令的发送和接收。首先,需要编写 UART 数据收发的相关代码。
#include "stm32f1xx_hal.h"
#include <string.h>
UART_HandleTypeDef huart1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
uint8_t rxBuffer[128];
uint8_t txBuffer[128];
// 发送AT指令
void Send_AT_Command(char* command) {
HAL_UART_Transmit(&huart1, (uint8_t*)command, strlen(command), HAL_MAX_DELAY);
}
// 接收ESP8266数据
void Receive_Response() {
HAL_UART_Receive(&huart1, rxBuffer, sizeof(rxBuffer), HAL_MAX_DELAY);
printf("Received: %s\r\n", rxBuffer);
}
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
// 发送 AT 测试指令
Send_AT_Command("AT\r\n");
Receive_Response();
// 连接WiFi
Send_AT_Command("AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n");
Receive_Response();
// 循环执行
while (1) {
}
}
static void MX_USART1_UART_Init(void) {
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart1);
}
3.3 配置 MQTT 连接
ESP8266 将通过 MQTT 协议与阿里云 IoT 进行通信。在配置好 ESP8266 并连接到 Wi-Fi 后,需要通过 AT 指令实现 MQTT 连接。
// 配置MQTT连接
void MQTT_Connect() {
// 连接阿里云服务器
Send_AT_Command("AT+CIPSTART=\"TCP\",\"mqtt.aliyun.com\",1883\r\n");
Receive_Response();
// 发送MQTT连接请求
Send_AT_Command("AT+CIPSEND=xxx\r\n"); // 计算MQTT连接报文长度并填写
Receive_Response();
// 发送MQTT连接报文(这里根据MQTT协议构造报文)
char mqttConnect[] = {0x10, 0x3C, ...}; // MQTT连接报文数据
HAL_UART_Transmit(&huart1, (uint8_t*)mqttConnect, sizeof(mqttConnect), HAL_MAX_DELAY);
Receive_Response();
}
4. 阿里云 IoT 配置
4.1 创建产品和设备
- 登录 阿里云 IoT 平台。
- 创建产品,选择合适的品类和网络类型(Wi-Fi)。
- 在产品下 创建设备,并记录设备的三元组信息(ProductKey、DeviceName、DeviceSecret),后续 MQTT 连接时会用到。
4.2 配置 MQTT 连接
使用 AT 指令,ESP8266 将与阿里云的 MQTT 服务器建立连接,并发布数据到阿里云 IoT 平台。
// 发送MQTT PUBLISH指令
void MQTT_Publish() {
// MQTT PUBLISH 报文
char publishCmd[] = {0x30, 0xXX, ...}; // 填写报文内容
HAL_UART_Transmit(&huart1, (uint8_t*)publishCmd, sizeof(publishCmd), HAL_MAX_DELAY);
Receive_Response();
}
5. 实现效果
当 STM32 成功通过 ESP8266 与阿里云 IoT 建立 MQTT 连接后,可以通过阿里云 IoT 平台的 设备管理 页面,看到实时的数据传输效果。
6. 总结
通过本教程,我们详细介绍了如何使用 ESP8266 与 STM32 搭建与阿里云 IoT 的 MQTT 通信,涵盖了 AT 指令的使用、MQTT 协议的基本配置、STM32 代码实现等。对于物联网开发者而言,掌握 ESP8266 + STM32 的联合开发,以及云端通信是非常有用的技能。
作者:一只蜗牛儿