1、IoT入门:物联网概念、阿里云IoT平台概述、设备接入协议简介(MQTT/CoAP/HTTP)

1.1 物联网到底是什么?

说实话,物联网这个概念已经被炒了很多年了。但在我接触过的上百个项目中,真正能把IoT做明白的团队其实不多。

物联网,英文叫Internet of Things(IoT)。说白了,就是把物理世界里的设备——传感器、控制器、家电、工业机器——都连到互联网上。让它们能说话、能听话、能干活。

我习惯用一个公式来理解:物联网 = 感知 + 传输 + 处理 + 控制

  • 感知层:温度传感器、摄像头、GPS模块……这些是物联网的“眼睛和耳朵”。
  • 传输层:Wi-Fi、4G/5G、LoRa、NB-IoT……这是物联网的“神经”。
  • 处理层:云平台、边缘计算……这是物联网的“大脑”。
  • 控制层:继电器、电机、阀门……这是物联网的“手脚”。

我在2018年做过一个冷链物流项目,当时客户说“我要实时监控冷藏车的温度”。听起来简单吧?但实际做起来,从传感器选型到数据上云,再到告警推送,每一步都有坑。嗯,这个我们后面会细讲。

1.2 阿里云IoT平台能做什么?

阿里云IoT平台,全称是阿里云物联网平台。它不是一个简单的“云服务器”,而是一整套设备接入、数据存储、规则引擎、设备管理的PaaS服务。

我个人觉得,它最大的价值在于:你不需要从零搭建MQTT服务器、设备认证系统、数据存储集群。这些脏活累活,平台都帮你干了。

平台的核心能力,我列个表给你看:

功能模块 说明 我常用的场景
设备接入 支持MQTT、CoAP、HTTP协议 智能家居设备首选MQTT
设备管理 注册、认证、在线状态、影子设备 批量管理几千台设备时很香
数据流转 规则引擎转发到RDS、TSDB、函数计算 实时数据清洗和存储
监控运维 日志服务、在线调试、远程升级OTA 设备出问题时排查利器
安全认证 一机一密、一型一密、X.509证书 工业场景我推荐证书方式

你想想看,如果让你自己搭建一套支持百万级设备接入的MQTT集群,光运维成本就够你喝一壶的。阿里云IoT平台把这些都封装好了,你只需要关注业务逻辑。

1.3 设备接入协议:MQTT、CoAP、HTTP

设备怎么跟云平台通信?这就涉及到协议了。我见过不少新手一上来就问“哪个协议最好?”——其实没有最好的,只有最合适的。

1.3.1 MQTT——物联网的事实标准

MQTT(Message Queuing Telemetry Transport)是我最常用的协议。它基于发布/订阅模式,特点是轻量、省流量、支持双向通信

为什么它适合IoT?

  • 报文头最小只有2字节,比HTTP小太多了
  • 支持QoS 0/1/2三种服务质量,网络差的时候也能保证消息送达
  • 支持遗嘱消息(Will Message),设备突然掉线时能通知其他设备
  • 支持保留消息(Retained Message),新设备上线就能拿到最新状态

我在一个智能路灯项目里,用MQTT同时管理了5000多个节点。每个节点每30秒上报一次电压和电流数据,服务器端用订阅的方式接收,整个系统跑了一年多没出过问题。

重要提示:阿里云IoT平台的MQTT接入点格式为:${productKey}.iot-as-mqtt.${regionId}.aliyuncs.com:1883。端口1883是普通TCP,端口443是WebSocket。

1.3.2 CoAP——专为受限设备而生

CoAP(Constrained Application Protocol)是另一种选择。它基于UDP,比MQTT还要轻量。适合那些内存只有几十KB、CPU主频几十MHz的“小”设备。

CoAP的特点:

  • 基于UDP,没有TCP的三次握手开销
  • 支持GET/POST/PUT/DELETE,类似HTTP的RESTful风格
  • 支持观察模式(Observe),设备可以订阅资源变化
  • 报文用二进制格式,解析效率高

我曾经在一个水表抄表项目里用过CoAP。水表用的是电池供电,要求一节电池用5年。MQTT的TCP长连接太耗电了,换成CoAP后,每次上报完就休眠,功耗直接降了70%。

