ESP8266+STM32+阿里云保姆级教程(AT指令+MQTT)

在物联网开发中,ESP8266 是一款流行的 Wi-Fi 模块,它可以通过 AT 指令与 STM32 微控制器进行通信,并通过 MQTT 协议将数据上传到阿里云 IoT 平台。本篇文章将手把手带你完成 ESP8266 和 STM32 的集成开发,并详细介绍如何使用 AT 指令控制 ESP8266,建立与阿里云的 MQTT 连接。

1. 前期准备

1.1 硬件准备

  • STM32 开发板(本文以 STM32F103C8T6 为例)
  • ESP8266 Wi-Fi 模块
  • USB 转串口模块(用于 ESP8266 的调试)
  • 杜邦线(用于模块连接)
  • 阿里云 IoT 账号(需要注册并配置好设备)
  • 1.2 软件准备

  • Keil5 IDE(用于 STM32 开发)
  • 串口调试工具(如 SecureCRT 或者 XCOM,用于测试 ESP8266 的 AT 指令)
  • STM32CubeMX(用于生成 STM32 初始化代码)
  • 阿里云 IoT 平台(用于设备和产品的创建)
  • 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 指令是否正常工作。

    1. 使用 USB 转串口模块连接 ESP8266,并打开串口调试工具。

    2. 设置波特率为 115200,发送 AT 指令,ESP8266 应返回 OK

      AT
      OK
      
    3. 连接 Wi-Fi 路由器,使用以下指令:

      AT+CWMODE=1        // 设置为客户端模式
      OK
      
      AT+CWJAP="SSID","PASSWORD"   // 连接到Wi-Fi网络
      OK
      
    4. 检查是否成功连接 Wi-Fi:

      AT+CIFSR
      +CIFSR:STAIP,"192.168.1.xxx"
      

    这表明 ESP8266 成功连接了 Wi-Fi,下一步可以与 STM32 进行集成开发。

    3. STM32 配置

    3.1 STM32CubeMX 配置

    1. 创建新项目,选择 STM32F103C8T6 芯片。

    2. 配置 UART 接口,用于与 ESP8266 通信。

    3. 设置 USART1 的波特率为 115200,模式为 异步模式,引脚配置为 PA9(TX)和 PA10(RX)。
    4. 生成代码 并导入 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 创建产品和设备

    1. 登录 阿里云 IoT 平台。
    2. 创建产品,选择合适的品类和网络类型(Wi-Fi)。
    3. 在产品下 创建设备,并记录设备的三元组信息(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 的联合开发,以及云端通信是非常有用的技能。

    作者:一只蜗牛儿

    物联沃分享整理
    物联沃-IOTWORD物联网 » ESP8266+STM32+阿里云保姆级教程(AT指令+MQTT)

    发表回复