【实战教程】STM32+HX711 + 蓝牙模块(BLE)高精度体重秤 | 调试指南
前言大家好本篇是超硬核、超完整的 STM32 HX711 称重传感器 蓝牙模块实战教程。我将从零开始带大家实现一个可直接用于共享体重秤、电子秤、物联网称重设备的项目。文章包含硬件接线、模块原理、驱动代码、数据校准、蓝牙透传、上位机 / 小程序接收数据全程可复现新手也能直接跑通项目效果✅ STM32 读取 HX711 称重数据✅ 支持去皮、校准、精度稳定✅ 蓝牙模块实时发送重量数据✅ 可对接小程序、APP、串口调试助手✅ 代码注释详细可直接商用移植一、项目硬件清单模块说明STM32F103C8T6主控最小系统板HX711 模块24 位高精度 AD 转换模块电阻应变式压力传感器50kg 人体秤传感器JDY-31 / HC-08 / 蓝牙 BLE 模块串口透传电源模块5V/3.3V 供电杜邦线、USB 转 TTL调试下载本教程使用STM32F103所有代码兼容 F0/F4/F1 全系列只需修改引脚定义。二、模块原理讲解1. HX711 是什么HX711 是一款专为高精度电子秤设计的 24 位 AD 转换芯片。它能把压力传感器的微弱模拟信号 → 转换成数字信号稳定性远超普通 ADC。特点24 位无丢失代码片内低噪声放大器只需要 2 个 GPIO 即可驱动SCK DOUT2. 蓝牙透传模块我们使用串口蓝牙模块BLE/SPPSTM32 通过串口发送数据蓝牙模块无线转发手机 / 小程序 / 电脑直接接收重量数据三、硬件接线超级重要1. HX711 与 STM32 接线HX711 引脚STM32 引脚VCC5V必须 5VGNDGNDDOUTPA0SCKPA12. 蓝牙模块与 STM32 接线蓝牙模块STM32VCC3.3V / 5VGNDGNDTXPA3USART2_RXRXPA2USART2_TX注意TX 接 RXRX 接 TX交叉接线四、STM32 驱动代码可直接复制1. HX711 驱动头文件hx711.h#ifndef __HX711_H #define __HX711_H #include stm32f10x.h // 引脚定义 #define HX711_DOUT_PIN GPIO_Pin_0 #define HX711_DOUT_PORT GPIOA #define HX711_SCK_PIN GPIO_Pin_1 #define HX711_SCK_PORT GPIOA // 操作宏 #define HX711_DOUT GPIO_ReadInputDataBit(HX711_DOUT_PORT,HX711_DOUT_PIN) #define HX711_SCK_H GPIO_SetBits(HX711_SCK_PORT,HX711_SCK_PIN) #define HX711_SCK_L GPIO_ResetBits(HX711_SCK_PORT,HX711_SCK_PIN) void HX711_Init(void); unsigned long HX711_Read(void); float Get_Weight(void); void Get_Core(void); // 去皮 #endif2. HX711 驱动源文件hx711.c#include hx711.h #include delay.h // 校准系数根据传感器自行调整 #define GAIN 410 // 50kg传感器典型值 unsigned long HX711_Read(void) { unsigned long count0; unsigned char i; while(HX711_DOUT); // 等待数据就绪 for(i0;i24;i) { HX711_SCK_H; countcount1; HX711_SCK_L; if(HX711_DOUT)count; } // 第25个脉冲设置增益 HX711_SCK_H; countcount^0x800000; HX711_SCK_L; return count; } // 初始化GPIO void HX711_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); // SCK - 推挽输出 GPIO_InitStructure.GPIO_PinHX711_SCK_PIN; GPIO_InitStructure.GPIO_ModeGPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz; GPIO_Init(HX711_SCK_PORT,GPIO_InitStructure); // DOUT - 上拉输入 GPIO_InitStructure.GPIO_PinHX711_DOUT_PIN; GPIO_InitStructure.GPIO_ModeGPIO_Mode_IPU; GPIO_Init(HX711_DOUT_PORT,GPIO_InitStructure); HX711_SCK_L; } // 获取去皮基准值 unsigned long empty_weight0; void Get_Core(void) { empty_weightHX711_Read(); } // 获取实际重量 float Get_Weight(void) { unsigned long current; float weight; currentHX711_Read(); weight((float)(current-empty_weight))/GAIN; if(weight0)weight0; return weight; }3. 串口蓝牙初始化代码USART2#include usart2.h void USART2_Init(u32 bound) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); // PA2 TX 复用推挽 GPIO_InitStructure.GPIO_PinGPIO_Pin_2; GPIO_InitStructure.GPIO_ModeGPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz; GPIO_Init(GPIOA,GPIO_InitStructure); // PA3 RX 上拉输入 GPIO_InitStructure.GPIO_PinGPIO_Pin_3; GPIO_InitStructure.GPIO_ModeGPIO_Mode_IPU; GPIO_Init(GPIOA,GPIO_InitStructure); USART_InitStructure.USART_BaudRatebound; USART_InitStructure.USART_WordLengthUSART_WordLength_8b; USART_InitStructure.USART_StopBitsUSART_StopBits_1; USART_InitStructure.USART_ParityUSART_Parity_No; USART_InitStructure.USART_HardwareFlowControlUSART_HardwareFlowControl_None; USART_InitStructure.USART_ModeUSART_Mode_Rx|USART_Mode_Tx; USART_Init(USART2,USART_InitStructure); USART_Cmd(USART2,ENABLE); } // 串口发送字符 void Usart2_Send_Char(u8 ch) { while((USART2-SR0X40)0); USART2-DRch; } // 发送字符串 void Usart2_Send_String(u8 *str) { while(*str) { Usart2_Send_Char(*str); str; } }4. 主函数main.c#include stm32f10x.h #include delay.h #include hx711.h #include usart2.h #include stdio.h int main(void) { float weight; u8 buf[30]; delay_init(); HX711_Init(); USART2_Init(9600); // 蓝牙波特率9600 delay_ms(1000); Get_Core(); // 开机去皮 while(1) { weightGet_Weight(); sprintf((char*)buf,Weight:%.2f kg\r\n,weight); Usart2_Send_String(buf); // 蓝牙发送 delay_ms(200); } }五、校准方法新手必看先不放任何重物开机执行一次Get_Core()放上已知重量砝码观察串口输出修改hx711.c中的#define GAIN 410数值偏大 → 增大 GAIN数值偏小 → 减小 GAIN50kg 人体秤典型校准值400~450六、蓝牙调试效果手机下载蓝牙调试助手连接模块后可实时收到Weight:0.00 kg Weight:52.35 kg Weight:68.12 kg数据稳定、无漂移、精度高七、常见问题与解决1. HX711 读不到数据检查供电必须5VDOUT/SCK 接线是否正确传感器是否损坏2. 数据跳动大增加滤波多次读取取平均传感器地线要共地避免电源线干扰3. 蓝牙收不到数据检查 TX/RX 交叉接波特率必须一致9600蓝牙模块供电必须稳定八、扩展方向直接商用加入 OLED 屏幕→ 显示实时重量加入按键→ 手动去皮、切换单位对接微信小程序→ 做共享体重秤上传云端→ 物联网称重系统总结本篇教程从0 到 1完成了 STM32 HX711 蓝牙的实战开发代码稳定、注释详细、可直接用于毕业设计、产品开发。HX711 是工业级称重模块配合 STM32 非常适合做✅ 共享体重秤 ✅ 智能电子秤 ✅ 物联网称重 ✅ 自动化设备