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. 告警功能:温湿度超限时推送通知

相关推荐
集成显卡3 小时前
Rust实战七 |基于带 colored 颜色文字控制台的批量文件删除工具
开发语言·后端·rust
比昨天多敲两行3 小时前
linux 线程概念与控制
java·开发语言·jvm
huaweichenai4 小时前
php 根据每个类型的抽签范围实现抽签功能
开发语言·php
codeejun5 小时前
每日一Go-73、云原生成本优化 —— 资源限制 & 指标驱动扩容
开发语言·云原生·golang
就叫_这个吧5 小时前
Java注解、元注解、自定义注解定义及应用
java·开发语言·注解
Sam_Deep_Thinking6 小时前
聊聊Java中的of
java·开发语言·架构
不脱发的程序猿8 小时前
AI Coding时上下文不够用咋办?
单片机·嵌入式硬件·嵌入式
小小de风呀8 小时前
de风——【从零开始学C++】(十一):list的基本使用和模拟实现
开发语言·c++·list
三行数学9 小时前
Matlab之父克利夫·莫勒尔逝世
开发语言·matlab
陌路209 小时前
C++高级进阶--夯实进阶基础(1)
开发语言·c++