#include "HX711.h" //HX711 传感器的驱动库文件,必须包含才能使用 HX711 的通信功能。
//#include "HX711.h":1. 先在当前项目目录(.ino 文件所在文件夹)查找;2. 再去 Arduino 的用户库目录(如 Documents/Arduino/libraries)查找;3. 最后去系统库目录查找
//#include "HX711.h":第三方库、自定义头文件、本地项目文件
//#include <HX711.h>:1. 直接去系统库目录和用户库目录查找;2. 不会搜索当前项目目录
//#include <HX711.h>:Arduino 内置标准库(如 Wire.h、Servo.h)、系统级头文件
const int LOADCELL_DOUT_PIN = 32; //LOADCELL_DOUT_PIN:HX711 的数据输出引脚,传感器转换后的 24 位重量数据,通过这个引脚发送给 ESP32。
const int LOADCELL_SCK_PIN = 33; //LOADCELL_SCK_PIN:HX711 的时钟信号引脚,ESP32 通过这个引脚发送时钟脉冲,控制数据读取的节奏。
//HX711 用的是数字 GPIO 引脚,不是模拟输入引脚,所以这里选了 ESP32 的 GPIO32 和 33(这两个引脚无特殊启动限制,适合做数字通信)。
HX711 scale; //创建一个 HX711 类的对象,命名为scale。后续所有和 HX711 的通信操作(初始化、读取数据、去皮),都通过这个scale对象来调用。
float calibration_factor = 2280; // calibration_factor = 2280:校准系数,是把 HX711 原始 ADC 值转换成实际重量的关键参数。
//HX711 输出的是原始数字值,这个值和重量的比例关系需要通过校准确定,calibration_factor就是这个比例系数。
//2280是示例值,实际使用时,需要用已知重量的物体校准(比如放 1kg 砝码,调整系数直到串口显示 1.00kg),不同传感器、接线方式的系数都不一样。
void setup() {
Serial.begin(115200); //初始化串口通信,波特率 115200
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); //初始化 HX711 对象,告诉库 DOUT 和 SCK 引脚分别接在 ESP32 的哪个引脚上,建立单片机和 HX711 的通信链路。
scale.set_scale(calibration_factor); //给 HX711 设置校准系数,让库知道 “每单位原始值对应多少实际重量”,后续调用读取函数时,就能直接返回校准后的重量值
scale.tare(); //去皮操作,也叫 “归零”。作用:把当前传感器上的重量设为零点,比如秤盘本身有重量,调用tare()后,秤盘的重量会被清零,后续读取的重量就是额外放上去的物体的重量。
Serial.println("HX711称重传感器初始化完成"); //串口打印提示信息,确认程序和传感器初始化正常完成。
}
void loop() {
float weight = scale.get_units(5); //读取并返回校准后的实际重量值,参数5代表连续读取 5 次数据并取平均值。
Serial.printf("重量: %.2f kg\n", weight); //单位:由校准系数决定,这里代码中按 kg 处理,所以返回的数值单位是千克。
delay(500); //延时 500 毫秒,即每 0.5 秒读取一次重量数据,避免刷新太快导致串口刷屏,同时也减少 CPU 占用。
}