嵌入式 + 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 开发的关键一步。


相关推荐
国科安芯7 小时前
航天器多路并联大功率电源系统设计与ASP4644均流特性分析
单片机·嵌入式硬件·fpga开发·安全性测试
梁朝辉12 小时前
STM32H750VBT6中ADCINP与INN什么区别
stm32·单片机·嵌入式硬件
崇山峻岭之间14 小时前
单片机无感FOC驱动之ADC
单片机·嵌入式硬件
Ligocious14 小时前
1.点亮一颗小小的LED
单片机·嵌入式硬件
KaifuZeng18 小时前
通信与接口协议面试八、CAN通信
单片机·嵌入式硬件·面试·通信与接口协议
智源单片机设计19 小时前
基于单片机的直流电机双闭环调速系统设计
单片机·嵌入式硬件
kebidaixu19 小时前
两轮车换电 BMS 的模拟前端中颖 SH367306 AFE 芯片详解
stm32
kebidaixu20 小时前
两轮车换电 BMS 的模拟前端中颖 SH367306 AFE 芯片调试实录:四个关键问题与解决方案
stm32
大侠锅锅1 天前
第 2 篇:MQTT 协议深度解析——物联网通信为什么选它
物联网·mqtt