嵌入式 + MQTT:数据上传到阿里云实战(从0到1完整教程)

☁️ 嵌入式 + MQTT:数据上传到阿里云实战(从0到1完整教程)

学了半天嵌入式,总感觉少了点什么?

传感器会读了。

OLED 会显示了。

蓝牙也会了。

但是......

设备只能自己玩,不能联网。

这就像你买了一部手机,却永远不开 WiFi。

今天,我们就来实现一个真正的 IoT 项目:

🚀 把嵌入式设备的数据上传到阿里云!

最终效果:

text 复制代码
温湿度传感器
      ↓
  MCU(ESP32)
      ↓
    MQTT
      ↓
  阿里云IoT平台
      ↓
 手机/电脑查看数据

一、什么是 MQTT?

先别被这个名字吓到。

MQTT 全称:

text 复制代码
Message Queuing Telemetry Transport

翻译:

消息队列遥测传输协议

简单理解:

MQTT 就是 IoT 世界里的微信。

比如:

你家里的温度传感器说:

text 复制代码
当前温度:25.6℃

它不会大喊:

text 复制代码
有人吗?

而是发送一条消息:

text 复制代码
Topic:home/temp

Payload:25.6

云服务器收到后:

text 复制代码
存储
显示
转发

就这么简单。


二、为什么 IoT 都喜欢 MQTT?

因为它真的很省资源。

对比一下:

协议 特点
HTTP
TCP 底层
MQTT 轻量

MQTT 非常适合:

  • 单片机
  • 电池设备
  • 低带宽网络

三、MQTT 的核心概念(3分钟搞懂)

有三个角色。


1️⃣ Publisher(发布者)

你的设备。

例如:

text 复制代码
ESP32

负责发送数据。


2️⃣ Subscriber(订阅者)

手机

电脑

App

负责接收数据。


3️⃣ Broker(服务器)

中间人。

这里就是:

👉 阿里云 IoT 平台


关系:

text 复制代码
Publisher
     ↓
 Broker
     ↓
Subscriber

四、项目目标

实现:

text 复制代码
ESP32
 ↓
读取温湿度
 ↓
上传MQTT
 ↓
阿里云显示

上传内容:

json 复制代码
{
  "temperature":25.6,
  "humidity":48.2
}

五、准备工作

硬件

推荐:

text 复制代码
ESP32 DevKitC

传感器

推荐:

text 复制代码
SHT30

或者:

text 复制代码
DHT22

软件

需要:

  • Arduino IDE
  • 阿里云 IoT 平台

六、创建阿里云 IoT 产品

进入:

阿里云 IoT 平台

步骤:

text 复制代码
创建产品
 ↓
添加设备
 ↓
获取三元组

得到:

text 复制代码
ProductKey

DeviceName

DeviceSecret

这三个非常重要。

类似:

text 复制代码
设备身份证

七、连接 WiFi

代码:

cpp 复制代码
#include <WiFi.h>

const char* ssid = "YourWiFi";
const char* password = "12345678";

void wifi_init()
{
    WiFi.begin(ssid,password);

    while(WiFi.status()!=WL_CONNECTED)
    {
        delay(500);
    }
}

八、MQTT 客户端初始化

安装库:

text 复制代码
PubSubClient

代码:

cpp 复制代码
#include <PubSubClient.h>

WiFiClient espClient;

PubSubClient client(espClient);

九、连接阿里云

配置:

cpp 复制代码
client.setServer(host,1883);

连接:

cpp 复制代码
client.connect(clientId,
               username,
               password);

其中:

text 复制代码
clientId

username

password

由三元组生成。


十、读取传感器数据

例如:

cpp 复制代码
float temp = 25.6;
float humi = 48.2;

实际项目:

cpp 复制代码
SHT30_Read();

即可。


十一、上传数据(核心)

构造 JSON:

cpp 复制代码
String payload;

payload = "{\"temperature\":25.6,""\"humidity\":48.2}";

