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

相关推荐
chao1898444 小时前
基于 SPEA2 的多目标优化算法 MATLAB 实现
开发语言·算法·matlab
项目題供诗4 小时前
STM32-TIM定时中断(十)
stm32·单片机·嵌入式硬件
普中科技4 小时前
【普中 51-Ai8051 开发攻略】-- 第 24 章 RTC 时钟实验
单片机·嵌入式硬件·rtc·实时时钟·普中科技·ai8051u·aicube
赏金术士4 小时前
Kotlin 习题集 · 高级篇
android·开发语言·kotlin
楼兰公子5 小时前
buildroot 在编译rust时裁剪平台类型数量的方法
开发语言·后端·rust
潜创微科技5 小时前
IT9201+IT66021:便携 KVM 一站式方案,音视控三合一免驱即插即用
嵌入式硬件·音视频
知识领航员5 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
吴声子夜歌5 小时前
Go——并发编程
开发语言·后端·golang
CHANG_THE_WORLD5 小时前
PE文件二进制对比
stm32·单片机·嵌入式硬件
ooseabiscuit6 小时前
Laravel4.x:现代PHP框架的奠基之作
java·开发语言·php