注意:CoAP基于UDP,在公网环境下可能会丢包。阿里云IoT平台对CoAP做了优化,支持确认重传机制。但如果你对可靠性要求极高(比如工业控制),还是建议用MQTT。

1.3.3 HTTP——简单但不够“物”

HTTP协议,大家都很熟悉了。在IoT场景里,它通常用于设备上报数据,或者云端下发指令。

但说实话,我不太推荐在设备端用HTTP做实时通信。原因很简单:

  • HTTP是请求-响应模式,服务器不能主动推送数据(除非轮询)
  • 报文头太大,一个请求动不动几百字节,对流量敏感的设备不友好
  • 每次请求都要建立TCP连接,频繁连接断开对设备资源消耗大

那HTTP在IoT里就没用了吗?也不是。我一般在以下场景用HTTP:

  • 设备固件OTA升级,下载大文件时用HTTP更合适
  • 设备定时上报非实时数据(比如每天一次的统计报表)
  • 快速原型验证,不想引入MQTT客户端库的时候

1.4 协议对比:一张表看懂怎么选

对比项 MQTT CoAP HTTP
传输层 TCP UDP TCP
报文开销 2字节起 4字节起 几百字节
通信模式 发布/订阅 请求/响应 + 观察 请求/响应
双向通信 原生支持 需轮询或观察 需轮询
功耗 中等
适用场景 实时控制、数据上报 电池供电、低功耗 OTA升级、非实时数据

我的建议:如果你刚开始做IoT项目,直接选MQTT。它生态最成熟,阿里云的支持也最好。等遇到功耗瓶颈了,再考虑CoAP。HTTP嘛,作为补充手段就好。

1.5 一个小例子:设备用MQTT上报温度

光说不练假把式。我写个简单的Python示例,演示设备如何用MQTT连接到阿里云IoT平台,并上报温度数据。

# 需要安装 paho-mqtt 库
# pip install paho-mqtt

import paho.mqtt.client as mqtt
import json
import time

# 设备三元组(从阿里云IoT平台获取)
product_key = "a1xxxxxx"
device_name = "test_device_01"
device_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxx"

# 计算MQTT连接密码(阿里云签名方式)
# 这里简化处理,实际项目中用阿里云提供的签名工具
username = f"{device_name}&{product_key}"
password = "signature_hmac_sha1"  # 实际需要计算

# MQTT连接地址
broker = f"{product_key}.iot-as-mqtt.cn-shanghai.aliyuncs.com"
port = 1883

def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("连接成功!")
    else:
        print(f"连接失败,返回码:{rc}")

def on_publish(client, userdata, mid):
    print(f"消息发送成功,mid={mid}")

client = mqtt.Client(client_id=f"{device_name}&{product_key}")
client.username_pw_set(username, password)
client.on_connect = on_connect
client.on_publish = on_publish

client.connect(broker, port, 60)
client.loop_start()

# 上报温度数据
topic = f"/sys/{product_key}/{device_name}/thing/event/property/post"
payload = {
    "id": int(time.time()),
    "params": {
        "temperature": 25.6,
        "humidity": 60.2
    },
    "method": "thing.event.property.post"
}

client.publish(topic, json.dumps(payload), qos=1)
time.sleep(2)

client.loop_stop()
client.disconnect()

这段代码虽然简单,但核心流程都有了:建立连接、构造属性上报报文、发布到指定Topic。我在实际项目中,会把这段逻辑封装成一个设备SDK,加上重连机制和心跳保活。

嗯,这里要注意:阿里云IoT平台的Topic格式是固定的,/sys/{productKey}/{deviceName}/thing/event/property/post 是属性上报的Topic。别写错了,否则数据上不去。

1.6 本章小结

这一章我们聊了物联网的基本概念,了解了阿里云IoT平台能帮我们做什么,也对比了三种主流的设备接入协议。

我个人觉得,入门阶段最重要的是理解“设备-平台-应用”这三层架构。协议只是工具,选哪个取决于你的设备能力和业务需求。

下一章,我们会深入阿里云IoT平台的控制台,手把手教你创建产品、注册设备、配置Topic。到时候我会分享一些我在项目中踩过的坑,比如设备三元组怎么安全存储、Topic权限怎么设置才合理。

准备好了吗?我们继续。