基于K210与STM32的智能垃圾分类与物联网监管系统

若该文为原创文章,转载请注明原文出处。

一、项目概述

1.1 项目背景

随着国家对生活垃圾强制分类政策的推进,传统的人工分拣方式效率低、成本高,已难以满足需求。与此同时,物联网与边缘AI技术的成熟为垃圾分类的智能化提供了技术基础。

1.2 项目简介

本系统以 STM32F103C8T6 为主控核心,K210 负责基于YOLOv2的垃圾图像识别与分类,通过 ESP-01S (ESP8266) 模块经MQTT协议将数据上报至 中国移动OneNet云平台。系统实现了从"图像识别 → 本地自动分类 → 云端数据监管"的完整闭环。

1.3 核心功能
功能模块 具体描述
视觉识别 K210运行YOLOv2模型,识别厨余可回收其他有害四类垃圾
自动分类 STM32根据识别结果,控制舵机打开对应垃圾桶盖
本地交互 OLED显示识别结果、语音播报分类提示、按键手动控制
数据上云 通过ESP-01S将分类结果、时间等数据上报至OneNet
远程监控 OneNet平台实时展示分类统计,手机APP/网页可查询历史记录
远程控制 云端可下发指令(如复位、手动开盖等)
1.4 性能指标
  • 识别准确率:≥92%(四分类)

  • 识别速度:≤200ms(K210端)

  • 通信协议:MQTT v3.1.1

  • 数据上报频率:事件触发(分类时)+ 定时心跳(每30秒)

二、系统总体设计

2.1 系统架构

text

复制代码
+------------------+     UART      +------------------+     GPIO/PWM/I2C      +---------------------------+
|   K210视觉模块    | -----------> |   STM32主控      | -------------------> |  本地执行与交互            |
|  (垃圾分类YOLO)   |  识别结果     |  (逻辑决策中心)   |                      |   - 舵机 (PWM)            |
|  模型:四分类      |  4类编码      |                  |                      |   - OLED (I2C)            |
+------------------+              +------------------+                      |   - 语音播报 (UART/GPIO)  |
                                    |     |                                 |   - 按键 (GPIO)           |
                                    |     | UART                           |   - 蜂鸣器/LED (GPIO)     |
                                    |     v                                 +---------------------------+
                                    | +------------------+
                                    | |   ESP-01S        |
                                    | |  (WiFi模块)      |
                                    | +------------------+
                                    |         |
                                    |     MQTT/JSON
                                    v         v
                             +----------------------+
                             |   OneNet云平台        |
                             |   - 数据存储与展示    |
                             |   - 历史记录查询      |
                             |   - 远程指令下发      |
                             +----------------------+
                                    |
                                    v
                             +----------------------+
                             |   手机APP / 网页      |
                             |   (实时监控/历史查询) |
                             +----------------------+
2.2 数据流说明
  1. 识别流:K210摄像头采集图像 → YOLOv2推理 → 识别结果(类别ID+置信度)通过UART发送给STM32

  2. 控制流:STM32解析识别结果 → 驱动对应舵机打开桶盖 → OLED显示 + 语音播报

  3. 上报流:STM32通过UART向ESP-01S发送AT指令 → ESP-01S连接WiFi → MQTT上报至OneNet

  4. 下行流:OneNet下发指令 → ESP-01S接收 → STM32解析执行

三、硬件设计

3.1 硬件清单
模块 型号 数量 接口 作用
主控MCU STM32F103C8T6 1 - 系统逻辑核心
AI视觉 正点原子K210 + OV2640 1 UART 垃圾分类识别
WiFi模块 ESP-01S (ESP8266) 1 UART 连接OneNet
舵机 SG90 / MG995 4 PWM 控制4个垃圾桶盖
OLED显示屏 0.96寸 SSD1306 1 I2C 显示识别结果、系统状态
语音播报 JQ8900 MP3模块 1 UART/GPIO 播放分类提示语音
按键 轻触开关 2 GPIO 手动控制、系统复位
蜂鸣器 5V有源 1 GPIO 操作提示音
LED指示灯 红/绿/蓝 3 GPIO 状态指示
电源 5V/2A适配器 1 DC口 系统供电

说明 :STM32与ESP-01S的UART通信波特率固定为 115200 ,数据位8位,停止位1位,无校验。ESP-01S的VCC必须稳定供给 3.3V±5%,建议使用独立LDO供电。

3.2 引脚连接表(STM32端)
STM32引脚 外设 说明
PA9 (USART1_TX) K210 (RX) 发送查询指令
PA10 (USART1_RX) K210 (TX) 接收识别结果
PA2 (USART2_TX) ESP-01S (RX) 发送AT指令/MQTT数据
PA3 (USART2_RX) ESP-01S (TX) 接收WiFi/MQTT数据
PA0 JQ8900 (RX) 语音播报控制(或使用IO触发)
PB0 蜂鸣器 高电平驱动
PB1-PB3 LED(红/绿/蓝) 状态指示灯
PB4-PB7 舵机信号线 PWM控制4个舵机
PB8 OLED SCL I2C时钟
PB9 OLED SDA I2C数据
PB10 KEY1(手动开盖) 输入,下拉
PB11 KEY2(系统复位) 输入,下拉

