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 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
傲世仙尊3 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
牵猫散步的鱼儿3 天前
重载、重写(覆盖)、重定义区别
c语言
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
phltxy3 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
phltxy3 天前
C 语言中的数据存储:从类型到二进制位
c语言
深圳老胡3 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio