尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

用MicroPython给ESP32做个智能厨房秤:HX711传感器实战教程(附校准避坑指南)

用MicroPython给ESP32做个智能厨房秤:HX711传感器实战教程(附校准避坑指南) 用MicroPython给ESP32做个智能厨房秤HX711传感器实战教程附校准避坑指南厨房秤是烘焙和烹饪爱好者的必备工具但传统电子秤功能单一无法记录称重数据或与其他智能设备联动。本文将带你用ESP32开发板、HX711称重传感器和MicroPython打造一个可联网的智能厨房秤。这个项目不仅能精确测量食材重量还能通过Wi-Fi将数据同步到手机App实现食谱自动计算、营养分析等高级功能。1. 硬件选型与搭建1.1 核心组件清单制作智能厨房秤需要以下硬件ESP32开发板推荐使用ESP32-WROOM-32内置Wi-Fi和蓝牙价格约30-50元HX711模块24位ADC称重传感器专用芯片市场价约5-8元称重传感器5kg量程悬臂梁式注意选择不锈钢材质防腐蚀其他材料亚克力板或木板用于制作秤盘M3螺丝螺母套装杜邦线若干提示购买称重传感器时务必确认其接线方式与HX711兼容。常见的有4线制和6线制家庭使用推荐4线制即可。1.2 机械结构设计称重传感器的安装方式直接影响测量精度。以下是两种常见的DIY方案对比方案优点缺点适用场景单点支撑结构简单成本低容易受侧向力影响小量程(3kg)四点平衡测量稳定抗干扰强组装复杂需要调平大量程(3kg)对于厨房秤建议采用单点支撑结构将称重传感器一端固定在底座上另一端连接15×15cm的亚克力秤盘使用3D打印或激光切割制作支架确保受力垂直2. 电路连接与MicroPython环境配置2.1 HX711与ESP32接线HX711模块与ESP32的连接非常简单# 推荐接线方式 HX711_DT_PIN 23 # 数据线(紫色) HX711_SCK_PIN 22 # 时钟线(白色)实际物理连接HX711的VCC接ESP32的3.3VGND接GNDDT接GPIO23SCK接GPIO22注意避免使用GPIO0、GPIO2等特殊功能引脚这些引脚在启动时可能有特殊用途。2.2 MicroPython固件刷写为ESP32刷写MicroPython固件的步骤# 使用esptool刷写固件 esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash -z 0x1000 esp32-20220117-v1.18.bin关键操作要点按住BOOT按钮再插USB进入刷机模式刷机完成后使用Thonny IDE连接ESP32首次运行需要初始化文件系统import uos uos.mkfs(/flash)3. MicroPython代码实现3.1 HX711驱动库我们需要先安装HX711的MicroPython库。将以下代码保存为hx711.pyfrom machine import Pin import time class HX711: def __init__(self, dout, pd_sck, gain128): self.pSCK Pin(pd_sck, modePin.OUT) self.pOUT Pin(dout, modePin.IN) self.GAIN gain self.OFFSET 0 self.SCALE 1 def read(self): while self.pOUT.value(): pass data 0 for _ in range(24): self.pSCK.value(1) time.sleep_us(1) data (data 1) | self.pOUT.value() self.pSCK.value(0) time.sleep_us(1) # 设置增益 for _ in range(self.GAIN): self.pSCK.value(1) time.sleep_us(1) self.pSCK.value(0) time.sleep_us(1) return data ^ 0x800000 if data 0x800000 else data3.2 主程序逻辑主程序需要实现称重、校准和Wi-Fi上传功能import network import urequests from hx711 import HX711 from machine import Pin, deepsleep # Wi-Fi配置 WIFI_SSID your_wifi WIFI_PASS your_password # 初始化HX711 hx HX711(dout23, pd_sck22) def connect_wifi(): sta_if network.WLAN(network.STA_IF) if not sta_if.isconnected(): sta_if.active(True) sta_if.connect(WIFI_SSID, WIFI_PASS) while not sta_if.isconnected(): pass return sta_if.ifconfig()[0] def send_to_server(weight): url http://yourserver.com/api/weight data {weight: weight, unit: g} try: urequests.post(url, jsondata) except: pass def main(): ip connect_wifi() print(IP:, ip) # 读取重量并发送 raw hx.read() weight (raw - hx.OFFSET) / hx.SCALE send_to_server(weight) # 深度睡眠省电 deepsleep(10000) if __name__ __main__: main()4. 校准实战与常见问题解决4.1 三步校准法校准是保证精度的关键推荐采用以下步骤零点校准空载状态下运行以下代码获取偏移量hx.OFFSET hx.read()量程校准放置已知重量的砝码如500g计算比例系数raw hx.read() hx.SCALE (raw - hx.OFFSET) / 500.0多点验证分别测试100g、1kg、3kg等不同重量记录误差并微调SCALE值4.2 常见问题排查以下是实际使用中可能遇到的问题及解决方案问题现象可能原因解决方法读数漂移电源不稳定使用稳压电源添加0.1uF电容显示负值传感器方向接反调换传感器两端位置数值跳变机械振动干扰增加防震垫软件滤波无法归零传感器过载检查是否超量程重新校准4.3 软件滤波技巧原始数据通常存在噪声可以采用以下滤波算法# 移动平均滤波 def smooth_read(hx, samples5): values [] for _ in range(samples): values.append(hx.read()) time.sleep_ms(50) values.sort() return sum(values[1:-1]) / (samples - 2) # 去掉最高最低 # 使用示例 stable_value smooth_read(hx)5. 进阶功能扩展5.1 手机App数据可视化通过MQTT协议将数据发送到手机端在ESP32上安装umqtt库配置MQTT服务器信息手机端使用MQTT客户端订阅主题示例代码片段from umqtt.simple import MQTTClient def mqtt_publish(weight): client MQTTClient(esp32_scale, mqtt.server.com) client.connect() client.publish(bkitchen/weight, str(weight)) client.disconnect()5.2 自动单位换算根据重量自动切换显示单位def auto_unit(weight_g): if weight_g 1000: return f{weight_g:.1f}g else: return f{weight_g/1000:.2f}kg5.3 食谱模式存储常见食材密度自动计算体积ingredients { flour: 0.57, # g/cm³ sugar: 0.85, water: 1.0 } def calc_volume(name, weight): if name in ingredients: return weight / ingredients[name] return 0实际使用中发现HX711在长时间工作后会出现轻微温漂。解决方法是每隔2小时自动执行一次零点校准或者在程序启动时检测环境温度应用温度补偿系数。
返回列表