STM32F103+ESP8266建立室内温度监测,采用MQTT方式连接阿里云

本文介绍使用STM32F103与ESP8266模块构建室内温度监测系统的过程,通过MQTT协议将DS18B20传感器收集的数据上传至阿里云平台。涉及硬件选型、程序移植及云平台配置,适合初学者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32F103+ESP8266建立室内温度监测,采用MQTT方式连接阿里云
一、开篇概述
闲来无事也想再市场正火的物联网方面做一个小东西,目的有两个。一是学习STM32F103的操作程序、二是做个物联网的小玩意,采用MQTT上传到云。
题外话,自己感觉还是有个项目驱动学习的才快,非常感谢被问到的老师们。相信大菜鸟有可能也能成为小菜鸟的。哈哈
二、所用材料

  1. STM32F103开发板(随便一个都行,无论正点、野火、自己制作)
  2. ESP8266小模块
  3. DS18B20器件
  4. UART<–>USB串口小模块
  5. 相关下载器
  6. KEIL5.25开发程序软件

三、程序移植

  1. 在网上找到一个程序,开始移植,主要是ESP8266的驱动编写,程序的框架基本已经写好,只要自己稍微改下GPIO、UART、iic 、timer、NAVC、IT中断函数编写等。
    注意点:
    由于ESP8266是UART控制,稍微注意下RX、TX的线序

四、测试步骤

  1. DS18B20的测温驱动测试
  2. ESP8266连接模式入网测试
  3. 全局MQTT上云测试
    云操作需要建立自己的设备与产品,相关的操作阿里云都有介绍,可以自行查看很简单,

基本上到这里就算完成了,虽然写好写,但是做起来对我这样的新手来说,着实一件难事啊,做了几天才搞定。也算是没少走弯路,写下这篇文章,激励自己吧,慢慢的成长。

相关的代码我上传到网上,有需要的朋友可以做个参考
代码下载

阿里云监测的数据:
在这里插入图片描述
在这里插入图片描述

