STM32F407 + ML307 阿里云物联网项目总结

STM32F407 + ML307 阿里云物联网项目总结


一、今日完成的功能

功能模块 状态 说明
DHT11 温湿度采集 ✅ 完成 温度、湿度正常读取
超声波测距 ✅ 完成 距离数据正常测量
ML307 4G 通信 ✅ 完成 AT 指令连接稳定
阿里云 MQTT 连接 ✅ 完成 设备在线,数据上报成功
数据上报(温湿度+距离) ✅ 完成 三合一数据正常上传
结构体管理数据 ✅ 完成 代码模块化,易扩展
云平台物模型 ✅ 完成 温度、湿度、距离属性已添加
独立供电问题 ⚠️ 待解决 需要 5V/2A 独立电源

二、代码架构

1. 结构体定义(ml307.h

c

复制代码
typedef struct
{
    float temperature;      // 温度 (°C)
    float humidity;         // 湿度 (%)
    uint32_t distance;      // 距离 (mm)
} SensorData_t;
2. 上报函数(ml307.c

c

复制代码
void ML307_ReportSensor(SensorData_t *data)
{
    char json[192];
    sprintf(json, "{\"id\":\"1\",\"params\":{\"temperature\":%.1f,\"humidity\":%.1f,\"distance\":%lu}}", 
            data->temperature, data->humidity, data->distance);
    // 通过 AT+MQTTPUB 上报
}
3. 主循环(main.c

c

复制代码
SensorData_t sensor_data;

while(1)
{
    // 读取温湿度
    DHT_GetData(dht_buf);
    sensor_data.temperature = dht_buf[2];
    sensor_data.humidity = dht_buf[0];
    
    // 读取距离
    sensor_data.distance = SR04_GetDistance();
    
    // 上报数据
    ML307_ReportSensor(&sensor_data);
    
    Delay_ms(30000);  // 30秒一次
}

三、阿里云平台配置

属性 标识符 数据类型 步长 单位
温度 temperature float 0.1 °C
湿度 humidity float 0.1 %
距离 distance int32 1 mm

四、硬件接线(最终确认)

ML307 STM32F407 说明
VCC 独立 5V/2A 必须独立供电
GND GND 共地
TXD PB11 模块发送 → 单片机接收
RXD PB10 单片机发送 → 模块接收
传感器 引脚 说明
DHT11 DATA PG9 温湿度(需上拉电阻)
超声波 TRIG PB6 触发信号
超声波 ECHO PE6 回响信号

五、关键参数记录

阿里云连接参数

c

复制代码
#define ALI_PRODUCT_KEY     "k067yCVEsI7"
#define ALI_DEVICE_NAME     "test"
#define ALI_MQTT_HOST       "iot-06z00ab4mcvi9le.mqtt.iothub.aliyuncs.com"
#define ALI_CLIENT_ID       "k067yCVEsI7.test|securemode=2,signmethod=hmacsha256,timestamp=1774405660503|"
#define ALI_USERNAME        "test&k067yCVEsI7"
#define ALI_PASSWORD        "86c4ffc040da26d56a34f369a897899a98244dd0d96e9a51f68c9b16a14456e8"
上报 JSON 格式

json

复制代码
{
  "id": "1",
  "params": {
    "temperature": 20.0,
    "humidity": 62.0,
    "distance": 27
  }
}

六、遇到的问题及解决方案

问题 原因 解决方案
DHT11 读取失败 开始信号拉高 30ms 太长 改为 30us
ML307 无响应 供电不足(4.53V) 独立 5V/2A 电源
上报时无 > 响应 中断函数只检测 \n 增加 > 检测
云端离线但程序运行 MQTT 连接检测失败 手动验证连接成功
拔掉下载线掉电 下载线同时供电 独立供电

七、待解决问题

  1. 独立供电:ML307 需要 5V/2A 独立电源,STM32 需要另一路供电

  2. 电源稳定性:长时间运行不掉线

  3. 云端数据验证:确认数据持续更新


八、后续扩展建议

  1. 添加更多传感器:GPS、电池电量、空气质量等

  2. 云端下发指令:控制 LED、蜂鸣器等

  3. 数据本地存储:网络不好时暂存数据

  4. 告警功能:温湿度超限时推送通知

相关推荐
小糯米6012 小时前
C++ 单调栈原理与模板
开发语言·c++·算法
东北甜妹2 小时前
Python脚本
java·开发语言·前端
Zarek枫煜2 小时前
[特殊字符]栈(Stack)原理详解 \+ Zig / C3 双语言实现
c语言·单片机·嵌入式硬件·算法
NGC_66112 小时前
ConcurrentHashMap1.8 多线程扩容机制
java·开发语言
浮若于心2 小时前
WSL2 Ubuntu 占用 C 盘空间清理指南
linux·c语言·ubuntu
星辰_mya2 小时前
自定义注解 + AOP:打造企业级通用组件(日志、限流、幂等)
java·开发语言·spring·面试·架构师
特蕾西娅今天也在迷茫2 小时前
计算机编码和编码的那些事
c语言·其他·预编码
小草cys2 小时前
轮足机器人无法直立的原因,哎
单片机·嵌入式硬件·机器人