四、软件设计

4.1 K210端程序(垃圾分类识别)

基于你已有程序,核心修改为通过UART发送结构化识别结果:

python

复制代码
# K210端 - 垃圾分类识别与串口发送
import sensor, image, time
from maix import KPU
from machine import UART

labels = ['chuyu', 'recycal', 'other', 'humful']  # 四分类
# ... 模型加载与YOLO初始化代码(参考你已有程序)...

# 类别编码映射(供STM32解析)
CLASS_CODE = {'chuyu': 0, 'recycal': 1, 'other': 2, 'humful': 3}

uart = UART(UART.UART1, 115200, 8, 0, 0, timeout=1000)

while True:
    img = sensor.snapshot()
    objects = kpu.run_yolo2(task, img)
    
    if objects:
        for obj in objects:
            idx = obj.classid()
            label = labels[idx]
            conf = obj.value()
            # 发送格式: CLASS:类别编码:置信度:类别名称
            # 示例: CLASS:1:0.92:recycal
            msg = "CLASS:{}:{:.2f}:{}\n".format(CLASS_CODE[label], conf, label)
            uart.write(msg.encode())
            # 同时LCD显示...
4.2 STM32端程序(主控逻辑)

主程序流程图:

text

复制代码
系统初始化(时钟、GPIO、UART、PWM、I2C)
OLED显示“系统启动”
舵机初始化(全部关闭)
ESP-01S初始化(AT测试 → 连接WiFi → 连接OneNet MQTT)

进入主循环:
  1. 检测UART1是否有K210数据
     - 有 → 解析识别结果(CLASS:编码:置信度:名称)
     - 更新当前分类结果
  2. 如果识别到垃圾且置信度 > 阈值:
     - OLED显示识别结果
     - 语音播报对应分类提示
     - 控制对应舵机打开桶盖(持续3秒后自动关闭)
     - 蜂鸣器短鸣提示
     - 通过ESP-01S上报分类事件到OneNet
  3. 检测按键:
     - KEY1短按 → 手动触发对应桶盖打开(测试用)
     - KEY2短按 → 系统复位
  4. 定时任务(每30秒):
     - 上报心跳数据(系统状态、累计分类统计)
  5. 处理ESP-01S串口接收的云端指令
  6. 刷新OLED显示
  7. 延时50ms,循环

串口通信协议:

方向 格式 示例 说明
K210 → STM32 CLASS:编码:置信度:名称\n CLASS:1:0.92:recycal\n 识别结果
STM32 → ESP-01S AT指令集 AT+CWJAP="SSID","PWD"\r\n WiFi连接
STM32 → OneNet JSON (MQTT) {"class_id":1,"class_name":"recycal","confidence":0.92} 数据上报
OneNet → STM32 JSON (MQTT) {"cmd":"reset"} 远程指令
4.3 ESP-01S AT指令流程

ESP-01S需烧录支持MQTT的AT固件,STM32通过UART2发送以下指令序列:

c

复制代码
// 1. 复位模块
AT+RST\r\n
// 2. 设置STA模式
AT+CWMODE=1\r\n
// 3. 连接WiFi
AT+CWJAP="SSID","PASSWORD"\r\n
// 4. 配置MQTT用户(产品ID、设备ID、APIKey/Token)[reference:27][reference:28]
AT+MQTTUSERCFG=0,1,"设备名称","产品ID","鉴权信息",0,0,""\r\n
// 5. 连接OneNet MQTT服务器[reference:29]
AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1\r\n
// 6. 订阅下行指令Topic
AT+MQTTSUB=0,"$sys/产品ID/设备ID/thing/service/property/set",1\r\n
// 7. 发布数据(上报分类结果)[reference:30]
AT+MQTTPUB=0,"$sys/产品ID/设备ID/thing/event/property/post","{\"class_id\":1}",1,0\r\n
4.4 OneNet数据格式

上报数据采用 OneJSON格式

json

复制代码
{
  "id": "123",
  "version": "1.0",
  "params": {
    "class_id": {
      "value": 1
    },
    "class_name": {
      "value": "recycal"
    },
    "confidence": {
      "value": 0.92
    },
    "timestamp": {
      "value": 1691234567
    }
  }
}

五、OneNet平台配置

