当前位置: 首页 > news >正文

从厨房秤到智能称重:用STM32F103和HX711打造你的第一个物联网传感器节点

从厨房秤到智能称重:用STM32F103和HX711打造你的第一个物联网传感器节点

在智能家居和精准农业的浪潮中,称重技术正从简单的测量工具进化为数据感知节点。想象一下:当厨房秤能自动记录食材库存,或花盆通过重量变化提醒浇水,这些场景背后都依赖一个关键组件——智能称重传感器。本文将带您从零构建一个基于STM32F103和HX711的物联网称重系统,涵盖硬件设计、数据上传和可视化全流程。

1. 硬件架构设计

1.1 核心组件选型

STM32F103C8T6作为主控芯片,以其72MHz主频和丰富的外设接口成为性价比之选。搭配HX711这款24位高精度ADC芯片,可轻松实现毫克级测量精度。典型硬件连接方案如下:

模块连接引脚功能说明
HX711 DOUTPA1数据输入
HX711 PD_SCKPA0时钟控制
ESP-01S TXUSART2_RXWi-Fi模块数据接收
ESP-01S RXUSART2_TXWi-Fi模块数据发送

提示:应变片选择直接影响量程,20kg规格的传感器适合大多数家用场景,工业应用建议选用铝合金材质传感器。

1.2 电源管理优化

物联网节点常需电池供电,低功耗设计尤为关键:

  • 启用STM32的睡眠模式,仅在测量时唤醒
  • 为HX711设计独立电源开关电路
  • 配置ESP-01S的深度睡眠模式(需硬件复位唤醒)
// 低功耗配置示例 void Enter_LowPowerMode(void) { HAL_GPIO_WritePin(PWR_CTRL_GPIO_Port, PWR_CTRL_Pin, GPIO_PIN_RESET); // 关闭HX711电源 HAL_UART_DeInit(&huart2); // 禁用Wi-Fi模块 HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); }

2. 称重算法实现

2.1 数据采集与滤波

HX711的10Hz采样率需配合数字滤波才能获得稳定读数。采用移动平均+阈值滤波的复合算法:

#define SAMPLE_COUNT 5 long Get_FilteredWeight(void) { long samples[SAMPLE_COUNT]; for(int i=0; i<SAMPLE_COUNT; i++){ samples[i] = Get_Weight(); HAL_Delay(100); } // 剔除最大最小值 long sum = 0; long max = samples[0], min = samples[0]; for(int i=0; i<SAMPLE_COUNT; i++){ if(samples[i] > max) max = samples[i]; if(samples[i] < min) min = samples[i]; sum += samples[i]; } return (sum - max - min)/(SAMPLE_COUNT-2); }

2.2 动态校准机制

传统电子秤需手动校准,智能系统可实现自动校准:

  1. 上电后检测10秒无负载状态,自动记录零点
  2. 已知重量校准法:放置500g标准砝码后触发校准命令
  3. 温度补偿:内置NTC监测环境温度,修正漂移误差

3. 物联网集成方案

3.1 通信协议选择

对比三种主流物联网协议:

协议功耗传输距离数据速率适用场景
Wi-Fi固定电源设备
BLE移动终端直连
LoRa极低户外分散节点

3.2 MQTT数据上传

通过ESP-01S连接MQTT Broker的完整流程:

void Publish_WeightData(float weight) { char payload[50]; sprintf(payload, "{\"weight\":%.2f,\"unit\":\"g\"}", weight); HAL_UART_Transmit(&huart2, "AT+CIPSEND=0,", strlen("AT+CIPSEND=0,"), 100); HAL_UART_Transmit(&huart2, strlen(payload), 2, 100); HAL_UART_Transmit(&huart2, payload, strlen(payload), 100); HAL_Delay(500); }

注意:MQTT主题建议采用分层结构,如home/kitchen/scale1

4. 云端数据可视化

