# can-iot-system
**Repository Path**: End-ING/can-iot-system
## Basic Information
- **Project Name**: can-iot-system
- **Description**: 基于CAN总线的物联网嵌入式系统。
项目实现了多节点协同工作:
- MCU端:STM32L431采集温湿度,STM32F407通过CAN总线控制电机与舵机;
- 网关端:基于IGKBoard实现CAN数据与网络协议的转换;
- 云端:部署于阿里云服务器,实现设备状态监控与远程控制。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-09-23
- **Last Updated**: 2026-10-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 分布式IoT控制系统
基于STM32与i.MX6ULL构建的一套分布式嵌入式控制系统,支持CAN 总线节点通信、MQTT云端交互、FreeRTOS多任务调度,以及VOFA+上位机实时监控。
## 一、项目简介
本项目构建基于 STM32 的分布式节点网络:L431传感器节点负责温湿度采集(支持周期上报与云端即时触发)、舵机开环角度调节及LED状态控制;F407执行节点负责直流电机速度控制与编码器反馈。各节点通过CAN总线实现低延迟通信,并由i.MX6ULL网关经由MQTT协议对接阿里云,支持VOFA+实时监控。
系统采用 FreeRTOS 进行任务调度,实现:
- 电机闭环PID与S型加减速控制,解决启停冲击与高速堵转;
- 舵机PWM开环控制,支持按指令执行预设角度单圈旋转;
- 温湿度双模式上报机制(周期性采集 + 云端指令即时触发);
- 编码器溢出保护、RTOS实时性抖动优化及CAN/MQTT协议桥接。
## 二、系统架构
```mermaid
graph TD
%% ================= 样式定义 =================
classDef cloud fill:#e1bee7,stroke:#8e24aa,stroke-width:2px;
classDef gateway fill:#bbdefb,stroke:#1e88e5,stroke-width:2px;
classDef node fill:#c8e6c9,stroke:#43a047,stroke-width:2px;
classDef tool fill:#fff9c4,stroke:#fbc02d,stroke-width:2px;
%% ================= 云端平台 =================
subgraph Cloud [服务器平台 / 阿里云]
MQTT_Broker[MQTT Broker / IoT Core]
DB[(数据库 & 日志存储)]
Cloud_UI[云端控制台]
end
%% ================= 网关层 =================
subgraph Gateway [物联网网关]
iMX6ULL[i.MX6ULL 网关]
BRIDGE[CAN/MQTT 协议桥接]
end
%% ================= 终端节点 =================
subgraph Nodes [分布式节点网络]
L431[L431 传感器节点
温湿度 / 舵机 / LED]
F407[F407 执行节点
直流电机 + 编码器]
end
%% ================= 调试工具 =================
subgraph Tools [监控与调试]
VOFA[VOFA+ 上位机]
end
%% ================= 核心业务链路 =================
%% 云端 ↔ 网关
MQTT_Broker <==>|MQTT| iMX6ULL
%% 网关 → 节点
iMX6ULL -->|CAN Bus| L431
iMX6ULL -->|CAN Bus| F407
%% L431 内部任务
L431 -->|周期/触发采集| T1[温湿度上报]
L431 -->|PWM 开环| T2[舵机预设角度]
L431 -->|GPIO 控制| T3[LED 状态切换]
%% F407 内部任务
F407 -->|PID 闭环| T4[速度控制]
F407 -->|S型规划| T5[加减速平滑]
%% ================= 调试链路 =================
VOFA <==>|UART| F407
%% ================= 数据存储 =================
MQTT_Broker --> DB
MQTT_Broker --> Cloud_UI
%% ================= 样式应用 =================
class MQTT_Broker,iMX6ULL,Cloud_UI,DB cloud;
class L431,F407,BRIDGE gateway;
class VOFA tool;
```
系统采用 **“终端节点 – 边缘网关 – 云平台”** 的分层架构,数据流向清晰、职责分离:
* **终端层**:L431 与 F407 节点通过 **CAN 总线**与网关通信,负责本地采集、执行控制指令及闭环运算。
* **边缘层**:**i.MX6ULL 网关**作为协议转换中枢,实现 **CAN 与 MQTT 的双向桥接**,打通本地嵌入式网络与互联网。
* **平台层**:数据经网关上传至 **阿里云服务器**,实现远程监控、指令下发与数据存储;同时可通过 **VOFA+ 上位机**连接节点 **UART 调试串口**,实时查看电机转速曲线并整定 PID 参数。
*注:温湿度采集、舵机预设角度、LED 控制及电机 PID 算法等具体实现,详见硬件组成与软件设计章节。*
## 三、硬件组成与开发环境
### 1、硬件平台
| **层级** | **核心设备** | **关键外设 / 模块** | **核心职责** |
| :----------------- | :-------------- | :------------------------------------------------ | :--------------------------------------------- |
| **终端层** | **STM32L431** | 温湿度传感器、舵机、LED | 环境感知、舵机预设角度旋转、状态指示 |
| **终端层** | **STM32F407** | H 桥驱动板(TB6612FNG)、直流减速电机、正交编码器 | 输出 PWM + 方向信号控制 H 桥,实现电机闭环调速 |
| **边缘层**(网关) | **i.MX6ULL** | CAN 收发器 (SN65HVD230DR)、以太网 | CAN/MQTT 协议桥接、云端通信 |
| **调试层** | **PC / 上位机** | 板载 CH340 串口 | VOFA+ 实时监控、PID 参数整定 |
### 2、硬件连接拓扑
**CAN 总线网络**:
系统采用**双路独立 CAN 通道**设计,实现传感与执行链路的物理隔离:
- **L431 节点**挂载至 **网关 A(i.MX6ULL CAN1)**,构成独立的传感数据通道;
- **F407 节点**挂载至 **网关 B(i.MX6ULL CAN0)**,构成独立的运动控制通道;
两路 CAN 网络在物理与逻辑上完全隔离,节点之间无直接通信,互不干涉。
**调试串口**:
F407 节点利用开发板板载的 CH340 串口(USB-SLAVE 接口),连接至 PC 端的 VOFA+ 上位机,用于独立监控各节点的电机转速曲线与 PID 参数整定。
**执行与传感**:
- **L431 节点**:板载 SHT20、LED,外接 SG90 舵机,实现环境数据采集与状态指示。
- **F407 节点**:输出 PWM 与方向信号至 **H 桥驱动板**(TB6612FNG),驱动直流减速电机;电机自带正交编码器 A/B 相回连至 F407 定时器接口,用于速度闭环反馈。
### 3、开发环境
| **类型** | **工具 / 平台** | **用途说明** |
| :------------ | :---------------------- | :------------------------------------ |
| **MCU 固件** | STM32CubeIDE / Keil MDK | STM32L431 / F407 代码编写、编译与调试 |
| **RTOS** | FreeRTOS | 多任务调度、信号量与互斥锁管理 |
| **网关开发** | Ubuntu / 交叉编译工具链 | i.MX6ULL 网关程序编译与部署 |
| **MQTT 服务** | Mosquitto | 网关端 MQTT 客户端实现 |
| **上位机** | VOFA+ | 电机转速曲线绘制、PID 参数调试 |
| **版本控制** | Git | 代码版本管理 |
### 4、关键硬件特性说明
**分布式节点**:L431 与 F407 均独立运行 FreeRTOS,通过各自的 CAN 接口仅与所连网关通信;节点间无耦合,任务调度互不阻塞,系统实时性高。
**编码器处理**:F407 使用硬件定时器接口模式(Encoder Mode)采集正交编码器信号,支持 16 位溢出截断保护。
**实时调试**:VOFA+ 通过 UART 以高波特率实时接收节点发布的转速与位置数据,用于算法验证。
## 四、核心功能说明
本系统实现了从终端感知、边缘决策到云端可视化的全链路闭环控制,核心功能模块如下:
### 1、 分布式数据采集与执行
* **环境感知 (L431节点)**:通过 SHT20 传感器实时采集环境温度与湿度,支持单次/周期两种上报模式。
* **运动控制**:
* **PID 闭环调速 (F407节点)**:基于增量式 PID 算法控制直流电机转速,通过编码器反馈实现高精度调速。
* **执行机构控制 (L431节点)**:通过 PWM 信号驱动 SG90 舵机,实现 0°~180° 范围内的开环角度动作,模拟云台或阀门的物理联动。
### 2、 边缘网关与协议转换
* **CAN ↔ MQTT 桥接**:网关作为核心枢纽,通过 SocketCAN 接口读取底层 CAN 总线数据,解析后将标准 JSON 格式数据通过MQTT协议发布到阿里云服务器;同时订阅云端下行指令并转换为 CAN 帧下发。
* **多路 CAN 管理**:利用 i.MX6ULL 的双路 CAN 接口(CAN0/CAN1),分别管理 F407 运动节点与 L431 传感节点,实现物理隔离与逻辑分组。
### 3、上位机实时调参与调试
* **波形可视化**:通过 串口 (UART) 将 MCU 内部计算的 电机实际速度 与 累计圈数 以JustFloat 协议发送给 VOFA+,实时绘制动态波形图,直观监控电机运行状态。
* **便捷调参**:利用 VOFA+ 的滑块控件,直接在 PC 端拖动设定电机目标速度,下行指令支持 文本指令或 JustFloat 浮点数据,通过串口实时下发至 MCU 执行,免去反复烧录代码的麻烦。