发送:

cpp 复制代码
client.publish(topic, payload.c_str());

例如:

text 复制代码
Topic:
/sys/xxx/thing/event/property/post

十二、完整运行流程

text 复制代码
上电
 ↓
连接WiFi
 ↓
连接MQTT
 ↓
读取传感器
 ↓
打包JSON
 ↓
上传阿里云
 ↓
循环执行

十三、OLED显示(可选)

显示:

text 复制代码
Temp:25.6℃

Humi:48.2%

Cloud:Online

这样就更像一个产品了。


十四、加入断线重连(工程必须做)

很多新手会漏掉。

增加:

cpp 复制代码
if(!client.connected())
{
    reconnect();
}

同时:

cpp 复制代码
client.loop();

必须一直执行。


十五、系统架构升级(推荐RTOS)

任务划分:

任务 功能
SensorTask 采集数据
MQTTTask 上传云端
DisplayTask OLED显示
WiFiTask 网络维护

流程:

text 复制代码
采集
 ↓
上传
 ↓
显示
 ↓
维护网络

十六、项目目录推荐

text 复制代码
Project
│
├── BSP
│   ├── OLED
│   ├── SHT30
│
├── Driver
│   ├── WiFi
│   ├── MQTT
│
├── App
│   ├── Cloud
│
└── main.cpp

十七、常见踩坑(90%的人都遇到过)

❌ WiFi能连上,但MQTT失败

原因:

text 复制代码
三元组配置错误

❌ 数据上传成功,但云端看不到

原因:

text 复制代码
Topic写错

❌ 程序运行几分钟就断线

原因:

text 复制代码
没做重连

❌ JSON格式错误

原因:

text 复制代码
少了引号

❌ 程序卡死

原因:

text 复制代码
阻塞delay太多

十八、这个项目真正学到了什么?

你学到的不只是:

text 复制代码
上传一个温度

而是完整 IoT 产品开发流程:

text 复制代码
设备采集
     ↓
网络连接
     ↓
协议封装
     ↓
云端通信
     ↓
数据展示

这就是现在绝大多数智能设备的工作方式。


十九、项目升级路线(推荐)

第一阶段

✅ 温湿度上传


第二阶段

✅ 手机控制LED


第三阶段

✅ 云端下发命令


第四阶段

✅ OTA升级


第五阶段

✅ 手机App控制


总结

很多人以为:

IoT = WiFi

其实并不是。

真正的 IoT 是:

设备 + 网络 + 协议 + 云平台

而 MQTT 就是连接这四者的桥梁。

当你的设备第一次把数据上传到阿里云时,你会突然有一种感觉:

原来自己写的代码,真的"上云"了。

这也是很多嵌入式工程师,从单片机开发迈向 IoT 开发的关键一步。


相关推荐
10WTW011 小时前
微机原理 8259A 可编程中断控制器
单片机·嵌入式硬件
破晓单片机3 小时前
068、STM32项目分享:智能小区门禁系统
stm32·单片机·嵌入式硬件
H__Rick4 小时前
C51单片机学习-DAY3
单片机·学习·mongodb
离凌寒5 小时前
一、关于zephyr的开发环境搭建。
freertos
bkspiderx6 小时前
Windows DLL核心技术:深入理解__declspec(dllexport)与__declspec(dllimport)
windows·stm32·单片机·dllimport·dllexport·windows dll·__declspec
m0_547486666 小时前
《ARM Cortex-M4嵌入式应用技术——基于STM32F407、STM32CubeMX与Proteus》全套PPT课件
arm开发·stm32·proteus
望眼欲穿的程序猿7 小时前
ESP32-S3 定时器中断
单片机·嵌入式硬件
电气_空空7 小时前
基于 LabVIEW 的深海气密采水器测控系统
单片机·嵌入式硬件·毕业设计·labview
星夜夏空997 小时前
STM32单片机学习(37) —— PWR和BKP
stm32·单片机·学习