news 2026/7/4 2:32:17

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从厨房秤到智能称重:用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以内。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 5:40:19

注解的基本语法

定义注解 使用interface关键字来定义注解&#xff1a; public interface AutoFill { } 元注解 元注解是用来注解其他注解的注解&#xff0c;Java提供了以下几种元注解&#xff1a; Target - 指定注解可以应用的目标元素类型 Retention - 指定注解的保留策略 Documented - …

作者头像 李华
网站建设 2026/7/3 11:13:36

告别泰拉瑞亚原版限制:tModLoader模组开发实战手册

告别泰拉瑞亚原版限制&#xff1a;tModLoader模组开发实战手册 【免费下载链接】tModLoader A mod to make and play Terraria mods. Supports Terraria 1.4 (and earlier) installations 项目地址: https://gitcode.com/gh_mirrors/tm/tModLoader 还在为泰拉瑞亚原版内…

作者头像 李华
网站建设 2026/7/2 7:07:59

define和typedef的区别详解

前言在C/C编程中&#xff0c;#define和typedef都常用于为类型或值起一个别名&#xff0c;但它们的工作原理、适用场景和行为差异却天差地别。很多初学者甚至有一定经验的开发者都容易混淆二者&#xff0c;写出“看似正确却暗藏隐患”的代码。本文将深入剖析#define与typedef的本…

作者头像 李华
网站建设 2026/7/1 2:17:25

Windows本地实时语音转文字:TMSpeech让你的电脑变身智能会议助手

Windows本地实时语音转文字&#xff1a;TMSpeech让你的电脑变身智能会议助手 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录手忙脚乱&#xff1f;在线课程听得一知半解&#xff1f;今天我要向你介绍…

作者头像 李华
网站建设 2026/7/3 3:15:13

Excel5

笔记&#xff1a;CtrlC&#xff1a;复制&#xff1b; CtrlX&#xff1a;剪切&#xff1b; CtrlV&#xff1a;粘贴。按住Ctrl键移动单元格&#xff0c;等同于复制粘贴。选择多列&#xff0c;双击某两列列标中间的间隙&#xff0c;等同于以最合适的列宽显示文字内容。&#x…

作者头像 李华