<think>好的,用户想使用Keil5的标准库配合STM32F103芯片,通过ESP8266模块利用MQTT协议连接到华为云。我需要一步步帮他理清步骤和可能需要的资源。 首先,用户提到了华为云物联网平台,所以需要确认华为云的MQTT接入地址、设备注册信息以及主题格式。根据引用[1],华为云的MQTT地址类似iot-mqtts.cn-north-4.myhuaweicloud.com,具体要看控制台的接入地址。用户需要先在华为云上创建设备,获取设备ID、密钥等信息。 接下来是硬件部分,STM32F103需要与ESP8266通过串口通信。用户使用Keil5的标准库,可能需要配置USART串口,使用AT指令控制ESP8266。引用[1]和[2]都提到了ESP8266通过AT指令连接MQTT,所以需要确保ESP8266固件支持MQTT的AT指令,比如华为云提到的AT+MQTTSUB等命令。 然后是代码部分,用户需要示例代码。可能需要初始化串口,发送AT指令测试ESP8266,配置Wi-Fi连接,然后设置MQTT参数,包括客户端ID、用户名、密码等。华为云的MQTT连接参数可能需要按照他们的规范生成,比如用户名可能包含设备ID、产品ID和时间戳,密码可能需要加密算法生成。 另外,用户可能需要处理MQTT的订阅和发布,比如订阅命令下行的主题,发布属性上报的主题。代码中需要实现这些AT指令的发送和响应处理,可能还需要处理JSON数据的封装,比如使用cJSON库来生成和解析数据。 还需要考虑错误处理和超时机制,确保在连接失败或数据发送失败时有重试机制。同时,用户可能需要参考华为云的设备对接文档,确保所有参数符合要求,比如TLS加密是否需要,但引用中提到的AT指令可能已经处理了这部分。 最后,示例代码的结构可能包括初始化、Wi-Fi连接MQTT连接、数据上报和命令响应这几个部分。用户可能需要根据具体的硬件连接修改串口和引脚配置,并根据华为云的控制台信息替换MQTT参数。 总结下来,步骤应该是:准备华为云设备信息、配置ESP8266的AT指令流程、编写STM32的串口通信代码、处理MQTT连接和数据传输,以及错误处理。同时,用户可能需要参考现有的示例和文档,特别是华为云提供的MQTT接入指南和ESP8266的AT指令手册。</think>### 使用STM32F103+ESP8266连接华为云物联网平台 #### **1. 准备工作** - **硬件环境**: - STM32F103C8T6核心板 - ESP8266-01S模块(需支持MQTT AT指令固件) - USB转TTL模块(用于调试) - **软件环境**: - Keil MDK5(使用标准库开发) - 华为云物联网平台账号(完成设备注册并获取设备ID、密钥、产品ID) - MQTT接入地址:例如 `iot-mqtts.cn-north-4.myhuaweicloud.com`(以控制台显示为准)[^1] #### **2. 连接流程** 1. **STM32ESP8266硬件连接**: - ESP8266的`TX`接STM32的`PA3`(USART2_RX) - ESP8266的`RX`接STM32的`PA2`(USART2_TX) - 共地(GND连接) 2. **配置ESP8266的AT指令模式**: - 发送`AT`测试模块响应。 - 配置Wi-Fi连接:`AT+CWJAP="WiFi名称","密码"`。 - 启用MQTT功能:需使用华为云支持的AT指令集(如`AT+MQTTUSERCFG`、`AT+MQTTCONN`)[^1]。 3. **华为云MQTT参数生成**: - **ClientID**:格式为`产品ID_设备ID`。 - **用户名**:`设备ID|产品ID|时间戳`。 - **密码**:使用HMAC-SHA256加密算法生成(需设备密钥)[^1]。 #### **3. 示例代码框架(Keil标准库)** ```c #include "stm32f10x.h" #include "usart.h" #include "delay.h" // 定义华为云MQTT参数 #define MQTT_CLIENT_ID "productId_deviceId" #define MQTT_USERNAME "deviceId|productId|timestamp" #define MQTT_PASSWORD "加密后的密码" #define MQTT_BROKER "iot-mqtts.cn-north-4.myhuaweicloud.com:1883" void ESP8266_SendCmd(char *cmd) { USART2_SendString(cmd); // 通过USART2发送AT指令 Delay_ms(1000); // 等待响应 } int main(void) { USART2_Init(115200); // 初始化串口2(连接ESP8266) // 1. 配置ESP8266为STA模式 ESP8266_SendCmd("AT+CWMODE=1\r\n"); // 2. 连接Wi-Fi ESP8266_SendCmd("AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n"); // 3. 配置MQTT参数 ESP8266_SendCmd("AT+MQTTUSERCFG=0,1,\"MQTT_CLIENT_ID\",\"MQTT_USERNAME\",\"MQTT_PASSWORD\",0,0,\"\"\r\n"); // 4. 连接华为云MQTT服务器 ESP8266_SendCmd("AT+MQTTCONN=0,\"MQTT_BROKER\",1883,1\r\n"); // 5. 订阅主题(例如属性上报) ESP8266_SendCmd("AT+MQTTSUB=0,\"$oc/devices/deviceId/sys/properties/report\",1\r\n"); while(1) { // 上报温度数据(示例) char payload[50]; sprintf(payload, "{\"services\":[{\"service_id\":\"basic\",\"properties\":{\"temperature\":25}}]}"); ESP8266_SendCmd("AT+MQTTPUB=0,\"$oc/devices/deviceId/sys/properties/report\",\"%s\",1,0\r\n", payload); Delay_ms(5000); } } ``` #### **4. 关键注意事项** - **AT指令时序**:每条指令需等待模块返回`OK`或`ERROR`。 - **加密算法**:密码需通过华为云提供的工具生成(参考华为云设备接入文档)。 - **主题格式**:华为云主题遵循`$oc/devices/{deviceId}/sys/...`规范。 #### **5. 参考资源** - **华为云设备接入文档**:[华为云IoT文档中心](https://support.huaweicloud.com/devg-iothub/iot_02_0089.html) - **ESP8266 AT指令手册**:需支持MQTT功能的最新固件(如安信可AT固件)。 --- ###
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值