专栏定位:从原理到落地,手把手打通嵌入式与 AI,面向嵌入式初学者、大模型应用开发者 (所有硬件参数、协议、代码均有官方文档或工程实践支撑,仅大模型效果、实际续航等受环境影响)
第 1 篇:硬件边界与可行性分析 ——8 位机也能玩 AI?
1. 专栏前言
很多嵌入式初学者都有同一个疑问:只有 64KB Flash、20KB RAM 的 STM32F103C8T6,到底能不能用上大模型?能不能实现自然语言交互?
本专栏以「手机 APP + 大模型控制智能小车」为完整项目,从硬件选型、公式计算、RTOS 移植、云端对接、APP 开发全链路拆解,既讲透原理,也给出可直接复用的代码和踩坑经验。
2. 先算清楚:STM32F103C8T6 的家底到底有多少?
所有可行性分析都建立在硬件资源边界上,以下参数均来自 ST 官方文档。
2.1 核心硬件参数
| 资源类型 | 参数 | 备注 |
|---|---|---|
| 内核 | ARM Cortex-M3 | 最高主频 72MHz,三级流水线 |
| 程序存储器(Flash) | 64KB | 存放固件代码,起始地址 0x08000000 |
| 运行内存(SRAM) | 20KB | 程序运行内存,起始地址 0x20000000 |
| 通用 IO 口 | 37 个 | 大部分支持 5V 容忍 |
| 串口 | 3 路 USART | 支持异步串口通信 |
| 定时器 | 7 个 | 含高级定时器,可输出 PWM |
| 通信接口 | SPI×2、I2C×2 | 可外接各类外设模块 |
数据来源:STMicroelectronics 官方文档《STM32F103x8 Datasheet》(文档编号:DS5319 Rev 18)、RM0008 参考手册
2.2 大模型到底需要多少资源?
我们拿主流轻量化大模型做横向对比:
- TinyLlama-1.1B:11 亿参数,FP16 精度需 2.2GB 显存,4bit 量化后仍需约 550MB
- Qwen2-0.5B:5 亿参数,4bit 量化后需约 250MB
- 即使是微型 MLP 语义分类模型,也需要几十 KB 到上百 KB RAM
结论:STM32F103C8T6 的硬件资源,连最小的大模型都无法装载和运行,本地跑完整大模型完全不可行。
3. 破局:大模型在 STM32 上的正确打开方式
本地跑不了不代表用不了,嵌入式 AI 落地的主流方案是云端大模型 + 边缘端轻量处理,这也是本项目的核心架构。
3.1 三层架构设计
- 终端层(STM32F103C8T6):负责电机驱动、数据采集、指令执行,只做实时控制
- 传输层:蓝牙 / WiFi 模块,负责 STM32 与手机 / 云端的数据交互
- 云端 / 手机层:运行大模型,负责自然语言理解、指令拆解、状态回复,把自然语言转换成机器指令
3.2 能实现自然语言处理吗?
能实现完整的自然语言交互体验,但核心 NLU(自然语言理解)在云端,STM32 本地只做指令收发和执行。 交互流程示例:
- 用户在手机 APP 输入:“慢慢往前走 2 秒,然后右转 90 度,报一下电量”
- 手机把文本发给云端大模型
- 大模型解析为结构化指令:
[{"action":"forward","duration":2,"speed":30},{"action":"turn_right","angle":90},{"action":"query_battery":true}] - 手机通过蓝牙把结构化指令发给 STM32
- STM32 执行动作,完成后把电量数据回传手机
- 大模型把数据组织成自然语言:“已完成动作,当前电量 78%,还能跑约 15 分钟”
(成熟的物联网 AI 落地方案)
4. 智能小车项目中,大模型的具体价值
- 灵活指令解析:替代传统固定指令(发 “1” 前进、“2” 后退),支持模糊表达,用户无需记忆指令
- 智能状态解读:把原始电压、转速数据转换成人类易懂的自然语言回答
- 简单任务规划:高层目标自动拆解为动作序列,比如 “绕正方形走一圈” 自动生成 4 次前进 + 转向
- 辅助故障排查:上报异常现象后,大模型给出排查步骤和可能原因
(具体效果取决于 Prompt 设计和大模型能力)
5. 疑问解答:大模型能直接写 STM32 固件吗?
可以辅助生成,但不能直接产出 “拿来就用” 的完整固件。
- 能做:外设初始化代码、功能逻辑函数、代码解释、编译错误定位
- 做不到:自动适配硬件接线、保证寄存器 100% 正确、解决复杂时序 / 实时性问题
代码示例:大模型生成的电机驱动代码(HAL 库)
#include "stm32f1xx_hal.h" // 引入STM32F1系列HAL库头文件,提供寄存器封装 // 电机控制引脚定义(需根据实际接线修改) #define IN1_PIN GPIO_PIN_0 // 驱动芯片IN1引脚,连接PA0 #define IN1_PORT GPIOA // IN1对应的GPIO端口 #define IN2_PIN GPIO_PIN_1 // 驱动芯片IN2引脚,连接PA1 #define IN2_PORT GPIOA // IN2对应的GPIO端口 #define PWM_PIN GPIO_PIN_2 // PWM调速引脚,连接PA2(TIM2通道3) #define PWM_PORT GPIOA // PWM对应的GPIO端口 TIM_HandleTypeDef htim2; // 定时器2句柄,用于生成PWM波控制电机转速 /** @brief 电机GPIO初始化函数 @retval 无 @note 配置方向引脚为推挽输出,PWM引脚为复用推挽输出 */ void Motor_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; // 定义GPIO初始化配置结构体 __HAL_RCC_GPIOA_CLK_ENABLE(); // 开启GPIOA外设时钟,否则引脚无法工作 // 配置IN1、IN2方向引脚 GPIO_InitStruct.Pin = IN1_PIN | IN2_PIN; // 选中两个方向引脚 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式,可输出高低电平 GPIO_InitStruct.Pull = GPIO_NOPULL; // 不上拉不下拉 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速,满足电机控制需求 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 写入寄存器完成初始化 // 配置PWM调速引脚(复用定时器功能) GPIO_InitStruct.Pin = PWM_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 复用推挽输出,由定时器控制电平 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // 高速,保证PWM波形质量 HAL_GPIO_Init(PWM_PORT, &GPIO_InitStruct); } /** @brief 电机正转(前进)函数 @param speed: 速度百分比,范围0-100 @retval 无 @note IN1高、IN2低电机正转;通过PWM占空比调节转速 / void Motor_Forward(uint8_t speed) { HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_SET); // IN1置高 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2置低 // 设置PWM比较值,定时器自动重装载值ARR=1000,因此speed10对应百分比占空比 __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, speed * 10); } /** @brief 电机停止函数 @retval 无 @note 两个方向引脚都置低,电机滑行停止 */ void Motor_Stop(void) { HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); // IN1置低 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2置低 __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, 0); // PWM占空比设为0 }代码功能:基于 HAL 库的单路直流电机驱动框架,包含 GPIO 初始化、前进、停止功能,支持 PWM 调速
(逻辑正确,实际使用需匹配硬件接线和定时器配置)
6. 本篇小结
- STM32F103C8T6 本地无法运行完整大模型,资源差距达数百倍
- 正确落地路径是「云端大模型 + 边缘端执行」,可实现完整自然语言交互
- 大模型可辅助生成固件代码,但需人工调试适配硬件
- 智能小车项目中,大模型核心价值是自然指令解析和智能数据解读
第 2 篇:硬件选型与公式计算 —— 从零搭出智能小车硬件
1. 前言
上一篇确定了整体架构,本篇落地硬件:做这个小车需要哪些元器件?怎么选不踩坑?电机、驱动、电源怎么算参数?所有选型均给出计算公式和计算过程。
2. 基础版元器件清单
| 序号 | 元器件名称 | 推荐型号 | 数量 | 作用 |
|---|---|---|---|---|
| 1 | 主控板 | STM32F103C8T6 最小系统板 | 1 | 核心控制,执行固件逻辑 |
| 2 | 电机驱动 | TB6612FNG 模块 | 1 | 驱动两路直流电机,效率高于 L298N |
| 3 | 减速电机 | 6V 200 转 / 分 直流减速电机 | 2 | 驱动车轮转动 |
| 4 | 底盘套件 | 亚克力两轮差速底盘(含轮子、万向轮) | 1 套 | 机械结构载体 |
| 5 | 无线模块 | HC-05 蓝牙模块 | 1 | 与手机 APP 通信 |
| 6 | 电源 | 7.4V 2S 18650 锂电池(带保护板) | 1 组 | 整机供电 |
| 7 | 下载器 | ST-Link V2 / USB-TTL | 1 | 烧录程序、串口调试 |
| 8 | 配件 | 杜邦线、开关、热缩管、螺丝 | 若干 | 接线与固定 |
进阶可扩展:HC-SR04 超声波模块、0.96 寸 OLED 显示屏、语音采集模块
(均为嵌入式小车成熟通用器件)
3. 核心器件选型公式与计算过程
3.1 电机选型:转速与扭矩计算
核心公式
- 小车速度与电机转速关系
- v:小车前进速度,单位 m/s
- n:电机空载转速,单位 rpm(转 / 分)
- D:车轮直径,单位 m
- i:电机减速比
- 电机扭矩与载重关系
- T:电机输出扭矩,单位 N・m
- m:小车总质量(含电池、电路板),单位 kg
- g:重力加速度,取 9.8 m/s²
- r:车轮半径,单位 m
- i:减速比
:机械传动效率,一般取 0.7~0.8
实例计算
桌面级小车参数:总质量 0.5kg,车轮直径 65mm,目标最高速度 0.5m/s,减速比 30,机械效率 0.7。
- 所需空载转速:
,对应输出转速约 147rpm,市面常见 200 转 / 分减速电机完全满足
- 所需输出扭矩:
,普通 6V 减速电机扭矩均在 10mN・m 以上,留足余量
公式来源:《电机与拖动基础》(顾绳谷 主编),经典工程计算方法 对应内容(理论计算,实际受摩擦力、地面平整度影响,建议留 1.5~2 倍余量)
3.2 电机驱动选型
选型核心原则:驱动芯片最大输出电流 ≥ 2 倍电机堵转电流(留 2 倍余量)。
两款主流驱动对比:
| 驱动芯片 | 单通道峰值电流 | 转换效率 | 发热情况 | 适用场景 |
|---|---|---|---|---|
| L298N | 2A | ~60% | 大,需散热片 | 大电流电机 |
| TB6612FNG | 1.2A | ~90% | 极小,无需散热 | 小型低功耗小车 |
本项目小电机堵转电流约 1A,TB6612FNG 完全满足,且效率高、省电,更适合电池供电场景。
数据来源:东芝 TB6612FNG 官方数据手册、意法半导体 L298N 数据手册
3.3 电源选型:续航计算
续航计算公式
- t:续航时间,单位 h
- C:电池容量,单位 Ah(安时)
- U:电池额定电压,单位 V
:电池放电效率,一般取 0.8~0.9
:整机总功率,单位 W
实例计算
整机总功率估算:STM32 约 0.1W + 蓝牙约 0.1W + 双电机全速约 2W = 总计约 2.2W。
采用 7.4V 2000mAh(2Ah)锂电池:
实际使用电机不会一直全速,续航更长。
注意:STM32 和蓝牙为 3.3V 供电,需通过 AMS1117-3.3 稳压,最小系统板一般已集成(功率为估算值,实际续航与使用场景强相关)
4. 本篇小结
- 基础版小车共 8 类核心元器件,新手可直接照单采购
- 电机选型看转速和扭矩,给出两个核心公式和完整计算过程
- 低功耗小车优先选 TB6612FNG 驱动,效率高发热小
- 2000mAh 锂电池可满足数小时续航需求
第 3 篇:操作系统选型与 FreeRTOS 移植 —— 让单片机 “同时干多件事”
1. 前言
裸机大循环在多任务场景下实时性差、代码混乱,RTOS(实时操作系统)是嵌入式进阶的必经之路。本篇解答 STM32F103C8T6 能跑什么系统、为什么选 FreeRTOS、怎么快速移植。
2. 支持的操作系统清单
结论:FreeRTOS 可以流畅运行,且是最优选择。
轻量级 RTOS 对比
| 操作系统 | 内核 RAM 占用 | 内核 Flash 占用 | 特点 |
|---|---|---|---|
| FreeRTOS | ~4KB | ~6KB | 生态最完善、资料最多、完全免费商用 |
| RT-Thread Nano | ~3KB | ~5KB | 国产 RTOS,中文资料丰富,易用性好 |
| uCOS-II | ~3KB | ~10KB | 经典 RTOS,商业需授权,学习用途无限制 |
| LiteOS-M | ~3KB | ~6KB | 华为轻量物联网 OS,低功耗优化好 |
以上系统内核均远小于芯片资源上限,剩余空间足够运行业务代码。Linux、Android 等大系统无法运行,仅适用于 Cortex-A 系列高性能芯片。
数据来源:各 RTOS 官方文档最小资源占用统计
(均有大量实际移植案例)
3. 5 分钟快速移植:STM32CubeMX 生成 FreeRTOS 工程
ST 官方工具支持一键生成移植好的工程,无需手动修改启动文件。
核心配置步骤
- 新建工程选择 STM32F103C8T6,配置外部 8MHz 晶振、主频 72MHz
- 配置 USART1(蓝牙通信)、TIM2(电机 PWM)等外设
- 左侧 Middleware → FREERTOS → 选择 CMSIS_V1 接口
- 配置默认任务栈大小 128 字(512 字节),满足基础任务需求
- 生成 Keil/STM32CubeIDE 工程
多任务框架代码解析
#include "FreeRTOS.h" // FreeRTOS核心头文件 #include "task.h" // 任务管理API头文件 #include "cmsis_os.h" // ST官方CMSIS-RTOS封装层 #include "main.h" // 任务句柄:用于操控任务(删除、挂起等) osThreadId defaultTaskHandle; osThreadId MotorTaskHandle; // 电机控制任务句柄 osThreadId UartTaskHandle; // 串口通信任务句柄 /** @brief 电机控制任务函数 @param argument: 任务传入参数 @retval 无 @note 所有RTOS任务都是死循环,不能返回;专门处理电机运动逻辑 */ void Motor_Task(void const * argument) { for(;;) // 任务死循环 { // 从指令队列取出指令,执行对应电机动作 osDelay(10); // 10ms执行一次,保证控制实时性,同时释放CPU } } /** @brief 串口通信任务函数 @param argument: 任务传入参数 @retval 无 @note 高优先级任务,专门处理蓝牙数据接收与解析 */ void Uart_Task(void const * argument) { for(;;) { // 检查串口缓冲区,解析指令后写入电机任务队列 osDelay(20); // 20ms处理一次串口数据 } } /** @brief FreeRTOS初始化函数 @retval 无 @note 在main函数中调用,启动调度器前创建所有任务 */ void MX_FREERTOS_Init(void) { // 创建电机控制任务,优先级normal osThreadDef(MotorTask, Motor_Task, osPriorityNormal, 0, 128); MotorTaskHandle = osThreadCreate(osThread(MotorTask), NULL); // 创建串口任务,优先级aboveNormal,保证指令及时响应 osThreadDef(UartTask, Uart_Task, osPriorityAboveNormal, 0, 128); UartTaskHandle = osThreadCreate(osThread(UartTask), NULL); }代码功能:标准 FreeRTOS 多任务框架,拆分电机控制和串口通信两个独立任务,通过队列传递数据 (标准框架,业务逻辑需自行填充)
4. 裸机 vs RTOS 对比
| 场景 | 裸机大循环 | FreeRTOS 多任务 |
|---|---|---|
| 并发能力 | 伪并发,代码互相阻塞 | 真并发,任务独立运行 |
| 实时性 | 无优先级,高耗时代码会阻塞所有逻辑 | 优先级调度,高优先级任务优先响应 |
| 延时精度 | 死循环延时不准,易被打断 | 系统定时器调度,延时精确 |
| 可维护性 | 复杂项目代码混乱,耦合度高 | 模块化设计,每个任务职责单一 |
5. 本篇小结
- STM32F103C8T6 可运行多款轻量级 RTOS,无法运行 Linux 等大系统
- 推荐 FreeRTOS,生态最好且支持 STM32CubeMX 一键移植
- 多任务架构提升系统实时性和代码可维护性
- 给出了可直接复用的双任务框架代码
第 4 篇:全栈软件与云端大模型对接 —— 让小车听懂人话
1. 前言
硬件和系统搞定后,本篇讲软件栈:需要哪些开发工具?手机 APP 怎么选?怎么调用大模型 API?怎么把自然语言转换成 STM32 能识别的指令?
2. 完整软件工具清单
2.1 嵌入式开发端
| 软件名称 | 作用 | 是否免费 |
|---|---|---|
| STM32CubeMX | 图形化外设配置,生成初始化代码和 RTOS 工程 | 是(ST 官方) |
| STM32CubeIDE | 代码编写、编译、调试,官方免费 IDE | 是 |
| Keil MDK5 | 行业主流 IDE,个人学习版免费 | 个人免费 / 商业收费 |
| XCOM 串口助手 | 串口调试、蓝牙通信测试 | 是 |
推荐新手用 STM32CubeMX + STM32CubeIDE,全套免费且官方兼容性最好
| 方案 | 难度 | 特点 |
|---|---|---|
| App Inventor | 极低 | 图形化拖拽编程,零基础快速出原型 |
| 微信小程序 | 中等 | 无需安装,扫码即用,原生支持网络请求 |
| Android Studio | 高 | 原生 APP,性能最强,功能最完整 |
本项目推荐微信小程序:无需安装、原生支持 HTTP 调用大模型 API、蓝牙 API 完善。
(部分安卓机型蓝牙兼容性存在小差异)
2.3 云端大模型
国内主流大模型均提供 HTTP API,均可接入:豆包大模型、通义千问、文心一言等,核心是调用聊天补全接口,通过 Prompt 约束输出格式。
3. 核心技术:大模型指令解析 Prompt 设计
这是项目的灵魂:让大模型把自然语言转换成固定格式的结构化指令,STM32 只需要执行简单指令。
Prompt 示例
你是智能小车指令解析器,用户输入自然语言控制指令,你必须转换成标准JSON格式输出。 支持的指令类型: forward:前进,参数duration(秒,可选)、speed(0-100,可选,默认50) backward:后退,参数同上 turn_left:左转,参数angle(角度,可选,默认45) turn_right:右转,参数angle(角度,可选,默认45) stop:停止,无参数 query_battery:查询电量,无参数 要求: 只输出JSON,不要任何解释、多余文字 多条指令按顺序放在数组中 无法识别返回{"error": "无法识别的指令"} 用户输入:慢慢往前走3秒,然后右转90度,停下报一下电量大模型输出示例
[ {"action": "forward", "duration": 3, "speed": 30}, {"action": "turn_right", "angle": 90}, {"action": "stop"}, {"action": "query_battery"} ]手机 APP 解析 JSON 后,通过蓝牙逐条发给 STM32 执行即可。
(大模型偶尔会输出格式错误内容,需加异常处理)
4. 串口通信协议与解析代码
蓝牙传输字节流,需要定义简单协议保证 STM32 正确识别指令。
极简协议格式
| 指令码(十六进制) | 功能 | 参数格式 |
|---|---|---|
| 0x01 | 前进 | 1 字节速度 + 2 字节时长(毫秒,大端) |
| 0x02 | 后退 | 同上 |
| 0x03 | 左转 | 2 字节角度(大端) |
| 0x04 | 右转 | 同上 |
| 0x05 | 停止 | 无参数 |
| 0x06 | 查询电量 | 无参数,返回 1 字节电量百分比 |
STM32 串口解析核心代码
#include "stm32f1xx_hal.h" #include <string.h> extern UART_HandleTypeDef huart1; // 串口1句柄,连接蓝牙模块 uint8_t uart_rx_buf[32]; // 串口接收缓冲区 uint8_t rx_index = 0; // 缓冲区写入索引 /** @brief 串口接收中断回调函数 @param huart: 串口句柄 @retval 无 @note 每收到1字节触发一次中断,存入缓冲区,不做解析避免阻塞 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART1) // 判断是串口1 { if(rx_index < 31) // 防止缓冲区溢出 { rx_index++; } else { rx_index = 0; // 溢出则清空缓冲区 } // 开启下一次接收中断,持续接收数据 HAL_UART_Receive_IT(&huart1, &uart_rx_buf[rx_index], 1); } } /** @brief 指令解析函数,在串口任务中周期调用 @retval 无 @note 解析缓冲区指令,调用电机函数执行动作 */ void Uart_Parse_Command(void) { if(rx_index == 0) return; // 无数据直接返回 switch(uart_rx_buf[0]) // 首字节为指令码 { case 0x01: // 前进指令 if(rx_index >= 4) // 校验参数长度:1指令+1速度+2时长 { uint8_t speed = uart_rx_buf[1]; // 大端字节序转换为16位整数 uint16_t duration = (uart_rx_buf[2] << 8) | uart_rx_buf[3]; Motor_Forward(speed); // 执行前进 osDelay(duration); // 持续指定时长 Motor_Stop(); // 到时停止 } break; case 0x05: // 停止指令 Motor_Stop(); break; // 其他指令逻辑同理... default: break; } rx_index = 0; // 解析完成清空缓冲区 }代码功能:中断接收 + 任务解析的标准架构,中断只存数据,任务做解析,兼顾实时性和稳定性(实际项目建议加帧头、校验和,进一步提升可靠性)
5. 本篇小结
- 软件开发分为嵌入式固件、手机端、云端 API 三部分
- 推荐 STM32CubeIDE 开发固件、微信小程序做手机端
- 核心是 Prompt 工程,让大模型输出结构化 JSON 指令
- 定义了串口通信协议,给出了可复用的解析代码
第 5 篇:避坑指南与进阶思考 —— 新手容易忽略的问题
1. 前言
前面讲了正向实现流程,本篇讲实战踩坑:做这个项目会遇到哪些常见问题?有什么注意事项?涉及哪些跨学科知识?
2. 十大核心注意事项
- 资源余量:永远留 20% 以上的 RAM 和 Flash 余量,避免大数组、滥用 sprintf 导致内存溢出死机
- 实时性边界:大模型推理有几百毫秒到几秒延迟,实时控制(避障、调速)必须本地实现,大模型只做高层规划
- 电机电磁干扰:电机电刷会产生强干扰,导致串口乱码。解决方法:电源分区、电机两端并滤波电容、强弱电分开走线
- 离线降级:无网络时大模型不可用,必须保留本地固定指令作为降级方案
- 失控保护:通信丢包可能导致小车失控,必须加超时自动停车机制和物理急停按键
- API 成本:调试阶段频繁调用 API 会产生费用,建议用免费额度,加本地缓存减少重复调用
- 电平匹配:STM32 和蓝牙都是 3.3V,禁止直接接 5V,否则烧模块
- 看门狗复位:开启独立看门狗,程序跑飞后自动复位,提升稳定性
- 功耗优化:关闭不用的外设时钟、空闲时进入低功耗模式,提升续航
- 数据隐私:上传云端的指令数据注意脱敏,避免泄露个人信息
3. 容易忽略的进阶问题
- 多轮对话上下文维护:用户说 “再快点”,大模型需要结合历史指令理解
- 语音识别准确率:口音、环境噪音会影响语音转文字效果
- 跨平台蓝牙兼容性:iOS 和安卓蓝牙栈存在差异
- OTA 固件升级:是否支持无线升级,避免每次拆壳接下载器
- 环境适应性:灰尘、地面摩擦对小车运行的影响
4. 涉及的交叉学科
这是一个典型的多学科交叉项目,不止是写代码:
- 电子信息:单片机原理、模拟电路(电源 / 滤波)、数字电路、通信原理
- 计算机科学:嵌入式软件工程、自然语言处理、移动端开发、网络编程
- 自动控制:电机控制、PID 调速、实时系统调度
- 机械工程:底盘结构、传动受力、材料强度
- 电源电子:电池管理、充放电、功耗优化
- 电磁兼容:干扰抑制、布线规范
5. 进阶升级方向
- 加超声波传感器,实现本地避障,大模型只做路径规划
- 加编码器,实现速度闭环,提升运动精度
- 更换 ESP32 主控,本地跑量化微型模型,实现离线语音识别
- 增加摄像头,结合大模型实现视觉理解
- 多车协同,单个大模型调度多台小车
6. 本篇小结
- 总结了 10 个新手最容易踩的坑和对应解决方法
- 梳理了项目容易忽略的进阶问题
- 拆解了项目涉及的 6 大类交叉学科知识
- 给出了 5 个进阶升级方向
第 6 篇:项目复盘与拓展 —— 从 Demo 到产品的距离
1. 前言
专栏最后一篇,我们做整体复盘:从 Demo 到可落地的产品,还差什么?以及如何把这套方案复用在其他嵌入式项目上。
2. 项目完整复盘
核心结论回顾
- STM32F103C8T6 本地无法运行大模型,云端协同是唯一可行路径
- 大模型的核心价值是提升交互体验,不替代嵌入式实时控制
- 完整项目需要硬件、固件、APP、云端全栈能力
成本估算(基础版)
总物料成本约 80-120 元,是非常低成本的 AI 嵌入式练手项目。
3. 方案复用:大模型 + 嵌入式的通用范式
这套「云端大脑 + 边缘执行」的架构,可以复用在几乎所有嵌入式项目中:
- 智能家电:自然语言控制空调、台灯
- 工业设备:自然语言查询设备状态、故障诊断
- 智能家居:语音控制窗帘、门锁
- 机器人:高层任务规划,底层运动控制本地执行
4. 从 Demo 到产品的差距
学习 Demo 和商用产品之间,还有很长的路:
- 稳定性:7×24 小时运行不死机、抗干扰能力
- 量产性:硬件成本优化、生产工艺、测试标准
- 合规性:无线认证、隐私合规、安全标准
- 体验:响应速度、容错能力、用户界面
5. 专栏结语
本专栏从最基础的 “能不能跑” 出发,一步步拆解了硬件、系统、软件、云端全链路,希望帮你建立完整的技术认知。嵌入式 + AI 是未来的大趋势,STM32 虽然资源有限,但选对架构一样能用上大模型的能力。