☁️ 嵌入式 + 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 产品
进入:
步骤:
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 开发的关键一步。