1. 课程导入

在嵌入式设备从“单机控制”走向“云端协同”的过程中,网络能力已经成为 MCU 项目的基础设施。RT-Thread 作为一款国产开源实时操作系统,内置了完整的网络框架与丰富的 IoT 组件,让开发者可以在资源受限的芯片上完成 TCP/IP 通信、MQTT 上云、OTA 升级、设备配网等典型任务。本课程的目标,是帮助你把“能联网”升级为“能稳定、可维护、可量产地联网”。

一、学习目标:从会用到会设计

本课程围绕四个层次展开。第一层是协议认知:理解 TCP/UDP、HTTP、MQTT、CoAP 等协议在嵌入式场景中的取舍。第二层是框架使用:掌握 RT-Thread 的 SAL 套接字抽象层、netdev 网卡管理、AT 组件与协议栈移植。第三层是应用开发:能够基于 MQTT 与云平台完成数据上报、命令下发、设备影子等业务。第四层是工程化能力:包括断线重连、低功耗、内存裁剪、日志排障与 OTA 升级。

学习完成后,你应当能够独立完成一个“传感器采集 → 网络传输 → 云平台展示 → 远程控制”的闭环项目,并能定位常见的连接失败、数据丢包与内存溢出问题。

二、核心概念:先建立一张“术语地图”

RT-Thread 的网络体系有几个关键概念,理解它们之间的关系,比死记 API 更重要。

  • netdev:网卡设备抽象,统一管理以太网、Wi-Fi、4G 等物理网络接口。
  • 协议栈:如 lwIP、AT Socket、WIZnet,负责把数据封装成 IP 包并发送。
  • SAL:套接字抽象层,向上提供标准 BSD Socket 接口,向下屏蔽不同协议栈差异。
  • IoT 组件:MQTT、HTTP Client、WebClient、CoAP、OTA 等,构建在 SAL 之上。
  • 云平台:阿里云、腾讯云、OneNET、EMQX 等,负责设备接入、数据存储与规则引擎。

这些概念不是孤立的,而是层层递进:硬件网卡 → netdev → 协议栈 → SAL → IoT 组件 → 云平台。下面的 SVG 展示了这一整体知识框架与学习路径。

RT-Thread 网络与 IoT 开发知识框架 自底向上分层理解,自顶向下逐层实践 云平台层 阿里云 IoT | 腾讯云 | OneNET | EMQX | 私有服务器 设备接入 · 数据存储 · 规则引擎 IoT 组件层 MQTT | HTTP Client | WebClient | CoAP | OTA | 设备配网 业务协议 · 云端交互 SAL 套接字抽象层 socket | bind | listen | connect | send | recv | select 统一 BSD Socket 接口 协议栈层 lwIP | AT Socket | WIZnet | 自研协议栈 TCP / UDP / IP / ICMP 硬件与 netdev 层 以太网 PHY | Wi-Fi 模组 | 4G Cat.1 | NB-IoT | 网卡设备管理 物理连接 · 链路状态 学习路径:由下至上 实践路径:由顶至下 协议理解 框架使用 应用开发 工程化落地

三、方法流程:一个典型 IoT 项目的开发顺序

很多初学者一上来就写 MQTT 连接代码,结果卡在“网卡没起来”或“DNS 解析失败”。推荐按以下顺序推进:

  1. 确认硬件链路:检查 PHY、Wi-Fi 模组或 4G 模组的供电、复位与通信接口。
  2. 启动 netdev:使用 ifconfig 查看网卡状态,确保获取到 IP 地址。
  3. 验证基础连通性:用 ping 命令测试网关与外网 IP。
  4. 验证 DNS:用 ping www.rt-thread.org 确认域名解析正常。
  5. 接入 SAL 与 IoT 组件:打开 MQTT、HTTP Client 等软件包。
  6. 对接云平台:配置三元组、Topic 与 QoS,完成数据上报与命令订阅。
  7. 加入工程化能力:断线重连、看门狗、日志分级、OTA 升级。
msh /> ifconfig
network interface: e0 (Default)
MTU: 1500
MAC: 00 11 22 33 44 55
FLAGS: UP LINK_UP ETHARP
ip address: 192.168.1.120
gw address: 192.168.1.1
net mask  : 255.255.255.0

msh /> ping www.rt-thread.org
32 bytes from 104.21.xx.xx icmp_seq=0 ttl=54 time=38 ms

四、案例场景:从“点灯”到“上云”

假设你要做一个“智能温湿度监测器”。本地使用 I2C 读取 AHT10 传感器,通过 Wi-Fi 连接路由器,再以 MQTT 协议把数据发布到 EMQX 服务器,同时在手机端订阅 Topic 查看曲线。这个项目会同时用到设备驱动、netdev、SAL、MQTT 与 JSON 解析。它看似简单,却覆盖了本课程 80% 的核心知识点。

阶段关键任务涉及组件常见问题
硬件准备传感器与通信模组接线I2C、UART、GPIO供电不足、引脚复用冲突
网络接入获取 IP 并连通外网netdev、lwIP、Wi-Fi 框架DHCP 失败、信号弱
协议对接连接 MQTT BrokerSAL、MQTT、TLS三元组错误、证书过期
业务实现上报数据与接收命令cJSON、消息队列Topic 不匹配、QoS 设置不当
稳定运行断线重连与日志排查重连机制、ulog内存泄漏、线程阻塞

五、误区与复盘:新手最容易踩的坑

误区一:跳过网络诊断直接写业务代码。 如果 ping 都不通,MQTT 一定连不上。先保证链路层与网络层正常,再向上开发。
误区二:把 SAL 当成协议栈本身。 SAL 只是抽象层,真正发包的是 lwIP 或 AT Socket。排查问题时要分清是“抽象层没适配”还是“底层协议栈没跑起来”。

另一个高频问题是内存与线程配置不合理。MQTT 线程栈太小会导致 TLS 握手失败,接收缓冲区太小会丢包。建议在 rtconfig.h 中根据实际报文大小调整 RT_LWIP_TCP_SND_BUF、RT_LWIP_TCP_RCV_BUF 以及 MQTT 线程栈,并用 free 命令观察内存余量。