5.1 平台侧配置步骤
  1. 注册登录 :访问OneNet官网(https://open.iot.10086.cn)注册账号

  2. 创建产品:选择"MQTT"协议,数据格式选"OneJSON"

  3. 添加设备 :在产品下注册设备,获取 产品ID、设备ID、鉴权信息

  4. 定义数据流 :创建 class_idclass_nameconfidence 等数据流

  5. 配置触发器:设置告警规则(如识别到"有害垃圾"时推送通知)

5.2 历史记录查询

OneNet平台自动保存设备上报的历史数据。用户可通过以下方式查询:

  • OneNet控制台:在"设备管理 → 数据流"中按时间范围查询历史数据

  • 手机APP:使用OneNet官方APP绑定设备,查看历史记录

  • API查询:调用OneNet RESTful API获取历史数据

六、功能演示与效果

6.1 本地端效果
场景 系统响应
用户投放垃圾 K210识别→STM32解析→对应桶盖自动打开
识别成功 OLED显示"可回收物 92%",语音播报"请投放至可回收桶"
识别失败 OLED显示"无法识别,请重新投放"
桶满检测 LED闪烁报警(需扩展超声波模块)
6.2 云端端效果
功能 实现方式
实时数据 OneNet控制台展示最新分类结果
历史曲线 各类垃圾分类数量随时间变化图表
统计报表 日/周/月分类统计(通过API二次开发)
远程控制 云端下发指令远程开盖/复位

七、创新点与技术特色

  1. 边缘AI + 物联网融合:K210在本地完成推理,仅上传结构化数据,降低带宽和云端算力需求

  2. 四分类全覆盖:支持厨余、可回收、其他、有害四类生活垃圾

  3. 本地-云端双轨记录:本地OLED即时反馈 + 云端持久化存储与追溯

  4. 低成本、易部署:所有模块均为市面常见型号,总成本可控在500元以内

  5. 双向通信:不仅上报数据,还支持云端远程控制

八、项目实施计划

阶段 任务 时间
硬件搭建 连接各模块,检查供电 1天
K210模型部署 烧录垃圾分类模型,调试串口输出 1天
STM32外设驱动 OLED、舵机、语音、按键调试 2天
ESP-01S通信 AT指令调试,WiFi连接测试 1天
OneNet接入 平台配置,MQTT数据上报测试 1天
系统联调 全流程联合调试 2天
优化与文档 阈值调整,代码整理,文档撰写 1天

总开发周期约9天

九、常见问题与解决方案

问题 可能原因 解决方法
K210不发送数据 波特率不匹配或接线错误 检查波特率(115200)和TX/RX交叉连接
ESP-01S连接WiFi失败 SSID/密码错误或信号弱 检查AT指令,靠近路由器测试
OneNet连接超时 MQTT参数错误 确认产品ID、设备ID、鉴权信息正确
舵机不动作 PWM信号或供电不足 检查舵机供电(需5V/2A以上)
ESP-01S供电不稳 电流尖峰导致复位 使用独立3.3V LDO供电

十、总结与展望

本项目成功实现了基于 K210 + STM32 + ESP-01S + OneNet 的智能垃圾分类与物联网监管系统,具备以下核心价值:

  • 环保价值:提高垃圾分类准确率,促进资源回收利用

  • 管理价值:云端数据可视化,为城市垃圾分类管理提供数据支撑

  • 技术价值:验证了边缘AI与物联网融合的可行性与实用性

未来扩展方向:

  • 增加 超声波传感器 实现桶满检测与预警

  • 增加 人脸识别 实现投放人身份绑定与积分奖励

  • 接入 4G模块 作为WiFi断线时的备用通信通道

  • 开发 微信小程序 提供更便捷的移动端访问

十一、参考资料

  1. OneNet开发者中心:OneNET - 中国移动物联网开放平台

  2. STM32F103C8T6参考手册

  3. K210 MaixPy文档

  4. ESP8266 AT指令集

  5. 《基于K210和YOLOv2的智能垃圾分类平台》

如有侵权,或需要完整代码,请及时联系博主。

相关推荐
周洲08301 小时前
STM32 GPIO 外部中断深度解析:边沿触发 / 电平触发、NVIC 优先级配置、中断嵌套实战
stm32·单片机·嵌入式硬件
LCG元2 小时前
STM32F103 CAN 总线通信实战:标准库双机通信与过滤器配置精讲
stm32·单片机·嵌入式硬件
zlinear数据采集卡2 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
z20348315204 小时前
STM32单片机控制无源蜂鸣器播放《晴天》
stm32·单片机·嵌入式硬件
老孙讲技术6 小时前
【4G IPC 上云】临时点位怎么免布线上云?listDeviceDetailsByPage + 辅码流预览|智慧工地实战
后端·物联网
振南的单片机世界6 小时前
硬核菊花链:3个GPIO+无限74HC595=端口扩展“无限套娃”
arm开发·stm32·单片机·嵌入式硬件
数字新视界9 小时前
信创动环监控厂家深入剖析智能机房环境监控技术应用与挑战
服务器·数据库·物联网·芯片·动环监控系统
LCG元10 小时前
STM32软件模拟I2C驱动多从机实战:AHT20温湿度 + BH1750光照 + 0.96寸OLED实时显示
stm32·单片机·嵌入式硬件
笨鸟先飞,勤能补拙10 小时前
AI Agent应用领域深度解析:从概念到落地的全维度审视
大数据·人工智能·python·物联网·安全·网络安全·github