4.1 ThingsBoard仪表盘配置

  1. 创建设备实体并配置MQTT接入点
  2. 设计包含以下组件的仪表盘:
    • 实时重量曲线图
    • 累计重量统计卡片
    • 异常重量报警开关
  3. 设置规则链实现微信推送报警

4.2 本地数据缓存策略

网络中断时的数据保障方案:

  • 使用STM32内部Flash存储最近100条记录
  • 实现FIFO循环存储算法
  • 网络恢复后自动同步历史数据
#define MAX_RECORDS 100 typedef struct { uint32_t timestamp; float weight; } WeightRecord; void Save_ToFlash(WeightRecord record) { static uint16_t write_ptr = 0; FLASH_Program(0x0800FC00 + write_ptr*sizeof(WeightRecord), (uint32_t*)&record, sizeof(WeightRecord)/4); write_ptr = (write_ptr + 1) % MAX_RECORDS; }

5. 典型应用场景扩展

5.1 智能厨房管理系统

  • 食材余量监测:通过重量变化推算消耗量
  • 菜谱分量引导:分步称重指导烹饪流程
  • 购物清单生成:自动计算需补充的食材

5.2 农业监测系统改造

  • 盆栽土壤含水量分析:通过重量变化曲线判断蒸发量
  • 饲料投放监控:记录牲畜每日进食量
  • 蜂蜜产量统计:蜂箱重量的季节性变化分析

在最近的一个阳台种植项目中,这套系统成功实现了对10盆植物的自动水分管理。当花盆重量低于设定阈值时,系统会推送提醒并自动生成浇水记录,误差控制在±2g以内。

http://www.jsqmd.com/news/1099686/

相关文章:

  • Jmeter性能测试与SQL优化——电影收藏清单小程序获取收藏列表
  • 从零构建企业级多智能体教育辅助系统
  • 别把RAG当架构:Ontology(本体)才是Agent的业务世界
  • 数组名的隐式转换规则
  • 2026 照片恢复教程|5 种零基础恢复技巧汇总,最后一个90%人不知道!
  • FPGA加速数字孪生:GRU算法与硬件优化实践
  • 【Springboot毕设全套源码+文档】基于Java+springboot电缆行业生产管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 自动灌溉系统:AI 什么时候浇水,比老农还准?
  • 为什么我们需要关注线程?
  • 解密高并发视频中台:基于 Docker 容器化与 GB28181/RTSP 协议栈的边缘计算全纳架构(附源码交付)
  • tqdm进度条:让命令行程序更友好
  • SkyWalking:分布式系统的全栈监控方案
  • PTA 7-4 列车调度题解:不用队列,一个数组搞定(C语言版,含时间复杂度分析)
  • Linux的职业(要求)与虚拟机安装教程
  • MFile:不止是Minio的“管理中介”
  • Keil MDK vs ARM-GCC(arm-none-eabi-gcc)完整区别
  • Fuso:一个内网穿透工具,用 Rust 写的
  • 战略落地,只差这一步
  • 从手动到半自动:CSDN 技术博客发布效率提升实践(验证版)
  • 关于ISACA第五届数字信任大会两大权威文件
  • “Memory in the Age of AI Agents: A Survey“ 论文笔记
  • 2026年AI写长篇小说工具终极测评:5款热门工具横评,长篇选手到底选哪个
  • define和typedef的区别详解
  • 批量处理远程共享目录中的特定类型文件(如 .hex、.csv 等)。
  • 关于 Vaadin:专为企业级应用打造的 Java Web UI 框架
  • 8元现金优惠券,无门槛直接使用
  • 剪映专业版教程:制作照片旋转轮播效果
  • 专访零数科技林乐:他为何坚信“数据利用”比“数据流通”更接近数字经济的本质?
  • 北斗赋能海洋精准定位
  • 开源WPS AI插件察元AI文档助手:updateTask 与终结状态的时间戳